From 9b4a1785a1733870b8e63cad32d1517ea4dc627a Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 8 Sep 2016 09:08:18 -0400 Subject: [PATCH] core/queue: Remove Q_ADD_FRONT flag And replace its use with a queue_add_front() function instead. Signed-off-by: Anna Schumaker --- core/playlists/artist.c | 5 ++--- core/playlists/generic.c | 11 ++++++++++- core/playlists/library.c | 5 ++--- core/playlists/system.c | 20 ++++++++++++++------ core/queue.c | 12 ++++++------ include/core/playlists/type.h | 3 ++- include/core/queue.h | 19 +++++++++++-------- tests/core/playlists/system.c | 9 --------- tests/core/queue.c | 9 +++------ 9 files changed, 50 insertions(+), 43 deletions(-) diff --git a/core/playlists/artist.c b/core/playlists/artist.c index b5c4b299..db0e852b 100644 --- a/core/playlists/artist.c +++ b/core/playlists/artist.c @@ -34,13 +34,12 @@ static bool __artist_pl_add(void *data) struct artist *artist = artist_lookup(playlist->pl_name); struct db_entry *dbe, *next; - queue_set_flag(&playlist->pl_queue, Q_ADD_FRONT); db_for_each(dbe, next, track_db_get()) { if (TRACK(dbe)->tr_album->al_artist == artist) - queue_add(&playlist->pl_queue, TRACK(dbe)); + queue_add_front(&playlist->pl_queue, TRACK(dbe)); } - queue_unset_flag(&playlist->pl_queue, Q_ADD_FRONT); + queue_resort(&playlist->pl_queue); return true; } diff --git a/core/playlists/generic.c b/core/playlists/generic.c index 27bb7e1b..04737846 100644 --- a/core/playlists/generic.c +++ b/core/playlists/generic.c @@ -59,6 +59,15 @@ bool playlist_generic_add_track(struct playlist *playlist, struct track *track) return true; } +bool playlist_generic_add_track_front(struct playlist *playlist, + struct track *track) +{ + if (queue_has(&playlist->pl_queue, track)) + return false; + queue_add_front(&playlist->pl_queue, track); + return true; +} + bool playlist_generic_remove_track(struct playlist *playlist, struct track *track) { return queue_remove_all(&playlist->pl_queue, track); @@ -79,7 +88,7 @@ static bool __playlist_generic_update(void *data) playlist_generic_remove_track(pud->pud_playlist, TRACK(dbe)); } - queue_unset_flag(&pud->pud_playlist->pl_queue, Q_ADD_FRONT); + queue_resort(&pud->pud_playlist->pl_queue); g_free(pud); return true; } diff --git a/core/playlists/library.c b/core/playlists/library.c index 2b919fd1..d1ff522c 100644 --- a/core/playlists/library.c +++ b/core/playlists/library.c @@ -42,13 +42,12 @@ static bool __lib_pl_add(void *data) struct library *library = library_lookup(playlist->pl_name); struct db_entry *dbe, *next; - queue_set_flag(&playlist->pl_queue, Q_ADD_FRONT); db_for_each(dbe, next, track_db_get()) { if (TRACK(dbe)->tr_library == library) - queue_add(&playlist->pl_queue, TRACK(dbe)); + queue_add_front(&playlist->pl_queue, TRACK(dbe)); } - queue_unset_flag(&playlist->pl_queue, Q_ADD_FRONT); + queue_resort(&playlist->pl_queue); return true; } diff --git a/core/playlists/system.c b/core/playlists/system.c index 6c1ed3ab..05db9cd2 100644 --- a/core/playlists/system.c +++ b/core/playlists/system.c @@ -25,7 +25,7 @@ static struct sys_playlist *sys_playlists[SYS_PL_NUM_PLAYLISTS]; static void sys_pl_generic_init(struct playlist *playlist, unsigned int flags, struct queue_ops *ops) { - playlist_generic_init(playlist, Q_REPEAT | Q_ADD_FRONT, ops); + playlist_generic_init(playlist, Q_REPEAT, ops); } static void sys_pl_update_init(struct playlist *playlist, unsigned int flags, @@ -65,6 +65,14 @@ static bool sys_pl_generic_add(struct playlist *playlist, struct track *track) return playlist_generic_add_track(playlist, track); } +static bool sys_pl_generic_add_front(struct playlist *playlist, + struct track *track) +{ + if (queue_has(__sys_pl_queue(SYS_PL_HIDDEN), track)) + return false; + return playlist_generic_add_track_front(playlist, track); +} + /* @@ -229,12 +237,12 @@ static struct sys_playlist sys_collection = { static void sys_pl_history_init(struct playlist *playlist, unsigned int flags, struct queue_ops *ops) { - queue_init(&playlist->pl_queue, Q_REPEAT | Q_ADD_FRONT, ops, playlist); + queue_init(&playlist->pl_queue, Q_REPEAT, ops, playlist); } static bool sys_pl_history_add(struct playlist *playlist, struct track *track) { - queue_add(&playlist->pl_queue, track); + queue_add_front(&playlist->pl_queue, track); queue_iter_set(&playlist->pl_queue, &playlist->pl_queue.q_cur, 0); return true; } @@ -269,7 +277,7 @@ static bool sys_pl_unplayed_update(struct playlist *playlist, { if (track->tr_count > 0) return false; - return sys_pl_generic_add(playlist, track) || true; + return sys_pl_generic_add_front(playlist, track) || true; } static struct sys_playlist sys_unplayed = { @@ -305,7 +313,7 @@ static bool sys_pl_most_played_update(struct playlist *playlist, unsigned int average = track_db_average_plays(); if (track->tr_count <= average) return false; - return sys_pl_generic_add(playlist, track) || true; + return sys_pl_generic_add_front(playlist, track) || true; } static struct sys_playlist sys_most_played = { @@ -341,7 +349,7 @@ static bool sys_pl_least_played_update(struct playlist *playlist, unsigned int average = track_db_average_plays(); if (!track->tr_count || track->tr_count > average) return false; - return sys_pl_generic_add(playlist, track) || true; + return sys_pl_generic_add_front(playlist, track) || true; } static struct sys_playlist sys_least_played = { diff --git a/core/queue.c b/core/queue.c index 8c090a5c..74468b5e 100644 --- a/core/queue.c +++ b/core/queue.c @@ -226,21 +226,20 @@ void queue_unset_flag(struct queue *queue, enum queue_flags flag) if (!queue_has_flag(queue, flag)) return; queue->q_flags &= ~flag; - if (flag == Q_ADD_FRONT) { - queue_resort(queue); - queue_iter_set(queue, &queue->q_cur, queue->q_cur.it_pos); - } } unsigned int queue_add(struct queue *queue, struct track *track) { - if (queue_has_flag(queue, Q_ADD_FRONT)) - return __queue_add_head(queue, track); if (queue->q_sort) return __queue_add_sorted(queue, track); return __queue_add_tail(queue, track); } +unsigned int queue_add_front(struct queue *queue, struct track *track) +{ + return __queue_add_head(queue, track); +} + void queue_erase(struct queue *queue, unsigned int index) { struct queue_iter it; @@ -353,6 +352,7 @@ void queue_resort(struct queue *queue) { g_queue_sort(&queue->q_tracks, track_less_than, queue->q_sort); + queue_iter_set(queue, &queue->q_cur, queue->q_cur.it_pos); for (unsigned int i = 0; i < queue_size(queue); i++) __queue_updated(queue, i); } diff --git a/include/core/playlists/type.h b/include/core/playlists/type.h index 3619c9f1..908325ea 100644 --- a/include/core/playlists/type.h +++ b/include/core/playlists/type.h @@ -93,8 +93,9 @@ bool playlist_generic_can_select(struct playlist *); /* Generic playlist clear operation. */ void playlist_generic_clear(struct playlist *); -/* Generic playlist add track operation. */ +/* Generic playlist add track operations. */ bool playlist_generic_add_track(struct playlist *, struct track *); +bool playlist_generic_add_track_front(struct playlist *, struct track *); /* Generic playlist remove track operation. */ bool playlist_generic_remove_track(struct playlist *, struct track *); diff --git a/include/core/queue.h b/include/core/queue.h index f642851c..03f771d8 100644 --- a/include/core/queue.h +++ b/include/core/queue.h @@ -15,16 +15,16 @@ struct queue; enum queue_flags { - Q_UNUSED_0 = (1 << 0), /* Removed: 6.5.4 */ - Q_RANDOM = (1 << 1), /* Queue will pick songs randomly. */ - Q_REPEAT = (1 << 2), /* Queue will not remove songs when picked. */ - Q_UNUSED_3 = (1 << 3), /* Removed: 6.5.4 */ - Q_UNUSED_4 = (1 << 4), /* Removed: 6.5.4 */ - Q_UNUSED_5 = (1 << 5), /* Removed: 6.5.4 */ - Q_ADD_FRONT = (1 << 6), /* Queue will add new tracks at the front. */ + Q_UNUSED_0 = (1 << 0), /* Removed: 6.5.4 */ + Q_RANDOM = (1 << 1), /* Queue will pick songs randomly. */ + Q_REPEAT = (1 << 2), /* Queue will not remove songs when picked. */ + Q_UNUSED_3 = (1 << 3), /* Removed: 6.5.4 */ + Q_UNUSED_4 = (1 << 4), /* Removed: 6.5.4 */ + Q_UNUSED_5 = (1 << 5), /* Removed: 6.5.4 */ + Q_UNUSED_6 = (1 << 6), /* Removed: 6.5.4 */ }; -#define Q_UNUSED_MASK (~(Q_UNUSED_0 | Q_UNUSED_3 | Q_UNUSED_4 | Q_UNUSED_5)) +#define Q_UNUSED_MASK (~(Q_UNUSED_0 | Q_UNUSED_3 | Q_UNUSED_4 | Q_UNUSED_5 | Q_UNUSED_6)) struct queue_ops { @@ -158,6 +158,9 @@ static inline struct track *queue_at(struct queue *queue, unsigned int index) /* Called to add a track to the queue. */ unsigned int queue_add(struct queue *, struct track *); +/* Called to add a track to the front of the queue. */ +unsigned int queue_add_front(struct queue *, struct track *); + /* * Called to erase a track from the queue by index. * This can be prevented if qop_erase() returns "false". diff --git a/tests/core/playlists/system.c b/tests/core/playlists/system.c index 5080f7c0..4bd64db5 100644 --- a/tests/core/playlists/system.c +++ b/tests/core/playlists/system.c @@ -90,7 +90,6 @@ do { \ g_assert_nonnull(queue); \ __test_playlist_state(name, 0, false, false); \ while (idle_run_task()) {}; \ - g_assert_false(queue_has_flag(queue, Q_ADD_FRONT)); \ __test_playlist_state(name, ex_size, ex_track0, ex_track1); \ } while (0) @@ -129,7 +128,6 @@ static void test_favorites() struct queue *queue = playlist_get_queue(PL_SYSTEM, "Favorites"); g_assert_nonnull(queue); - g_assert_false(queue_has_flag(queue, Q_ADD_FRONT)); g_assert_true(queue_has_flag(queue, Q_REPEAT)); __test_playlist_id("Favorites", SYS_PL_FAVORITES); @@ -151,7 +149,6 @@ static void test_hidden() g_assert_nonnull(queue); g_assert_null(playlist_get_queue(PL_SYSTEM, "Banned")); - g_assert_false(queue_has_flag(queue, Q_ADD_FRONT)); g_assert_true(queue_has_flag(queue, Q_REPEAT)); __test_playlist_id("Hidden", SYS_PL_HIDDEN); @@ -172,7 +169,6 @@ static void test_queued() struct queue *queue = playlist_get_queue(PL_SYSTEM, "Queued Tracks"); g_assert_nonnull(queue); - g_assert_false(queue_has_flag(queue, Q_ADD_FRONT)); g_assert_false(queue_has_flag(queue, Q_REPEAT)); g_assert_cmpuint(g_slist_length(queue->q_sort), ==, 0); @@ -209,7 +205,6 @@ static void test_collection() pl_system_init(NULL); g_assert_nonnull(queue); - g_assert_true(queue_has_flag(queue, Q_ADD_FRONT)); g_assert_true(queue_has_flag(queue, Q_REPEAT)); __test_playlist_id("Collection", SYS_PL_COLLECTION); @@ -230,7 +225,6 @@ static void test_history() struct queue *queue = playlist_get_queue(PL_SYSTEM, "History"); g_assert_nonnull(queue); - g_assert_true(queue_has_flag(queue, Q_ADD_FRONT)); g_assert_true(queue_has_flag(queue, Q_REPEAT)); __test_playlist_id("History", SYS_PL_HISTORY); __test_playlist_noselect("History"); @@ -271,7 +265,6 @@ static void test_unplayed() pl_system_init(NULL); g_assert_nonnull(queue); - g_assert_true(queue_has_flag(queue, Q_ADD_FRONT)); g_assert_true(queue_has_flag(queue, Q_REPEAT)); __test_playlist_id("Unplayed", SYS_PL_UNPLAYED); @@ -316,7 +309,6 @@ static void test_most_played() pl_system_init(NULL); g_assert_nonnull(most); - g_assert_true(queue_has_flag(most, Q_ADD_FRONT)); g_assert_true(queue_has_flag(most, Q_REPEAT)); __test_playlist_id("Most Played", SYS_PL_MOST_PLAYED); @@ -360,7 +352,6 @@ static void test_least_played() pl_system_init(NULL); g_assert_nonnull(least); - g_assert_true(queue_has_flag(least, Q_ADD_FRONT)); g_assert_true(queue_has_flag(least, Q_REPEAT)); __test_playlist_id("Least Played", SYS_PL_LEAST_PLAYED); diff --git a/tests/core/queue.c b/tests/core/queue.c index a67c6eff..062c0716 100644 --- a/tests/core/queue.c +++ b/tests/core/queue.c @@ -118,18 +118,15 @@ static void test_flags() g_assert_false(queue_has_flag(&q, Q_UNUSED_3)); g_assert_false(queue_has_flag(&q, Q_UNUSED_4)); g_assert_false(queue_has_flag(&q, Q_UNUSED_5)); - g_assert_false(queue_has_flag(&q, Q_ADD_FRONT)); + g_assert_false(queue_has_flag(&q, Q_UNUSED_6)); queue_set_flag(&q, Q_RANDOM); queue_set_flag(&q, Q_REPEAT); - queue_set_flag(&q, Q_ADD_FRONT); g_assert_true(queue_has_flag(&q, Q_RANDOM)); g_assert_true(queue_has_flag(&q, Q_REPEAT)); - g_assert_true(queue_has_flag(&q, Q_ADD_FRONT)); queue_unset_flag(&q, Q_RANDOM); queue_unset_flag(&q, Q_REPEAT); - queue_unset_flag(&q, Q_ADD_FRONT); g_assert_cmpuint(q.q_flags, ==, 0); } @@ -343,11 +340,11 @@ static void test_sorting() unsigned int i; struct queue q; - queue_init(&q, Q_ADD_FRONT, &test_ops, NULL); + queue_init(&q, 0, &test_ops, NULL); for (i = 0; i < 13; i++) { track = track_get(i); track->tr_count = (track->tr_track <= 6) ? 4 : 2; - queue_add(&q, track); + queue_add_front(&q, track); } for (i = 0; i < 13; i++) {