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:
Anna Schumaker 2016-09-20 16:28:00 -04:00
parent a45c7d6889
commit 859ff8656f
7 changed files with 13 additions and 24 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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;
}

View File

@ -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)
{

View File

@ -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 */

View File

@ -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);