diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | src/PlaylistPrint.cxx | 2 | ||||
-rw-r--r-- | src/PlaylistUpdate.cxx | 2 | ||||
-rw-r--r-- | src/Stats.cxx | 3 | ||||
-rw-r--r-- | src/command/StickerCommands.cxx | 2 | ||||
-rw-r--r-- | src/db/DatabasePlaylist.cxx | 2 | ||||
-rw-r--r-- | src/db/DatabasePlugin.hxx | 115 | ||||
-rw-r--r-- | src/db/DatabasePrint.cxx | 2 | ||||
-rw-r--r-- | src/db/DatabaseQueue.cxx | 2 | ||||
-rw-r--r-- | src/db/DatabaseSong.cxx | 2 | ||||
-rw-r--r-- | src/db/Helpers.cxx | 3 | ||||
-rw-r--r-- | src/db/Interface.hxx | 111 | ||||
-rw-r--r-- | src/db/Registry.cxx | 1 | ||||
-rw-r--r-- | src/db/Stats.hxx | 51 | ||||
-rw-r--r-- | src/db/plugins/LazyDatabase.cxx | 1 | ||||
-rw-r--r-- | src/db/plugins/LazyDatabase.hxx | 3 | ||||
-rw-r--r-- | src/db/plugins/ProxyDatabasePlugin.cxx | 2 | ||||
-rw-r--r-- | src/db/plugins/SimpleDatabasePlugin.cxx | 1 | ||||
-rw-r--r-- | src/db/plugins/SimpleDatabasePlugin.hxx | 6 | ||||
-rw-r--r-- | src/db/plugins/UpnpDatabasePlugin.cxx | 2 | ||||
-rw-r--r-- | src/sticker/SongSticker.cxx | 2 | ||||
-rw-r--r-- | test/DumpDatabase.cxx | 1 |
22 files changed, 192 insertions, 126 deletions
diff --git a/Makefile.am b/Makefile.am index 8e70ff290..5d7171707 100644 --- a/Makefile.am +++ b/Makefile.am @@ -202,6 +202,8 @@ src_mpd_SOURCES += \ src/db/DatabaseError.cxx src/db/DatabaseError.hxx \ src/db/DatabaseLock.cxx src/db/DatabaseLock.hxx \ src/db/DatabasePlugin.hxx \ + src/db/Interface.hxx \ + src/db/Stats.hxx \ src/db/DatabaseListener.hxx \ src/db/Visitor.hxx \ src/db/Selection.cxx src/db/Selection.hxx diff --git a/src/PlaylistPrint.cxx b/src/PlaylistPrint.cxx index 2e29ac6a2..9e0dcade0 100644 --- a/src/PlaylistPrint.cxx +++ b/src/PlaylistPrint.cxx @@ -25,7 +25,7 @@ #include "SongPrint.hxx" #include "Partition.hxx" #include "Instance.hxx" -#include "db/DatabasePlugin.hxx" +#include "db/Interface.hxx" #include "client/Client.hxx" #include "input/InputStream.hxx" #include "DetachedSong.hxx" diff --git a/src/PlaylistUpdate.cxx b/src/PlaylistUpdate.cxx index 89132ca7b..8876711ef 100644 --- a/src/PlaylistUpdate.cxx +++ b/src/PlaylistUpdate.cxx @@ -19,7 +19,7 @@ #include "config.h" #include "Playlist.hxx" -#include "db/DatabasePlugin.hxx" +#include "db/Interface.hxx" #include "db/LightSong.hxx" #include "DetachedSong.hxx" #include "tag/Tag.hxx" diff --git a/src/Stats.cxx b/src/Stats.cxx index c5fcc69e2..8fc626ecb 100644 --- a/src/Stats.cxx +++ b/src/Stats.cxx @@ -24,7 +24,8 @@ #include "Partition.hxx" #include "Instance.hxx" #include "db/Selection.hxx" -#include "db/DatabasePlugin.hxx" +#include "db/Interface.hxx" +#include "db/Stats.hxx" #include "util/Error.hxx" #include "system/Clock.hxx" #include "Log.hxx" diff --git a/src/command/StickerCommands.cxx b/src/command/StickerCommands.cxx index 1825f9157..caae870e9 100644 --- a/src/command/StickerCommands.cxx +++ b/src/command/StickerCommands.cxx @@ -20,7 +20,7 @@ #include "config.h" #include "StickerCommands.hxx" #include "SongPrint.hxx" -#include "db/DatabasePlugin.hxx" +#include "db/Interface.hxx" #include "db/DatabaseGlue.hxx" #include "sticker/SongSticker.hxx" #include "sticker/StickerPrint.hxx" diff --git a/src/db/DatabasePlaylist.cxx b/src/db/DatabasePlaylist.cxx index 90a7f7b1a..f1cfdc874 100644 --- a/src/db/DatabasePlaylist.cxx +++ b/src/db/DatabasePlaylist.cxx @@ -22,7 +22,7 @@ #include "DatabaseSong.hxx" #include "Selection.hxx" #include "PlaylistFile.hxx" -#include "DatabasePlugin.hxx" +#include "Interface.hxx" #include "DetachedSong.hxx" #include "storage/StorageInterface.hxx" diff --git a/src/db/DatabasePlugin.hxx b/src/db/DatabasePlugin.hxx index b0cb41502..ba6cd1f08 100644 --- a/src/db/DatabasePlugin.hxx +++ b/src/db/DatabasePlugin.hxx @@ -26,124 +26,11 @@ #ifndef MPD_DATABASE_PLUGIN_HXX #define MPD_DATABASE_PLUGIN_HXX -#include "Visitor.hxx" -#include "tag/TagType.h" -#include "Compiler.h" - -#include <time.h> - struct config_param; -struct DatabaseSelection; -struct db_visitor; -struct LightSong; class Error; class EventLoop; class DatabaseListener; - -struct DatabaseStats { - /** - * Number of songs. - */ - unsigned song_count; - - /** - * Total duration of all songs (in seconds). - */ - unsigned long total_duration; - - /** - * Number of distinct artist names. - */ - unsigned artist_count; - - /** - * Number of distinct album names. - */ - unsigned album_count; - - void Clear() { - song_count = 0; - total_duration = 0; - artist_count = album_count = 0; - } -}; - -class Database { -public: - /** - * Free instance data. - */ - virtual ~Database() {} - - /** - * Open the database. Read it into memory if applicable. - */ - virtual bool Open(gcc_unused Error &error) { - return true; - } - - /** - * Close the database, free allocated memory. - */ - virtual void Close() {} - - /** - * Look up a song (including tag data) in the database. When - * you don't need this anymore, call ReturnSong(). - * - * @param uri_utf8 the URI of the song within the music - * directory (UTF-8) - */ - virtual const LightSong *GetSong(const char *uri_utf8, - Error &error) const = 0; - - /** - * Mark the song object as "unused". Call this on objects - * returned by GetSong(). - */ - virtual void ReturnSong(const LightSong *song) const = 0; - - /** - * Visit the selected entities. - */ - virtual bool Visit(const DatabaseSelection &selection, - VisitDirectory visit_directory, - VisitSong visit_song, - VisitPlaylist visit_playlist, - Error &error) const = 0; - - bool Visit(const DatabaseSelection &selection, - VisitDirectory visit_directory, - VisitSong visit_song, - Error &error) const { - return Visit(selection, visit_directory, visit_song, - VisitPlaylist(), error); - } - - bool Visit(const DatabaseSelection &selection, VisitSong visit_song, - Error &error) const { - return Visit(selection, VisitDirectory(), visit_song, error); - } - - /** - * Visit all unique tag values. - */ - virtual bool VisitUniqueTags(const DatabaseSelection &selection, - TagType tag_type, - VisitString visit_string, - Error &error) const = 0; - - virtual bool GetStats(const DatabaseSelection &selection, - DatabaseStats &stats, - Error &error) const = 0; - - /** - * Returns the time stamp of the last database update. - * Returns 0 if that is not not known/available. - */ - gcc_pure - virtual time_t GetUpdateStamp() const = 0; -}; +class Database; struct DatabasePlugin { const char *name; diff --git a/src/db/DatabasePrint.cxx b/src/db/DatabasePrint.cxx index 669a804be..ccdfbe026 100644 --- a/src/db/DatabasePrint.cxx +++ b/src/db/DatabasePrint.cxx @@ -28,7 +28,7 @@ #include "LightSong.hxx" #include "LightDirectory.hxx" #include "PlaylistInfo.hxx" -#include "DatabasePlugin.hxx" +#include "Interface.hxx" #include <functional> diff --git a/src/db/DatabaseQueue.cxx b/src/db/DatabaseQueue.cxx index 77fd57fe3..be012647a 100644 --- a/src/db/DatabaseQueue.cxx +++ b/src/db/DatabaseQueue.cxx @@ -20,7 +20,7 @@ #include "config.h" #include "DatabaseQueue.hxx" #include "DatabaseSong.hxx" -#include "DatabasePlugin.hxx" +#include "Interface.hxx" #include "Partition.hxx" #include "Instance.hxx" #include "util/Error.hxx" diff --git a/src/db/DatabaseSong.cxx b/src/db/DatabaseSong.cxx index d9adad7a0..699213835 100644 --- a/src/db/DatabaseSong.cxx +++ b/src/db/DatabaseSong.cxx @@ -20,7 +20,7 @@ #include "config.h" #include "DatabaseSong.hxx" #include "LightSong.hxx" -#include "DatabasePlugin.hxx" +#include "Interface.hxx" #include "DetachedSong.hxx" #include "storage/StorageInterface.hxx" diff --git a/src/db/Helpers.cxx b/src/db/Helpers.cxx index 579b83e15..5eb50b4e5 100644 --- a/src/db/Helpers.cxx +++ b/src/db/Helpers.cxx @@ -18,7 +18,8 @@ */ #include "Helpers.hxx" -#include "DatabasePlugin.hxx" +#include "Stats.hxx" +#include "Interface.hxx" #include "LightSong.hxx" #include "tag/Tag.hxx" diff --git a/src/db/Interface.hxx b/src/db/Interface.hxx new file mode 100644 index 000000000..4ce927336 --- /dev/null +++ b/src/db/Interface.hxx @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2003-2014 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_DATABASE_INTERFACE_HXX +#define MPD_DATABASE_INTERFACE_HXX + +#include "Visitor.hxx" +#include "tag/TagType.h" +#include "Compiler.h" + +#include <time.h> + +struct DatabaseStats; +struct DatabaseSelection; +struct LightSong; +class Error; + +class Database { +public: + /** + * Free instance data. + */ + virtual ~Database() {} + + /** + * Open the database. Read it into memory if applicable. + */ + virtual bool Open(gcc_unused Error &error) { + return true; + } + + /** + * Close the database, free allocated memory. + */ + virtual void Close() {} + + /** + * Look up a song (including tag data) in the database. When + * you don't need this anymore, call ReturnSong(). + * + * @param uri_utf8 the URI of the song within the music + * directory (UTF-8) + */ + virtual const LightSong *GetSong(const char *uri_utf8, + Error &error) const = 0; + + /** + * Mark the song object as "unused". Call this on objects + * returned by GetSong(). + */ + virtual void ReturnSong(const LightSong *song) const = 0; + + /** + * Visit the selected entities. + */ + virtual bool Visit(const DatabaseSelection &selection, + VisitDirectory visit_directory, + VisitSong visit_song, + VisitPlaylist visit_playlist, + Error &error) const = 0; + + bool Visit(const DatabaseSelection &selection, + VisitDirectory visit_directory, + VisitSong visit_song, + Error &error) const { + return Visit(selection, visit_directory, visit_song, + VisitPlaylist(), error); + } + + bool Visit(const DatabaseSelection &selection, VisitSong visit_song, + Error &error) const { + return Visit(selection, VisitDirectory(), visit_song, error); + } + + /** + * Visit all unique tag values. + */ + virtual bool VisitUniqueTags(const DatabaseSelection &selection, + TagType tag_type, + VisitString visit_string, + Error &error) const = 0; + + virtual bool GetStats(const DatabaseSelection &selection, + DatabaseStats &stats, + Error &error) const = 0; + + /** + * Returns the time stamp of the last database update. + * Returns 0 if that is not not known/available. + */ + gcc_pure + virtual time_t GetUpdateStamp() const = 0; +}; + +#endif diff --git a/src/db/Registry.cxx b/src/db/Registry.cxx index 295d3cf2a..40b6d041a 100644 --- a/src/db/Registry.cxx +++ b/src/db/Registry.cxx @@ -19,6 +19,7 @@ #include "config.h" #include "Registry.hxx" +#include "DatabasePlugin.hxx" #include "plugins/SimpleDatabasePlugin.hxx" #include "plugins/ProxyDatabasePlugin.hxx" #include "plugins/UpnpDatabasePlugin.hxx" diff --git a/src/db/Stats.hxx b/src/db/Stats.hxx new file mode 100644 index 000000000..107af9d5f --- /dev/null +++ b/src/db/Stats.hxx @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2003-2014 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_DATABASE_STATS_HXX +#define MPD_DATABASE_STATS_HXX + +struct DatabaseStats { + /** + * Number of songs. + */ + unsigned song_count; + + /** + * Total duration of all songs (in seconds). + */ + unsigned long total_duration; + + /** + * Number of distinct artist names. + */ + unsigned artist_count; + + /** + * Number of distinct album names. + */ + unsigned album_count; + + void Clear() { + song_count = 0; + total_duration = 0; + artist_count = album_count = 0; + } +}; + +#endif diff --git a/src/db/plugins/LazyDatabase.cxx b/src/db/plugins/LazyDatabase.cxx index 6a01ffb82..ffa861e36 100644 --- a/src/db/plugins/LazyDatabase.cxx +++ b/src/db/plugins/LazyDatabase.cxx @@ -19,6 +19,7 @@ #include "config.h" #include "LazyDatabase.hxx" +#include "db/Interface.hxx" #include <assert.h> diff --git a/src/db/plugins/LazyDatabase.hxx b/src/db/plugins/LazyDatabase.hxx index 336b8558f..f3fbef5f3 100644 --- a/src/db/plugins/LazyDatabase.hxx +++ b/src/db/plugins/LazyDatabase.hxx @@ -20,7 +20,8 @@ #ifndef MPD_LAZY_DATABASE_PLUGIN_HXX #define MPD_LAZY_DATABASE_PLUGIN_HXX -#include "db/DatabasePlugin.hxx" +#include "db/Interface.hxx" +#include "Compiler.h" /** * A wrapper for a #Database object that gets opened on the first diff --git a/src/db/plugins/ProxyDatabasePlugin.cxx b/src/db/plugins/ProxyDatabasePlugin.cxx index cfd90fc5c..c09468869 100644 --- a/src/db/plugins/ProxyDatabasePlugin.cxx +++ b/src/db/plugins/ProxyDatabasePlugin.cxx @@ -19,6 +19,7 @@ #include "config.h" #include "ProxyDatabasePlugin.hxx" +#include "db/Interface.hxx" #include "db/DatabasePlugin.hxx" #include "db/DatabaseListener.hxx" #include "db/Selection.hxx" @@ -26,6 +27,7 @@ #include "db/PlaylistInfo.hxx" #include "db/LightDirectory.hxx" #include "db/LightSong.hxx" +#include "db/Stats.hxx" #include "SongFilter.hxx" #include "Compiler.h" #include "config/ConfigData.hxx" diff --git a/src/db/plugins/SimpleDatabasePlugin.cxx b/src/db/plugins/SimpleDatabasePlugin.cxx index 55e08b6d7..cd13b70cb 100644 --- a/src/db/plugins/SimpleDatabasePlugin.cxx +++ b/src/db/plugins/SimpleDatabasePlugin.cxx @@ -19,6 +19,7 @@ #include "config.h" #include "SimpleDatabasePlugin.hxx" +#include "db/DatabasePlugin.hxx" #include "db/Selection.hxx" #include "db/Helpers.hxx" #include "db/LightDirectory.hxx" diff --git a/src/db/plugins/SimpleDatabasePlugin.hxx b/src/db/plugins/SimpleDatabasePlugin.hxx index 83434393c..49e3d987d 100644 --- a/src/db/plugins/SimpleDatabasePlugin.hxx +++ b/src/db/plugins/SimpleDatabasePlugin.hxx @@ -20,14 +20,18 @@ #ifndef MPD_SIMPLE_DATABASE_PLUGIN_HXX #define MPD_SIMPLE_DATABASE_PLUGIN_HXX -#include "db/DatabasePlugin.hxx" +#include "db/Interface.hxx" #include "fs/AllocatedPath.hxx" #include "db/LightSong.hxx" #include "Compiler.h" #include <cassert> +struct config_param; struct Directory; +struct DatabasePlugin; +class EventLoop; +class DatabaseListener; class SimpleDatabase : public Database { AllocatedPath path; diff --git a/src/db/plugins/UpnpDatabasePlugin.cxx b/src/db/plugins/UpnpDatabasePlugin.cxx index c921d5460..f7d3a1932 100644 --- a/src/db/plugins/UpnpDatabasePlugin.cxx +++ b/src/db/plugins/UpnpDatabasePlugin.cxx @@ -26,11 +26,13 @@ #include "lib/upnp/Util.hxx" #include "upnp/Directory.hxx" #include "upnp/Tags.hxx" +#include "db/Interface.hxx" #include "db/DatabasePlugin.hxx" #include "db/Selection.hxx" #include "db/DatabaseError.hxx" #include "db/LightDirectory.hxx" #include "db/LightSong.hxx" +#include "db/Stats.hxx" #include "config/ConfigData.hxx" #include "tag/TagBuilder.hxx" #include "tag/TagTable.hxx" diff --git a/src/sticker/SongSticker.cxx b/src/sticker/SongSticker.cxx index 7246ec69f..b6f46f167 100644 --- a/src/sticker/SongSticker.cxx +++ b/src/sticker/SongSticker.cxx @@ -21,7 +21,7 @@ #include "SongSticker.hxx" #include "StickerDatabase.hxx" #include "db/LightSong.hxx" -#include "db/DatabasePlugin.hxx" +#include "db/Interface.hxx" #include "util/Error.hxx" #include <glib.h> diff --git a/test/DumpDatabase.cxx b/test/DumpDatabase.cxx index d282e9360..d5b6f2223 100644 --- a/test/DumpDatabase.cxx +++ b/test/DumpDatabase.cxx @@ -20,6 +20,7 @@ #include "config.h" #include "db/Registry.hxx" #include "db/DatabasePlugin.hxx" +#include "db/Interface.hxx" #include "db/Selection.hxx" #include "db/DatabaseListener.hxx" #include "db/LightDirectory.hxx" |