gui/playlists/library: Add new library paths to the sidebar

... without passing through gui/playlist.c first.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-08-31 09:41:42 -04:00
parent e550638823
commit ab47a7ac88
4 changed files with 47 additions and 35 deletions

View File

@ -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;

View File

@ -4,7 +4,8 @@
#include <core/idle.h>
#include <core/playlist.h>
#include <gui/idle.h>
#include <gui/playlist.h>
#include <gui/playlists/library.h>
#include <gui/sidebar.h>
#include <gui/window.h>
#include <glib/gi18n.h>
@ -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;
}

View File

@ -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 *);

View File

@ -9,6 +9,7 @@
#include <gui/playlist.h>
#include <gui/sidebar.h>
#include <gui/treeview.h>
#include <tests/test.h>
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)