From ab47a7ac88c78f17ba5b93e21bca2a566a9dc2cc Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Wed, 31 Aug 2016 09:41:42 -0400 Subject: [PATCH] gui/playlists/library: Add new library paths to the sidebar ... without passing through gui/playlist.c first. Signed-off-by: Anna Schumaker --- gui/playlist.c | 9 --------- gui/playlists/library.c | 37 +++++++++++++++++++++++------------ include/gui/playlist.h | 3 --- tests/gui/playlists/library.c | 33 ++++++++++++++++++++----------- 4 files changed, 47 insertions(+), 35 deletions(-) diff --git a/gui/playlist.c b/gui/playlist.c index 9ce34c64..7644d49a 100644 --- a/gui/playlist.c +++ b/gui/playlist.c @@ -193,15 +193,6 @@ const gchar *gui_playlist_cur() return NULL; } -void gui_playlist_add_library(struct playlist *playlist) -{ - GtkTreeIter parent; - - gui_sidebar_iter_first(&parent); - gui_sidebar_iter_find(&parent, "Library", PL_MAX_TYPE); - gui_sidebar_iter_sort_child(&parent, playlist, "folder"); -} - void gui_playlist_add_artist(struct playlist *playlist) { GtkTreeIter parent; diff --git a/gui/playlists/library.c b/gui/playlists/library.c index 7a2d2e96..e2d9592f 100644 --- a/gui/playlists/library.c +++ b/gui/playlists/library.c @@ -4,7 +4,8 @@ #include #include #include -#include +#include +#include #include #include @@ -42,14 +43,25 @@ void __gui_pl_library_choose(GtkButton *button, gpointer data) gtk_widget_destroy(dialog); } +static bool __gui_pl_library_header(GtkTreeIter *iter) +{ + if (gui_sidebar_iter_first(iter)) + return gui_sidebar_iter_find(iter, "Library", PL_MAX_TYPE); + return false; +} + static bool __gui_pl_library_init_idle() { struct db_entry *library, *next; struct playlist *playlist; + GtkTreeIter iter; + + if (!__gui_pl_library_header(&iter)) + return false; db_for_each(library, next, library_db_get()) { - playlist = playlist_get(PL_LIBRARY, LIBRARY(library)->li_path); - gui_playlist_add_library(playlist); + playlist = LIBRARY(library)->li_playlist; + gui_sidebar_iter_sort_child(&iter, playlist, "folder"); } #ifndef CONFIG_TESTING @@ -68,14 +80,15 @@ void gui_pl_library_init() bool gui_pl_library_add(const gchar *filename) { struct playlist *playlist; - struct library *library; + GtkTreeIter iter; - if (playlist_new(PL_LIBRARY, filename)) { - library = library_lookup(filename); - playlist = playlist_get(PL_LIBRARY, library->li_path); - gui_playlist_add_library(playlist); - gui_idle_enable(); - return true; - } - return false; + if (!__gui_pl_library_header(&iter)) + return false; + if (!playlist_new(PL_LIBRARY, filename)) + return false; + + playlist = playlist_get(PL_LIBRARY, filename); + gui_sidebar_iter_sort_child(&iter, playlist, "folder"); + gui_idle_enable(); + return true; } diff --git a/include/gui/playlist.h b/include/gui/playlist.h index 31bb9ba8..6023e0e8 100644 --- a/include/gui/playlist.h +++ b/include/gui/playlist.h @@ -12,9 +12,6 @@ void gui_playlist_init(); /* Called to get the currently selected playlist. */ const gchar *gui_playlist_cur(); -/* Called to add a library playlist. */ -void gui_playlist_add_library(struct playlist *); - /* Called to add an artist playlist. */ void gui_playlist_add_artist(struct playlist *); diff --git a/tests/gui/playlists/library.c b/tests/gui/playlists/library.c index cfc718c7..1b942027 100644 --- a/tests/gui/playlists/library.c +++ b/tests/gui/playlists/library.c @@ -9,6 +9,7 @@ #include #include #include +#include struct core_init_data init_data = { .playlist_ops = &playlist_ops, @@ -17,30 +18,40 @@ struct core_init_data init_data = { static void test_library() { GtkTreeModel *model = gui_sidebar_model(); - struct playlist *playlist; - GtkTreeIter iter; + struct playlist *hyrule, *ocarina; + GtkTreeIter iter, child; gui_sidebar_iter_first(&iter); gui_sidebar_iter_find(&iter, "Library", PL_MAX_TYPE); g_assert_false(gtk_tree_model_iter_has_child(model, &iter)); g_assert_cmpuint(library_db_get()->db_size, ==, 0); + g_assert_null(playlist_get(PL_LIBRARY, "tests/Music/Ocarina of Time")); g_assert_null(playlist_get(PL_LIBRARY, "tests/Music/Hyrule Symphony")); + g_assert_true(gui_pl_library_add("tests/Music/Ocarina of Time")); g_assert_true(gui_pl_library_add("tests/Music/Hyrule Symphony")); - playlist = playlist_get(PL_LIBRARY, "tests/Music/Hyrule Symphony"); - g_assert_cmpuint(library_db_get()->db_size, ==, 1); - g_assert_cmpuint(playlist_size(playlist->pl_type, - playlist->pl_name), ==, 0); + g_assert_cmpuint(library_db_get()->db_size, ==, 2); g_assert_true(gtk_tree_model_iter_has_child(model, &iter)); - g_assert_cmpuint(gtk_tree_model_iter_n_children(model, &iter), ==, 1); + g_assert_cmpuint(gtk_tree_model_iter_n_children(model, &iter), ==, 2); + ocarina = playlist_get(PL_LIBRARY, "tests/Music/Ocarina of Time"); + hyrule = playlist_get(PL_LIBRARY, "tests/Music/Hyrule Symphony"); + + g_assert_cmpuint(playlist_size(ocarina->pl_type, ocarina->pl_name), ==, 0); + g_assert_cmpuint(playlist_size(hyrule->pl_type, hyrule->pl_name), ==, 0); while (idle_run_task()) {} - g_assert_cmpuint(library_db_get()->db_size, ==, 1); - g_assert_cmpuint(playlist_size(playlist->pl_type, - playlist->pl_name), ==, 13); + g_assert_cmpuint(playlist_size(hyrule->pl_type, hyrule->pl_name), ==, 13); + g_assert_cmpuint(playlist_size(ocarina->pl_type, ocarina->pl_name), ==, 35); + g_assert_true(gtk_tree_model_iter_has_child(model, &iter)); - g_assert_cmpuint(gtk_tree_model_iter_n_children(model, &iter), ==, 1); + g_assert_cmpuint(gtk_tree_model_iter_n_children(model, &iter), ==, 2); + g_assert_true(gui_sidebar_iter_down(&iter, &child)); + g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, hyrule->pl_name); + g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_LIBRARY); + g_assert_true(gui_sidebar_iter_next(&child)); + g_assert_cmpstr_free(gui_sidebar_iter_name(&child), ==, ocarina->pl_name); + g_assert_cmpuint(gui_sidebar_iter_type(&child), ==, PL_LIBRARY); } int main(int argc, char **argv)