core/queue: Remove Q_ADD_FRONT flag
And replace its use with a queue_add_front() function instead. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
c59b097638
commit
9b4a1785a1
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 = {
|
||||
|
|
12
core/queue.c
12
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);
|
||||
}
|
||||
|
|
|
@ -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 *);
|
||||
|
|
|
@ -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".
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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++) {
|
||||
|
|
Loading…
Reference in New Issue