aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rw-r--r--src/PlaylistPrint.cxx2
-rw-r--r--src/PlaylistUpdate.cxx2
-rw-r--r--src/Stats.cxx3
-rw-r--r--src/command/StickerCommands.cxx2
-rw-r--r--src/db/DatabasePlaylist.cxx2
-rw-r--r--src/db/DatabasePlugin.hxx115
-rw-r--r--src/db/DatabasePrint.cxx2
-rw-r--r--src/db/DatabaseQueue.cxx2
-rw-r--r--src/db/DatabaseSong.cxx2
-rw-r--r--src/db/Helpers.cxx3
-rw-r--r--src/db/Interface.hxx111
-rw-r--r--src/db/Registry.cxx1
-rw-r--r--src/db/Stats.hxx51
-rw-r--r--src/db/plugins/LazyDatabase.cxx1
-rw-r--r--src/db/plugins/LazyDatabase.hxx3
-rw-r--r--src/db/plugins/ProxyDatabasePlugin.cxx2
-rw-r--r--src/db/plugins/SimpleDatabasePlugin.cxx1
-rw-r--r--src/db/plugins/SimpleDatabasePlugin.hxx6
-rw-r--r--src/db/plugins/UpnpDatabasePlugin.cxx2
-rw-r--r--src/sticker/SongSticker.cxx2
-rw-r--r--test/DumpDatabase.cxx1
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"