From 136f12bc7c77e39477393046fe02875c516bbc71 Mon Sep 17 00:00:00 2001 From: Bryan Schumaker Date: Sat, 29 Oct 2011 15:14:01 -0400 Subject: [PATCH] libsaria: Created a SourceModel class The source model class is used to more tightly control how songs are inserted into the UI. I provide an insert() function that the library's for_each() function can take advantage of. This allows me to directly insert songs into the UI rather than having to use a static function as the "middle man" --- include/libsaria/library.h | 3 ++- include/libsaria/model.h | 19 +++++++++++++++++++ libsaria/library/library.cpp | 9 +++++---- libsaria/library/library.h | 3 ++- libsaria/model.cpp | 9 +++++++++ 5 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 include/libsaria/model.h create mode 100644 libsaria/model.cpp diff --git a/include/libsaria/library.h b/include/libsaria/library.h index ddabac52..05ab83f0 100644 --- a/include/libsaria/library.h +++ b/include/libsaria/library.h @@ -2,6 +2,7 @@ #define LIBSARIA_LIBRARY_H #include +#include #include #include @@ -26,7 +27,7 @@ namespace libsaria void remove_path(string); void play_id(ino_t &); void get_info(ino_t &, void(*)(Track &)); - void for_each(void (*)(Track &)); + void for_each(SourceModel *); void for_each_path(void (*)(struct PathInfo &)); unsigned int size(); diff --git a/include/libsaria/model.h b/include/libsaria/model.h new file mode 100644 index 00000000..a26fa841 --- /dev/null +++ b/include/libsaria/model.h @@ -0,0 +1,19 @@ +#ifndef LIBSARIA_SOURCE_H +#define LIBSARIA_SOURCE_H + +#include + +namespace libsaria +{ + + class SourceModel + { + public: + SourceModel(); + virtual ~SourceModel() = 0; + + virtual void insert(Track &) = 0; + }; +} + +#endif /* LIBSARIA_SOURCE_H */ diff --git a/libsaria/library/library.cpp b/libsaria/library/library.cpp index 70e82bfe..017c03cf 100644 --- a/libsaria/library/library.cpp +++ b/libsaria/library/library.cpp @@ -4,6 +4,7 @@ using namespace std; #include +#include #include #include #include "library.h" @@ -24,13 +25,13 @@ LibraryPath *get_library_path(string dir) return NULL; } -void LibraryPath::for_each(void (*ins_func)(Track &)) +void LibraryPath::for_each(libsaria::SourceModel *model) { map::iterator it; for (it = file_map.begin(); it != file_map.end(); it++) { Track track = Track(it->first, &it->second); - ins_func(track); + model->insert(track); } } @@ -67,11 +68,11 @@ bool LibraryPath::play_id(ino_t &id) namespace libsaria { - void library::for_each(void (*ins_func)(Track &)) + void library::for_each(SourceModel *model) { map::iterator it; for (it = path_map.begin(); it != path_map.end(); it++) - it->second.for_each(ins_func); + it->second.for_each(model); } void library::for_each_path(void (*info_func)(struct library::PathInfo &)) diff --git a/libsaria/library/library.h b/libsaria/library/library.h index fcdcd360..c91220fd 100644 --- a/libsaria/library/library.h +++ b/libsaria/library/library.h @@ -6,6 +6,7 @@ using namespace std; #include +#include #include class LibraryPath @@ -19,7 +20,7 @@ class LibraryPath LibraryPath(InFile &, string); ~LibraryPath(); - void for_each(void (*)(Track &)); + void for_each(libsaria::SourceModel *); void get_info(void (*)(struct libsaria::library::PathInfo &)); bool get_info_id(ino_t &, void (*)(Track &)); void insert_track(ino_t &, TrackTag &); diff --git a/libsaria/model.cpp b/libsaria/model.cpp new file mode 100644 index 00000000..1a13de9f --- /dev/null +++ b/libsaria/model.cpp @@ -0,0 +1,9 @@ + +#include + +namespace libsaria +{ + SourceModel::SourceModel(){} + SourceModel::~SourceModel(){} +}; +