From 1b9cdf5a5ce3efbc1baa9053fe50fdb77f9070c0 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sat, 10 Sep 2016 12:08:11 -0400 Subject: [PATCH] core/playlist: playlist_add() uses a playlist-level function pointer Rather than going through playlist-type operations. Additionally, I take this opportunity to change playlist_add() to take a playlist struct directly. Signed-off-by: Anna Schumaker --- core/audio.c | 2 +- core/playlist.c | 11 +-- core/playlists/artist.c | 5 +- core/playlists/library.c | 5 +- core/playlists/system.c | 82 ++++++-------------- core/playlists/user.c | 16 +--- gui/playlist.c | 4 +- gui/playlists/system.c | 6 +- include/core/playlist.h | 2 +- include/core/playlists/system.h | 1 - include/core/playlists/type.h | 6 +- tests/core/audio.c | 6 +- tests/core/playlist.c | 7 ++ tests/core/playlists/artist.c | 2 +- tests/core/playlists/library.c | 13 ++-- tests/core/playlists/system.c | 130 +++++++++++++++++++++++--------- tests/core/playlists/user.c | 4 +- tests/gui/model.c | 6 +- tests/gui/playlist.c | 2 +- tests/gui/playlists/system.c | 4 +- tests/gui/sidebar.c | 4 +- 21 files changed, 165 insertions(+), 153 deletions(-) diff --git a/core/audio.c b/core/audio.c index edcbe2f6..400d10bf 100644 --- a/core/audio.c +++ b/core/audio.c @@ -60,7 +60,7 @@ static struct track *__audio_load_basic(struct track *track, GstState state) static struct track *__audio_load(struct track *track, GstState state) { if (__audio_load_basic(track, state)) - playlist_add(PL_SYSTEM, "History", track); + playlist_add(playlist_get(PL_SYSTEM, "History"), track); return track; } diff --git a/core/playlist.c b/core/playlist.c index d6e175b3..1b152eb0 100644 --- a/core/playlist.c +++ b/core/playlist.c @@ -85,16 +85,17 @@ bool playlist_delete(struct playlist *playlist) return ret; } -bool playlist_add(enum playlist_type_t type, const gchar *name, - struct track *track) +bool playlist_add(struct playlist *playlist, struct track *track) { bool ret; - if (!track) + if (!track || !playlist || !playlist->pl_ops->pl_add) return false; - ret = playlist_types[type]->pl_add_track(name, track); - if (type == PL_SYSTEM && string_match(name, "Queued Tracks")) + ret = playlist->pl_ops->pl_add(playlist, track); + if (ret) + playlist_types[playlist->pl_type]->pl_save(); + if (playlist == playlist_get(PL_SYSTEM, "Queued Tracks")) playlist_select(PL_SYSTEM, "Queued Tracks"); return ret; } diff --git a/core/playlists/artist.c b/core/playlists/artist.c index 4d6f0834..fbe158b2 100644 --- a/core/playlists/artist.c +++ b/core/playlists/artist.c @@ -120,7 +120,7 @@ static gchar *pl_artist_get_name(unsigned int id) return artist ? g_strdup(artist->ar_name) : NULL; } -static bool pl_artist_add_rm(const gchar *name, struct track *track) +static bool pl_artist_rm(const gchar *name, struct track *track) { return false; } @@ -159,8 +159,7 @@ struct playlist_type pl_artist = { .pl_get_id = pl_artist_get_id, .pl_get_name = pl_artist_get_name, .pl_can_select = pl_artist_can_select, - .pl_add_track = pl_artist_add_rm, - .pl_remove_track = pl_artist_add_rm, + .pl_remove_track = pl_artist_rm, .pl_update = pl_artist_update, .pl_set_flag = pl_artist_set_flag, .pl_sort = pl_artist_sort, diff --git a/core/playlists/library.c b/core/playlists/library.c index 91423fae..9bb08569 100644 --- a/core/playlists/library.c +++ b/core/playlists/library.c @@ -252,7 +252,7 @@ static struct playlist *pl_library_new(const gchar *name) return library->li_playlist; } -static bool pl_library_add_rm(const gchar *name, struct track *track) +static bool pl_library_rm(const gchar *name, struct track *track) { return false; } @@ -295,8 +295,7 @@ struct playlist_type pl_library = { .pl_get_name = pl_library_get_name, .pl_can_select = pl_library_can_select, .pl_new = pl_library_new, - .pl_add_track = pl_library_add_rm, - .pl_remove_track = pl_library_add_rm, + .pl_remove_track = pl_library_rm, .pl_update = pl_library_update, .pl_set_flag = pl_library_set_flag, .pl_sort = pl_library_sort, diff --git a/core/playlists/system.c b/core/playlists/system.c index eea7b6b7..78505650 100644 --- a/core/playlists/system.c +++ b/core/playlists/system.c @@ -5,7 +5,7 @@ #include #include -static bool pl_system_add_track(const gchar *, struct track *); +static struct playlist *pl_system_get_playlist(const gchar *); static bool pl_system_remove_track(const gchar *, struct track *); static void pl_system_update(const gchar *); static inline struct queue *__sys_pl_queue(enum sys_playlist_t); @@ -65,13 +65,6 @@ static void sys_pl_load_full(struct playlist *playlist, struct file *file) queue_load_tracks(&playlist->pl_queue, file); } -static bool sys_pl_generic_add(struct playlist *playlist, struct track *track) -{ - if (queue_has(__sys_pl_queue(SYS_PL_HIDDEN), track)) - return false; - return playlist_generic_add_track(playlist, track); -} - static bool sys_pl_generic_add_front(struct playlist *playlist, struct track *track) { @@ -86,6 +79,7 @@ static bool sys_pl_generic_add_front(struct playlist *playlist, * Favorite tracks playlist operations. */ static struct playlist_ops favorites_ops = { + .pl_add = playlist_generic_add_track, .pl_delete = sys_pl_delete_clear, }; @@ -95,7 +89,6 @@ static struct sys_playlist sys_favorites = { .spl_save = sys_pl_save_full, .spl_load = sys_pl_load_full, .spl_can_select = playlist_generic_can_select, - .spl_add = playlist_generic_add_track, .spl_remove = playlist_generic_remove_track, .spl_set_flag = playlist_generic_set_flag, .spl_sort = playlist_generic_sort, @@ -119,10 +112,17 @@ static bool sys_pl_hidden_add(struct playlist *playlist, struct track *track) static bool sys_pl_hidden_remove(struct playlist *playlist, struct track *track) { bool ret = playlist_generic_remove_track(playlist, track); - pl_system_add_track("Collection", track); - pl_system_add_track("Unplayed", track); - pl_system_add_track("Most Played", track); - pl_system_add_track("Least Played", track); + struct playlist *add; + + if (track->tr_count == 0) + add = pl_system_get_playlist("Unplayed"); + else if (track->tr_count > track_db_average_plays()) + add = pl_system_get_playlist("Most Played"); + else + add = pl_system_get_playlist("Least Played"); + + playlist_generic_add_track(pl_system_get_playlist("Collection"), track); + playlist_generic_add_track(add, track); return ret; } @@ -140,6 +140,7 @@ static bool sys_pl_hidden_clear(struct playlist *playlist) } static struct playlist_ops hidden_ops = { + .pl_add = sys_pl_hidden_add, .pl_delete = sys_pl_hidden_clear, }; @@ -149,7 +150,6 @@ static struct sys_playlist sys_hidden = { .spl_save = sys_pl_save_full, .spl_load = sys_pl_load_full, .spl_can_select = playlist_generic_can_select, - .spl_add = sys_pl_hidden_add, .spl_remove = sys_pl_hidden_remove, .spl_set_flag = playlist_generic_set_flag, .spl_sort = playlist_generic_sort, @@ -190,6 +190,7 @@ static void sys_pl_queued_init(struct playlist *playlist, } static struct playlist_ops queued_ops = { + .pl_add = playlist_generic_add_track, .pl_delete = sys_pl_delete_clear, }; @@ -199,7 +200,6 @@ static struct sys_playlist sys_queued = { .spl_save = sys_pl_save_full, .spl_load = sys_pl_load_full, .spl_can_select = playlist_generic_can_select, - .spl_add = playlist_generic_add_track, .spl_remove = playlist_generic_remove_track, .spl_set_flag = playlist_generic_set_flag, .spl_sort = playlist_generic_sort, @@ -231,7 +231,7 @@ static bool sys_pl_collection_can_select(struct playlist *playlist) static bool sys_pl_collection_update(struct playlist *playlist, struct track *track) { - return sys_pl_generic_add(playlist, track) || true; + return sys_pl_generic_add_front(playlist, track) || true; } static struct playlist_ops collection_ops; @@ -243,7 +243,6 @@ static struct sys_playlist sys_collection = { .spl_save = sys_pl_save_partial, .spl_load = sys_pl_load_partial, .spl_can_select = sys_pl_collection_can_select, - .spl_add = sys_pl_generic_add, .spl_remove = playlist_generic_remove_track, .spl_update = sys_pl_collection_update, .spl_set_flag = playlist_generic_set_flag, @@ -268,7 +267,9 @@ static bool sys_pl_history_add(struct playlist *playlist, struct track *track) return true; } -static struct playlist_ops history_ops; +static struct playlist_ops history_ops = { + .pl_add = sys_pl_history_add, +}; static struct sys_playlist sys_history = { .spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "History", &history_ops), @@ -276,7 +277,6 @@ static struct sys_playlist sys_history = { .spl_save = sys_pl_save_partial, .spl_load = sys_pl_load_partial, .spl_can_select = playlist_noop_can_select, - .spl_add = sys_pl_history_add, .spl_remove = playlist_generic_remove_track, .spl_set_flag = playlist_noop_set_flag, .spl_sort = playlist_noop_sort, @@ -287,13 +287,6 @@ static struct sys_playlist sys_history = { /* * Unplayed tracks playlist operations. */ -static bool sys_pl_unplayed_add(struct playlist *playlist, struct track *track) -{ - if (track->tr_count > 0) - return false; - return sys_pl_generic_add(playlist, track); -} - static bool sys_pl_unplayed_update(struct playlist *playlist, struct track *track) { @@ -310,7 +303,6 @@ static struct sys_playlist sys_unplayed = { .spl_save = sys_pl_save_partial, .spl_load = sys_pl_load_partial, .spl_can_select = playlist_generic_can_select, - .spl_add = sys_pl_unplayed_add, .spl_remove = playlist_generic_remove_track, .spl_update = sys_pl_unplayed_update, .spl_set_flag = playlist_generic_set_flag, @@ -322,14 +314,6 @@ static struct sys_playlist sys_unplayed = { /* * Most played tracks playlist operations. */ -static bool sys_pl_most_played_add(struct playlist *playlist, struct track *track) -{ - unsigned int average = track_db_average_plays(); - if (track->tr_count <= average) - return false; - return sys_pl_generic_add(playlist, track); -} - static bool sys_pl_most_played_update(struct playlist *playlist, struct track *track) { @@ -348,7 +332,6 @@ static struct sys_playlist sys_most_played = { .spl_save = sys_pl_save_partial, .spl_load = sys_pl_load_partial, .spl_can_select = playlist_generic_can_select, - .spl_add = sys_pl_most_played_add, .spl_remove = playlist_generic_remove_track, .spl_update = sys_pl_most_played_update, .spl_set_flag = playlist_generic_set_flag, @@ -360,14 +343,6 @@ static struct sys_playlist sys_most_played = { /* * Least played tracks playlist operations. */ -static bool sys_pl_least_played_add(struct playlist *playlist, struct track *track) -{ - unsigned int average = track_db_average_plays(); - if (!track->tr_count || track->tr_count > average) - return false; - return sys_pl_generic_add(playlist, track); -} - static bool sys_pl_least_played_update(struct playlist *playlist, struct track *track) { @@ -386,7 +361,6 @@ static struct sys_playlist sys_least_played = { .spl_save = sys_pl_save_partial, .spl_load = sys_pl_load_partial, .spl_can_select = playlist_generic_can_select, - .spl_add = sys_pl_least_played_add, .spl_remove = playlist_generic_remove_track, .spl_update = sys_pl_least_played_update, .spl_set_flag = playlist_generic_set_flag, @@ -537,19 +511,6 @@ static bool pl_system_can_select(const gchar *name) return sys_pl ? sys_pl->spl_can_select(&sys_pl->spl_playlist) : false; } -static bool pl_system_add_track(const gchar *name, struct track *track) -{ - struct sys_playlist *sys_pl = __sys_pl_lookup(name); - bool ret = false; - - if (sys_pl) { - ret = sys_pl->spl_add(&sys_pl->spl_playlist, track); - if (ret) - __sys_pl_save(); - } - return ret; -} - static bool pl_system_remove_track(const gchar *name, struct track *track) { struct sys_playlist *sys_pl = __sys_pl_lookup(name); @@ -607,7 +568,6 @@ struct playlist_type pl_system = { .pl_get_id = pl_system_get_id, .pl_get_name = pl_system_get_name, .pl_can_select = pl_system_can_select, - .pl_add_track = pl_system_add_track, .pl_remove_track = pl_system_remove_track, .pl_update = pl_system_update, .pl_set_flag = pl_system_set_flag, @@ -639,8 +599,8 @@ void pl_system_deinit() void pl_system_new_track(struct track *track) { - pl_system_add_track("Collection", track); - pl_system_add_track("Unplayed", track); + playlist_generic_add_track(pl_system_get_playlist("Collection"), track); + playlist_generic_add_track(pl_system_get_playlist("Unplayed"), track); } void pl_system_delete_track(struct track *track) diff --git a/core/playlists/user.c b/core/playlists/user.c index 9beab734..77a214ff 100644 --- a/core/playlists/user.c +++ b/core/playlists/user.c @@ -82,6 +82,7 @@ static bool pl_user_delete(struct playlist *playlist) static struct playlist_ops user_ops = { + .pl_add = playlist_generic_add_track, .pl_delete = pl_user_delete, }; @@ -129,20 +130,6 @@ static struct playlist *pl_user_new(const gchar *name) return dbe ? &USER_PLAYLIST(dbe)->pl_playlist : NULL; } -static bool pl_user_add(const gchar *name, struct track *track) -{ - struct playlist *playlist = __user_pl_lookup(name); - bool ret = false; - - if (playlist) { - ret = playlist_generic_add_track(playlist, track); - if (ret) - pl_user_save(); - } - - return ret; -} - static bool pl_user_remove(const gchar *name, struct track *track) { struct playlist *playlist = __user_pl_lookup(name); @@ -192,7 +179,6 @@ struct playlist_type pl_user = { .pl_get_name = pl_user_get_name, .pl_can_select = pl_user_can_select, .pl_new = pl_user_new, - .pl_add_track = pl_user_add, .pl_remove_track = pl_user_remove, .pl_update = pl_user_update, .pl_set_flag = pl_user_set_flag, diff --git a/gui/playlist.c b/gui/playlist.c index 65d6e8c8..81bc5068 100644 --- a/gui/playlist.c +++ b/gui/playlist.c @@ -74,7 +74,7 @@ static bool __gui_playlist_erase(struct queue *queue, struct track *track) switch (type) { case PL_SYSTEM: if (string_match(name, "Collection")) { - playlist_add(type, "Hidden", track); + playlist_add(playlist_get(PL_SYSTEM, "Hidden"), track); break; } else if (!string_match(name, "Favorites") && !string_match(name, "Hidden") && @@ -113,7 +113,7 @@ static void __gui_playlist_add_selected_to(struct playlist *playlist) cur = g_list_first(list); while (cur) { track = (struct track *)cur->data; - playlist_add(playlist->pl_type, playlist->pl_name, track); + playlist_add(playlist, track); cur = g_list_next(cur); } g_list_free(list); diff --git a/gui/playlists/system.c b/gui/playlists/system.c index f21448d0..e06c08a4 100644 --- a/gui/playlists/system.c +++ b/gui/playlists/system.c @@ -35,16 +35,18 @@ static bool __gui_pl_system_find_descend_header(GtkTreeIter *iter, void __gui_pl_system_favorite_toggled(GtkToggleButton *toggle, gpointer data) { + struct playlist *favorites = playlist_get(PL_SYSTEM, "Favorites"); if (gtk_toggle_button_get_active(toggle)) - playlist_add(PL_SYSTEM, "Favorites", audio_cur_track()); + playlist_add(favorites, audio_cur_track()); else playlist_remove(PL_SYSTEM, "Favorites", audio_cur_track()); } void __gui_pl_system_hide_toggled(GtkToggleButton *toggle, gpointer data) { + struct playlist *hidden = playlist_get(PL_SYSTEM, "Hidden"); if (gtk_toggle_button_get_active(toggle)) { - if (playlist_add(PL_SYSTEM, "Hidden", audio_cur_track())) + if (playlist_add(hidden, audio_cur_track())) audio_next(); } else playlist_remove(PL_SYSTEM, "Hidden", audio_cur_track()); diff --git a/include/core/playlist.h b/include/core/playlist.h index 9d43188e..8966eccc 100644 --- a/include/core/playlist.h +++ b/include/core/playlist.h @@ -36,7 +36,7 @@ bool playlist_delete(struct playlist *); /* Called to add a track to a playlist. */ -bool playlist_add(enum playlist_type_t, const gchar *, struct track *); +bool playlist_add(struct playlist *, struct track *); /* Called to remove a track from a playlist. */ bool playlist_remove(enum playlist_type_t, const gchar *, struct track *); diff --git a/include/core/playlists/system.h b/include/core/playlists/system.h index 718d64d8..0b8a8e62 100644 --- a/include/core/playlists/system.h +++ b/include/core/playlists/system.h @@ -25,7 +25,6 @@ struct sys_playlist { void (*spl_save)(struct playlist *, struct file *); void (*spl_load)(struct playlist *, struct file *); bool (*spl_can_select)(struct playlist *); - bool (*spl_add)(struct playlist *, struct track *); bool (*spl_remove)(struct playlist *, struct track *); bool (*spl_update)(struct playlist *, struct track *); void (*spl_set_flag)(struct playlist *, enum queue_flags, bool); diff --git a/include/core/playlists/type.h b/include/core/playlists/type.h index 10a9b586..ce7e7327 100644 --- a/include/core/playlists/type.h +++ b/include/core/playlists/type.h @@ -21,6 +21,9 @@ enum playlist_type_t { struct playlist_ops { + /* Called to add a track to a playlist. */ + bool (*pl_add)(struct playlist *, struct track *); + /* Called to delete a playlist. */ bool (*pl_delete)(struct playlist *); }; @@ -62,9 +65,6 @@ struct playlist_type { /* Called to create a new playlist. */ struct playlist *(*pl_new)(const gchar *); - /* Called to add a track to the playlist. */ - bool (*pl_add_track)(const gchar *, struct track *); - /* Called to remove a track from the playlist. */ bool (*pl_remove_track)(const gchar *, struct track *); diff --git a/tests/core/audio.c b/tests/core/audio.c index 8d032758..4b7ad8b1 100644 --- a/tests/core/audio.c +++ b/tests/core/audio.c @@ -136,9 +136,9 @@ static void test_next() state_count = 0; /* First, let's test getting tracks from a temporary queue. */ - playlist_add(PL_SYSTEM, "Queued Tracks", track_get(2)); - playlist_add(PL_SYSTEM, "Queued Tracks", track_get(1)); - playlist_add(PL_SYSTEM, "Queued Tracks", track_get(0)); + playlist_add(playlist_get(PL_SYSTEM, "Queued Tracks"), track_get(2)); + playlist_add(playlist_get(PL_SYSTEM, "Queued Tracks"), track_get(1)); + playlist_add(playlist_get(PL_SYSTEM, "Queued Tracks"), track_get(0)); for (i = 2; i >= 0; i--) { g_assert_cmpuint(playlist_size(PL_SYSTEM, "Queued Tracks"), ==, i + 1); diff --git a/tests/core/playlist.c b/tests/core/playlist.c index 0eac3d2c..572bd81f 100644 --- a/tests/core/playlist.c +++ b/tests/core/playlist.c @@ -11,10 +11,14 @@ static void test_null() g_assert_null(playlist_new(PL_MAX_TYPE, "NULL")); g_assert_null(playlist_new(PL_MAX_TYPE, NULL)); g_assert_false(playlist_delete(NULL)); + + g_assert_false(playlist_add(NULL, NULL)); + g_assert_false(playlist_add(NULL, track_get(0))); } int main(int argc, char **argv) { + struct library *library; int ret; idle_init_sync(); @@ -23,6 +27,9 @@ int main(int argc, char **argv) playlist_init(NULL); while (idle_run_task()) {}; + library = library_find("tests/Music"); + track_add(library, "tests/Music/Hyrule Symphony/01 - Title Theme.ogg"); + g_test_init(&argc, &argv, NULL); g_test_add_func("/Core/Playlist/NULL", test_null); ret = g_test_run(); diff --git a/tests/core/playlists/artist.c b/tests/core/playlists/artist.c index 112429f5..ec1cc3bc 100644 --- a/tests/core/playlists/artist.c +++ b/tests/core/playlists/artist.c @@ -20,7 +20,7 @@ void test_artist() artist = artist_find("Koji Kondo"); g_assert_null(artist->ar_playlist); - g_assert_false(playlist_add(PL_ARTIST, "Koji Kondo", track_get(0))); + g_assert_false(playlist_add(NULL, track_get(0))); g_assert_false(playlist_select(PL_ARTIST, "Koji Kondo")); g_assert_false(playlist_select(PL_ARTIST, "Hajime Wakai")); diff --git a/tests/core/playlists/library.c b/tests/core/playlists/library.c index 9607f5ac..bc6e6922 100644 --- a/tests/core/playlists/library.c +++ b/tests/core/playlists/library.c @@ -28,8 +28,9 @@ void test_library() g_assert_false(playlist_select(PL_LIBRARY, "tests/Music")); library = library_get(0); + playlist = library->li_playlist; g_assert_nonnull(library); - g_assert_nonnull(library->li_playlist); + g_assert_nonnull(playlist); g_assert_cmpuint(playlist_size(PL_LIBRARY, "tests/Music"), ==, 0); while (idle_run_task()) {}; @@ -43,8 +44,8 @@ void test_library() g_assert_cmpuint(settings_get("core.playlist.cur.id"), ==, 0); g_assert(playlist_cur() == playlist_get(PL_LIBRARY, "tests/Music")); - g_assert_false(playlist_add(PL_LIBRARY, "tests/Music", track_get(0))); - g_assert_false(playlist_add(PL_LIBRARY, "tests/Music", track_get(1))); + g_assert_false(playlist_add(playlist, track_get(0))); + g_assert_false(playlist_add(playlist, track_get(1))); g_assert_false(playlist_remove(PL_LIBRARY, "tests/Music", track_get(0))); g_assert_false(playlist_remove(PL_LIBRARY, "tests/Music", track_get(1))); @@ -59,8 +60,9 @@ void test_library() g_assert_cmpuint(playlist_size(PL_LIBRARY, "tests/Music"), ==, 48); g_assert(playlist_get_queue(PL_LIBRARY, "tests/Music")); - g_assert_false(playlist_add(PL_LIBRARY, "tests/Music", track_get(0))); - g_assert_false(playlist_add(PL_LIBRARY, "tests/Music", track_get(1))); + playlist = library->li_playlist; + g_assert_false(playlist_add(playlist, track_get(0))); + g_assert_false(playlist_add(playlist, track_get(1))); g_assert_false(playlist_remove(PL_LIBRARY, "tests/Music", track_get(0))); g_assert_false(playlist_remove(PL_LIBRARY, "tests/Music", track_get(1))); g_assert_cmpuint(playlist_size(PL_LIBRARY, "tests/Music"), ==, 48); @@ -71,7 +73,6 @@ void test_library() playlist_set_random(PL_LIBRARY, "tests/Music", false); g_assert_false(playlist_get_random(PL_LIBRARY, "tests/Music")); - playlist = library->li_playlist; g_assert_cmpuint(g_slist_length(playlist->pl_queue.q_sort), ==, 3); playlist_sort(PL_LIBRARY, "tests/Music", COMPARE_ARTIST, true); g_assert_cmpuint(g_slist_length(playlist->pl_queue.q_sort), ==, 1); diff --git a/tests/core/playlists/system.c b/tests/core/playlists/system.c index a94b396b..f72db8e3 100644 --- a/tests/core/playlists/system.c +++ b/tests/core/playlists/system.c @@ -30,12 +30,12 @@ playlist_set_random(PL_SYSTEM, name, false); \ g_assert_false(playlist_get_random(PL_SYSTEM, name)) -#define __test_playlist_add(name) \ - __test_playlist_state(name, 0, false, false); \ - g_assert_true( playlist_add(PL_SYSTEM, name, track_get(0))); \ - g_assert_false(playlist_add(PL_SYSTEM, name, track_get(0))); \ - g_assert_true( playlist_add(PL_SYSTEM, name, track_get(1))); \ - g_assert_false(playlist_add(PL_SYSTEM, name, track_get(1))); \ +#define __test_playlist_add(name) \ + __test_playlist_state(name, 0, false, false); \ + g_assert_true( playlist_add(playlist_get(PL_SYSTEM, name), track_get(0))); \ + g_assert_false(playlist_add(playlist_get(PL_SYSTEM, name), track_get(0))); \ + g_assert_true( playlist_add(playlist_get(PL_SYSTEM, name), track_get(1))); \ + g_assert_false(playlist_add(playlist_get(PL_SYSTEM, name), track_get(1))); \ __test_playlist_state(name, 2, true, true) #define __test_playlist_remove(name) \ @@ -51,9 +51,9 @@ __test_playlist_state(name, ex_size, ex_track0, ex_track1) #define __test_playlist_hide_track(name, ex_size, ex_track0, ex_track1) \ - g_assert_true(playlist_add(PL_SYSTEM, "Hidden", track_get(0))); \ + g_assert_true(playlist_add(playlist_get(PL_SYSTEM, "Hidden"), track_get(0))); \ __test_playlist_state(name, ex_size, ex_track0, ex_track1); \ - g_assert_false(playlist_add(PL_SYSTEM, name, track_get(0))) + g_assert_false(playlist_add(playlist_get(PL_SYSTEM, name), track_get(0))) #define __test_playlist_unhide_track(name, ex_size, ex_track0, ex_track1) \ g_assert_true(playlist_remove(PL_SYSTEM, "Hidden", track_get(0))); \ @@ -90,6 +90,23 @@ do { \ __test_playlist_state(name, ex_size, ex_track0, ex_track1); \ } while (0) +static inline struct playlist *__test_pl_favorites(void) + { return playlist_get(PL_SYSTEM, "Favorites"); } +static inline struct playlist *__test_pl_hidden(void) + { return playlist_get(PL_SYSTEM, "Hidden"); } +static inline struct playlist *__test_pl_queued(void) + { return playlist_get(PL_SYSTEM, "Queued Tracks"); } +static inline struct playlist *__test_pl_collection(void) + { return playlist_get(PL_SYSTEM, "Collection"); } +static inline struct playlist *__test_pl_history(void) + { return playlist_get(PL_SYSTEM, "History"); } +static inline struct playlist *__test_pl_unplayed(void) + { return playlist_get(PL_SYSTEM, "Unplayed"); } +static inline struct playlist *__test_pl_most_played(void) + { return playlist_get(PL_SYSTEM, "Most Played"); } +static inline struct playlist *__test_pl_least_played(void) + { return playlist_get(PL_SYSTEM, "Least Played"); } + static void test_init() { @@ -127,7 +144,6 @@ static void test_invalid() __test_playlist_noselect("Invalid"); playlist_update(PL_SYSTEM, NULL); - g_assert_false(playlist_add(PL_SYSTEM, NULL, track_get(0))); g_assert_false(playlist_remove(PL_SYSTEM, NULL, track_get(0))); g_assert_false(playlist_has(PL_SYSTEM, NULL, track_get(0))); g_assert_cmpuint(playlist_size(PL_SYSTEM, NULL), ==, 0); @@ -215,7 +231,7 @@ static void test_collection() __test_playlist_id("Collection", SYS_PL_COLLECTION); __test_playlist_select("Collection", SYS_PL_COLLECTION); __test_playlist_random("Collection"); - __test_playlist_add("Collection"); + __test_playlist_update("Collection", 2, true, true); __test_playlist_hide_track("Collection", 1, false, true); __test_playlist_reinit("Collection", 1, false, true); __test_playlist_update("Collection", 1, false, true); @@ -242,17 +258,17 @@ static void test_history() g_assert_false(playlist_get_random(PL_SYSTEM, "History")); __test_playlist_state("History", 0, false, false); - g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(0))); - g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(0))); - g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(1))); - g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(1))); + g_assert_true(playlist_add(__test_pl_history(), track_get(0))); + g_assert_true(playlist_add(__test_pl_history(), track_get(0))); + g_assert_true(playlist_add(__test_pl_history(), track_get(1))); + g_assert_true(playlist_add(__test_pl_history(), track_get(1))); __test_playlist_state("History", 4, true, true); __test_playlist_noselect("History"); g_assert(playlist_prev() == track_get(1)); g_assert(playlist_prev() == track_get(0)); g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 4); - g_assert_true(playlist_add(PL_SYSTEM, "History", track_get(1))); + g_assert_true(playlist_add(__test_pl_history(), track_get(1))); g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 5); g_assert(playlist_prev() == track_get(1)); @@ -277,9 +293,7 @@ static void test_unplayed() __test_playlist_remove("Unplayed"); track_get(1)->tr_count = 1; - g_assert_true( playlist_add(PL_SYSTEM, "Unplayed", track_get(0))); - g_assert_false(playlist_add(PL_SYSTEM, "Unplayed", track_get(1))); - g_assert_cmpuint(playlist_size(PL_SYSTEM, "Unplayed"), ==, 1); + __test_playlist_update("Unplayed", 1, true, false); __test_playlist_select("Unplayed", SYS_PL_UNPLAYED); track_get(0)->tr_count = 1; @@ -323,10 +337,7 @@ static void test_most_played() g_assert_false(playlist_remove(PL_SYSTEM, "Most Played", track_get(1))); __test_playlist_state("Most Played", 0, false, false); - g_assert_false(playlist_add(PL_SYSTEM, "Most Played", track_get(0))); - g_assert_true( playlist_add(PL_SYSTEM, "Most Played", track_get(1))); - g_assert_false(playlist_add(PL_SYSTEM, "Most Played", track_get(1))); - __test_playlist_state("Most Played", 1, false, true); + __test_playlist_update("Most Played", 1, false, true); __test_playlist_select("Most Played", SYS_PL_MOST_PLAYED); track_get(0)->tr_count = 3; @@ -365,10 +376,7 @@ static void test_least_played() g_assert_false(playlist_remove(PL_SYSTEM, "Least Played", track_get(1))); __test_playlist_state("Least Played", 0, false, false); - g_assert_false(playlist_add(PL_SYSTEM, "Least Played", track_get(0))); - g_assert_true( playlist_add(PL_SYSTEM, "Least Played", track_get(1))); - g_assert_false(playlist_add(PL_SYSTEM, "Least Played", track_get(1))); - __test_playlist_state("Least Played", 1, false, true); + __test_playlist_update("Least Played", 1, false, true); __test_playlist_select("Least Played", SYS_PL_LEAST_PLAYED); track_get(0)->tr_count = 1; @@ -381,19 +389,68 @@ static void test_least_played() __test_playlist_unhide_track("Least Played", 1, true, false); __test_playlist_hide_track("Least Played", 0, false, false); __test_playlist_clear_hidden("Least Played", 1, true, false); + + track_get(0)->tr_count = 3; + track_get(1)->tr_count = 1; + __test_playlist_update("Least Played", 1, false, true); + __test_playlist_update("Most Played", 1, true, false); } -static void test_delete() +static void test_add() { struct library *library = library_find("tests/Music"); track_add(library, "tests/Music/Hyrule Symphony/03 - Hyrule Field.ogg"); pl_system_new_track(track_get(2)); - playlist_add(PL_SYSTEM, "Favorites", track_get(0)); - playlist_add(PL_SYSTEM, "Hidden ", track_get(1)); - playlist_add(PL_SYSTEM, "Hidden ", track_get(2)); - playlist_add(PL_SYSTEM, "Queued Tracks", track_get(0)); - playlist_add(PL_SYSTEM, "History", track_get(0)); + g_assert_true( playlist_add(__test_pl_favorites(), track_get(0))); + g_assert_false(playlist_add(__test_pl_favorites(), track_get(0))); + g_assert_true( playlist_add(__test_pl_queued(), track_get(0))); + g_assert_false(playlist_add(__test_pl_queued(), track_get(0))); + g_assert_true( playlist_add(__test_pl_history(), track_get(0))); + g_assert_true( playlist_add(__test_pl_history(), track_get(0))); + + g_assert_cmpuint(playlist_size(PL_SYSTEM, "Favorites"), ==, 1); + g_assert_cmpuint(playlist_size(PL_SYSTEM, "Queued Tracks"), ==, 1); + g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 2); + + g_assert_true(playlist_has(PL_SYSTEM, "Favorites", track_get(0))); + g_assert_true(playlist_has(PL_SYSTEM, "Queued Tracks", track_get(0))); + g_assert_true(playlist_has(PL_SYSTEM, "History", track_get(0))); + + g_assert_true( playlist_add(__test_pl_hidden(), track_get(0))); + g_assert_true( playlist_add(__test_pl_hidden(), track_get(1))); + g_assert_true( playlist_add(__test_pl_hidden(), track_get(2))); + g_assert_false(playlist_add(__test_pl_collection(), track_get(0))); + g_assert_false(playlist_add(__test_pl_collection(), track_get(1))); + g_assert_false(playlist_add(__test_pl_collection(), track_get(2))); + g_assert_false(playlist_add(__test_pl_most_played(), track_get(0))); + g_assert_false(playlist_add(__test_pl_least_played(), track_get(1))); + g_assert_false(playlist_add(__test_pl_unplayed(), track_get(2))); + + g_assert_cmpuint(playlist_size(PL_SYSTEM, "Hidden"), ==, 3); + g_assert_cmpuint(playlist_size(PL_SYSTEM, "Collection"), ==, 0); + g_assert_cmpuint(playlist_size(PL_SYSTEM, "Most Played"), ==, 0); + g_assert_cmpuint(playlist_size(PL_SYSTEM, "Least Played"), ==, 0); + g_assert_cmpuint(playlist_size(PL_SYSTEM, "Unplayed"), ==, 0); + + g_assert_true( playlist_has(PL_SYSTEM, "Hidden", track_get(0))); + g_assert_true( playlist_has(PL_SYSTEM, "Hidden", track_get(1))); + g_assert_true( playlist_has(PL_SYSTEM, "Hidden", track_get(2))); + g_assert_false(playlist_has(PL_SYSTEM, "Collection", track_get(0))); + g_assert_false(playlist_has(PL_SYSTEM, "Collection", track_get(1))); + g_assert_false(playlist_has(PL_SYSTEM, "Collection", track_get(2))); + g_assert_false(playlist_has(PL_SYSTEM, "Most Played", track_get(0))); + g_assert_false(playlist_has(PL_SYSTEM, "Least Played", track_get(1))); + g_assert_false(playlist_has(PL_SYSTEM, "Unplayed", track_get(2))); +} + +static void test_delete() +{ + playlist_add(__test_pl_favorites(), track_get(0)); + playlist_add(__test_pl_hidden(), track_get(1)); + playlist_add(__test_pl_hidden(), track_get(2)); + playlist_add(__test_pl_queued(), track_get(0)); + playlist_add(__test_pl_history(), track_get(0)); g_assert_false(playlist_delete(playlist_get(PL_SYSTEM, "Favorites"))); g_assert_false(playlist_delete(playlist_get(PL_SYSTEM, "Hidden"))); @@ -408,7 +465,7 @@ static void test_delete() g_assert_cmpuint(playlist_size(PL_SYSTEM, "Hidden"), ==, 0); g_assert_cmpuint(playlist_size(PL_SYSTEM, "Queued Tracks"), ==, 0); g_assert_cmpuint(playlist_size(PL_SYSTEM, "Collection"), ==, 3); - g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 1); + g_assert_cmpuint(playlist_size(PL_SYSTEM, "History"), ==, 3); g_assert_cmpuint(playlist_size(PL_SYSTEM, "Unplayed"), ==, 1); g_assert_cmpuint(playlist_size(PL_SYSTEM, "Most Played"), ==, 1); g_assert_cmpuint(playlist_size(PL_SYSTEM, "Least Played"), ==, 1); @@ -416,9 +473,9 @@ static void test_delete() static void test_delete_tracks() { - g_assert_true(playlist_add(PL_SYSTEM, "Favorites", track_get(0))); - g_assert_true(playlist_add(PL_SYSTEM, "Hidden", track_get(1))); - g_assert_true(playlist_add(PL_SYSTEM, "Queued Tracks", track_get(0))); + g_assert_true(playlist_add(__test_pl_favorites(), track_get(0))); + g_assert_true(playlist_add(__test_pl_hidden(), track_get(1))); + g_assert_true(playlist_add(__test_pl_queued(), track_get(0))); pl_system_delete_track(track_get(0)); pl_system_delete_track(track_get(1)); @@ -456,6 +513,7 @@ int main(int argc, char **argv) g_test_add_func("/Core/Playlists/System/Unplayed Tracks", test_unplayed); g_test_add_func("/Core/Playlists/System/Most Played Tracks", test_most_played); g_test_add_func("/Core/Playlists/System/Least Played Tracks", test_least_played); + g_test_add_func("/Core/Playlists/System/Add Tracks", test_add); g_test_add_func("/Core/Playlists/System/Delete", test_delete); g_test_add_func("/Core/PLaylists/System/Delete Tracks", test_delete_tracks); ret = g_test_run(); diff --git a/tests/core/playlists/user.c b/tests/core/playlists/user.c index a0cd41de..4fae53b6 100644 --- a/tests/core/playlists/user.c +++ b/tests/core/playlists/user.c @@ -40,8 +40,8 @@ void test_user() g_assert_cmpuint(playlist_size(PL_USER, "Test Playlist"), ==, 0); g_assert_false(playlist_has( PL_USER, "Test Playlist", track_get(0))); - g_assert_true( playlist_add( PL_USER, "Test Playlist", track_get(0))); - g_assert_false(playlist_add( PL_USER, "Test Playlist", track_get(0))); + g_assert_true( playlist_add(playlist, track_get(0))); + g_assert_false(playlist_add(playlist, track_get(0))); g_assert_true( playlist_has( PL_USER, "Test Playlist", track_get(0))); g_assert_cmpuint(playlist_size(PL_USER, "Test Playlist"), ==, 1); diff --git a/tests/gui/model.c b/tests/gui/model.c index 8f8ccaee..0b837b85 100644 --- a/tests/gui/model.c +++ b/tests/gui/model.c @@ -186,9 +186,9 @@ static void test_model() g_assert_cmpuint(count_insert, ==, 13); queue_resort(playlist_get_queue(PL_SYSTEM, "Collection")); g_assert_cmpuint(count_update, ==, 13); - playlist_add(PL_SYSTEM, "Favorites", track_get(0)); - playlist_add(PL_SYSTEM, "Favorites", track_get(1)); - playlist_add(PL_SYSTEM, "Favorites", track_get(2)); + playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(0)); + playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(1)); + playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(2)); g_assert_cmpuint(playlist_size(PL_SYSTEM, "Favorites"), ==, 3); g_assert_cmpstr(gtk_label_get_text(gui_model_runtime()), ==, "42 minutes, 45 seconds"); diff --git a/tests/gui/playlist.c b/tests/gui/playlist.c index d040ef7b..494bff84 100644 --- a/tests/gui/playlist.c +++ b/tests/gui/playlist.c @@ -22,7 +22,7 @@ static void test_playlist() gui_pl_library_add("tests/Music/Hyrule Symphony"); while (idle_run_task()) {} - playlist_add(PL_SYSTEM, "Favorites", track_get(0)); + playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(0)); gtk_tree_model_filter_refilter(gui_sidebar_filter()); g_assert_true(gui_sidebar_iter_first(&iter)); diff --git a/tests/gui/playlists/system.c b/tests/gui/playlists/system.c index 05801959..211fdb4f 100644 --- a/tests/gui/playlists/system.c +++ b/tests/gui/playlists/system.c @@ -71,7 +71,7 @@ static void test_buttons() g_assert_false(gtk_toggle_button_get_active(gui_favorite_button())); g_assert_false(gtk_toggle_button_get_active(gui_hide_button())); - playlist_add(PL_SYSTEM, "Favorites", track_get(0)); + playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(0)); audio_load(track_get(0)); g_assert_true( gtk_toggle_button_get_active(gui_favorite_button())); g_assert_false(gtk_toggle_button_get_active(gui_hide_button())); @@ -81,7 +81,7 @@ static void test_buttons() gtk_toggle_button_set_active(gui_favorite_button(), true); g_assert_true(playlist_has(PL_SYSTEM, "Favorites", track_get(0))); - playlist_add(PL_SYSTEM, "Hidden", track_get(1)); + playlist_add(playlist_get(PL_SYSTEM, "Hidden"), track_get(1)); audio_load(track_get(1)); g_assert_false(gtk_toggle_button_get_active(gui_favorite_button())); g_assert_true(gtk_toggle_button_get_active(gui_hide_button())); diff --git a/tests/gui/sidebar.c b/tests/gui/sidebar.c index c4c3e5a5..fd1397bd 100644 --- a/tests/gui/sidebar.c +++ b/tests/gui/sidebar.c @@ -116,8 +116,8 @@ static void test_sidebar_selection() g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 6); playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony"); while (idle_run_task()) {} - playlist_add(PL_SYSTEM, "History", track_get(0)); - playlist_add(PL_SYSTEM, "Favorites", track_get(0)); + playlist_add(playlist_get(PL_SYSTEM, "History"), track_get(0)); + playlist_add(playlist_get(PL_SYSTEM, "Favorites"), track_get(0)); gtk_tree_model_filter_refilter(gui_sidebar_filter()); g_assert_cmpuint(gtk_tree_model_iter_n_children(filter, NULL), ==, 8);