core/playlist: Implement playlist_has() directly
We can make use of g_queue_find() to find the track for us, and then convert its return value into a boolean. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
a45c7d6889
commit
859ff8656f
|
@ -188,13 +188,6 @@ bool playlist_remove(struct playlist *playlist, struct track *track)
|
|||
return ret;
|
||||
}
|
||||
|
||||
bool playlist_has(struct playlist *playlist, struct track *track)
|
||||
{
|
||||
if (!playlist || !track)
|
||||
return false;
|
||||
return queue_has(&playlist->pl_queue, track);
|
||||
}
|
||||
|
||||
unsigned int playlist_size(struct playlist *playlist)
|
||||
{
|
||||
return playlist ? queue_size(&playlist->pl_queue) : 0;
|
||||
|
|
|
@ -137,7 +137,7 @@ void playlist_generic_clear(struct playlist *playlist)
|
|||
|
||||
bool playlist_generic_add_track(struct playlist *playlist, struct track *track)
|
||||
{
|
||||
if (queue_has(&playlist->pl_queue, track))
|
||||
if (playlist_has(playlist, track))
|
||||
return false;
|
||||
queue_add(&playlist->pl_queue, track);
|
||||
return true;
|
||||
|
@ -146,7 +146,7 @@ bool playlist_generic_add_track(struct playlist *playlist, struct track *track)
|
|||
bool playlist_generic_add_track_front(struct playlist *playlist,
|
||||
struct track *track)
|
||||
{
|
||||
if (queue_has(&playlist->pl_queue, track))
|
||||
if (playlist_has(playlist, track))
|
||||
return false;
|
||||
queue_add_front(&playlist->pl_queue, track);
|
||||
return true;
|
||||
|
|
|
@ -48,7 +48,7 @@ static bool sys_pl_update_func(void *data)
|
|||
struct track *track = TRACK(dbe);
|
||||
|
||||
if (sys_pl_update_check(playlist, track) &&
|
||||
!queue_has(&pl_system_get(SYS_PL_HIDDEN)->pl_queue, track))
|
||||
!playlist_has(pl_system_get(SYS_PL_HIDDEN), track))
|
||||
playlist_generic_add_track_front(playlist, track);
|
||||
else
|
||||
playlist_generic_remove(playlist, track);
|
||||
|
|
11
core/queue.c
11
core/queue.c
|
@ -125,14 +125,3 @@ void queue_clear(struct queue *queue)
|
|||
g_queue_clear(&queue->q_tracks);
|
||||
__queue_clear(queue, n);
|
||||
}
|
||||
|
||||
bool queue_has(struct queue *queue, struct track *track)
|
||||
{
|
||||
struct queue_iter it;
|
||||
|
||||
queue_for_each(queue, &it) {
|
||||
if (queue_iter_val(&it) == track)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -82,6 +82,13 @@ struct playlist_type {
|
|||
};
|
||||
|
||||
|
||||
/* Called to check if the playlist contains a specific track. */
|
||||
static inline bool playlist_has(struct playlist *playlist, struct track *track)
|
||||
{
|
||||
return playlist ? g_queue_find(&playlist->pl_queue.q_tracks, track) != NULL :
|
||||
false;
|
||||
}
|
||||
|
||||
/* Called to clear the sort order of the playlist. */
|
||||
static inline void playlist_clear_sort(struct playlist *playlist)
|
||||
{
|
||||
|
|
|
@ -116,7 +116,4 @@ unsigned int queue_add_front(struct queue *, struct track *);
|
|||
/* Called to remove all tracks from the queue. */
|
||||
void queue_clear(struct queue *);
|
||||
|
||||
/* Called to check if a queue has a track. */
|
||||
bool queue_has(struct queue *, struct track *);
|
||||
|
||||
#endif /* OCARINA_CORE_QUEUE_H */
|
||||
|
|
|
@ -75,6 +75,7 @@ static void test_playlist()
|
|||
|
||||
for (i = 0; i < 13; i++) {
|
||||
playlist_generic_add_track_front(&p, track_get(i));
|
||||
g_assert_true(playlist_has(&p, track_get(i)));
|
||||
ex_length += track_get(i)->tr_length;
|
||||
}
|
||||
|
||||
|
@ -93,12 +94,14 @@ static void test_playlist()
|
|||
for (i = 0; i < 13; i++) {
|
||||
ex_length -= track_get(i)->tr_length;
|
||||
g_assert_true(playlist_remove(&p, track_get(i)));
|
||||
g_assert_false(playlist_has(&p, track_get(i)));
|
||||
g_assert(cb_playlist == &p);
|
||||
g_assert(cb_track == track_get(i));
|
||||
g_assert_cmpuint(p.pl_queue.q_length, ==, ex_length);
|
||||
g_assert_cmpuint(p.pl_queue.q_cur.it_pos, ==, (11 - i));
|
||||
}
|
||||
g_assert_false(playlist_generic_remove(&p, NULL));
|
||||
g_assert_false(playlist_has(&p, track_get(i)));
|
||||
g_assert(cb_playlist == &p);
|
||||
g_assert(cb_track == track_get(12));
|
||||
g_assert_cmpuint(p.pl_queue.q_length, ==, ex_length);
|
||||
|
|
Loading…
Reference in New Issue