Notify when library paths have been updated

This gives the UI a chance to set the new path or new size.  I also
updated Ocarina to show the library path size in its liststore row.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-03-18 10:44:12 -04:00
parent 8f666fe10c
commit b0c76f4b11
5 changed files with 34 additions and 3 deletions

View File

@ -25,6 +25,7 @@ namespace libsaria
~Driver();
virtual void path_added(Path *) = 0;
virtual void path_updated(Path *) = 0;
};
void add_path(string);

View File

@ -13,7 +13,7 @@ using namespace std;
#include <libsaria/stack.h>*/
static list<struct libsaria::library::Path> path_list;
static list<libsaria::library::Driver *> driver_list;
list<libsaria::library::Driver *> driver_list;
/*list<libsaria::LibraryPath> path_list;
libsaria::Playlist lib_playlist(PL_RANDOM | PL_SEQUENTIAL | PL_FILTER);
static map<sid_t, libsaria::Track *> lookup_map;

View File

@ -3,6 +3,7 @@
#include <libsaria/library.h>
extern list<libsaria::library::Driver *>driver_list;
void update_path(struct libsaria::library::Path *);
/*#include <string>
using namespace std;

View File

@ -3,6 +3,7 @@
#include <libsaria/track.h>
#include <libsaria/print.h>
#include <libsaria/idle.h>
#include "library.h"
static unsigned int MAX_SCAN = 20;
@ -52,9 +53,13 @@ ScanTask::~ScanTask()
void ScanTask::run_task()
{
list<string>::iterator it;
for (it = file_list.begin(); it != file_list.end(); it++) {
list<libsaria::library::Driver *>::iterator d_it;
for (it = file_list.begin(); it != file_list.end(); it++)
path->tracks.push_back(libsaria::Track(*it));
}
for (d_it = driver_list.begin(); d_it != driver_list.end(); d_it++)
(*d_it)->path_updated(path);
}
ReaddirTask::ReaddirTask(struct libsaria::library::Path *p)

View File

@ -21,6 +21,7 @@ struct library_info {
class LibraryDriver : public libsaria::library::Driver {
public:
void path_added(libsaria::library::Path *);
void path_updated(libsaria::library::Path *);
};
static LibraryDriver driver;
@ -29,10 +30,32 @@ static GtkListStore *path_list;
static struct library_info columns[] = {
library_info("Pointer", G_TYPE_POINTER, false),
library_info("Filepath", G_TYPE_STRING, true),
library_info("Size", G_TYPE_UINT, true),
};
static unsigned int NUM_COLUMNS = sizeof(columns) / sizeof(library_info);
void LibraryDriver::path_updated(libsaria::library::Path *path)
{
GtkTreeIter iter;
libsaria::library::Path *list_path;
/* get_iter_first() return FALSE if the liststore is empty */
if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(path_list), &iter))
return;
do {
gtk_tree_model_get(GTK_TREE_MODEL(path_list), &iter, 0, &list_path, -1);
if (list_path == path) {
gtk_list_store_set(path_list, &iter,
1, path->path.c_str(),
2, path->tracks.size(),
-1);
break;
};
} while (gtk_tree_model_iter_next(GTK_TREE_MODEL(path_list), &iter));
}
void LibraryDriver::path_added(libsaria::library::Path *path)
{
GtkTreeIter iter;
@ -41,6 +64,7 @@ void LibraryDriver::path_added(libsaria::library::Path *path)
gtk_list_store_set(path_list, &iter,
0, path,
1, path->path.c_str(),
2, path->tracks.size(),
-1);
}