From f70b2b940f1dcbd2c2af3523b5aaf46a6193c3eb Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sun, 15 May 2016 10:51:33 -0400 Subject: [PATCH] core/playlists/artist: Add basic artist operations For now, hidden tracks are shown in artist queues. Signed-off-by: Anna Schumaker --- core/playlists/artist.c | 46 ++++++++++++++++++++++++++++++++++- tests/core/playlists/artist.c | 7 ++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/core/playlists/artist.c b/core/playlists/artist.c index f6967124..f1b7d14d 100644 --- a/core/playlists/artist.c +++ b/core/playlists/artist.c @@ -40,7 +40,51 @@ static bool __artist_pl_load(void *data) } -struct playlist_type pl_artist; +static struct queue *pl_artist_get_queue(const gchar *name) +{ + struct artist *artist = artist_lookup(name); + struct playlist *playlist = artist ? artist->ar_playlist : NULL; + return playlist ? &playlist->pl_queue : NULL; +} + +static bool pl_artist_new_delete(const gchar *name) +{ + return false; +} + +static bool pl_artist_add_rm(const gchar *name, struct track *track) +{ + return false; +} + +static void pl_artist_update(const gchar *name) +{ +} + +static void pl_artist_set_flag(const gchar *name, enum queue_flags flag, + bool enabled) +{ + struct queue *queue = pl_artist_get_queue(name); + (enabled ? queue_set_flag : queue_unset_flag)(queue, flag); +} + +static void pl_artist_sort(const gchar *name, enum compare_t sort, bool reset) +{ + struct queue *queue = pl_artist_get_queue(name); + queue_sort(queue, sort, reset); +} + + +struct playlist_type pl_artist = { + .pl_get_queue = pl_artist_get_queue, + .pl_new = pl_artist_new_delete, + .pl_delete = pl_artist_new_delete, + .pl_add_track = pl_artist_add_rm, + .pl_remove_track = pl_artist_add_rm, + .pl_update = pl_artist_update, + .pl_set_flag = pl_artist_set_flag, + .pl_sort = pl_artist_sort, +}; static bool __artist_pl_init(void *data) diff --git a/tests/core/playlists/artist.c b/tests/core/playlists/artist.c index e1bf9d0c..d8d58bae 100644 --- a/tests/core/playlists/artist.c +++ b/tests/core/playlists/artist.c @@ -21,6 +21,9 @@ void test_artist() tags_init(); while (idle_run_task()) {}; + test_equal(pl_artist.pl_new("Koji Kondo"), (bool)false); + test_equal((void *)pl_artist.pl_get_queue("Koji Kondo"), NULL); + /* Add tracks to the collection. */ library = library_find("tests/Music"); track_add(library, "tests/Music/Hyrule Symphony/01 - Title Theme.ogg"); @@ -28,13 +31,17 @@ void test_artist() artist = artist_find("Koji Kondo"); test_equal(artist->ar_playlist, NULL); + test_equal(pl_artist.pl_delete("Koji Kondo"), (bool)false); + test_equal(pl_artist.pl_add_track("Koji Kondo", track_get(0)), (bool)false); pl_artist_init(NULL); while (idle_run_task()) {}; playlist = (struct playlist *)artist->ar_playlist; + test_equal(queue_size(pl_artist.pl_get_queue("Koji Kondo")), 2); test_not_equal(artist->ar_playlist, NULL); test_equal(queue_size(&playlist->pl_queue), 2); + test_equal(pl_artist.pl_remove_track("Koji Kondo", track_get(0)), (bool)false); pl_artist_deinit(); test_equal(artist->ar_playlist, NULL);