aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2012-08-08 08:19:30 +0200
committerMax Kellermann <max@duempel.org>2012-08-08 09:28:13 +0200
commitaa55d759f555782dc9cf2f9f6d489502310490a6 (patch)
tree1e9a8c602cb2b1c5dcecc91909fa74084337cafd
parent2043579f71b4f5204272ed8615cffe1c3c4d8473 (diff)
downloadmpd-aa55d759f555782dc9cf2f9f6d489502310490a6.tar.gz
mpd-aa55d759f555782dc9cf2f9f6d489502310490a6.tar.xz
mpd-aa55d759f555782dc9cf2f9f6d489502310490a6.zip
DatabaseGlue: add function db_is_simple()
Preparing for non-"simple" database plugins.
-rw-r--r--src/DatabaseGlue.cxx11
-rw-r--r--src/Stats.cxx12
-rw-r--r--src/database.h18
-rw-r--r--src/update.c2
4 files changed, 38 insertions, 5 deletions
diff --git a/src/DatabaseGlue.cxx b/src/DatabaseGlue.cxx
index 68ab11ab3..a0246253c 100644
--- a/src/DatabaseGlue.cxx
+++ b/src/DatabaseGlue.cxx
@@ -87,10 +87,19 @@ GetDatabase()
return db;
}
+bool
+db_is_simple(void)
+{
+ assert(db == NULL || db_is_open);
+
+ return dynamic_cast<SimpleDatabase *>(db) != nullptr;
+}
+
struct directory *
db_get_root(void)
{
assert(db != NULL);
+ assert(db_is_simple());
return ((SimpleDatabase *)db)->GetRoot();
}
@@ -128,6 +137,7 @@ db_save(GError **error_r)
{
assert(db != NULL);
assert(db_is_open);
+ assert(db_is_simple());
return ((SimpleDatabase *)db)->Save(error_r);
}
@@ -153,6 +163,7 @@ db_get_mtime(void)
{
assert(db != NULL);
assert(db_is_open);
+ assert(db_is_simple());
return ((SimpleDatabase *)db)->GetLastModified();
}
diff --git a/src/Stats.cxx b/src/Stats.cxx
index 5b5008cee..07273bfdb 100644
--- a/src/Stats.cxx
+++ b/src/Stats.cxx
@@ -119,14 +119,18 @@ int stats_print(struct client *client)
"songs: %i\n"
"uptime: %li\n"
"playtime: %li\n"
- "db_playtime: %li\n"
- "db_update: %li\n",
+ "db_playtime: %li\n",
stats.artist_count,
stats.album_count,
stats.song_count,
(long)g_timer_elapsed(stats.timer, NULL),
(long)(pc_get_total_play_time(client->player_control) + 0.5),
- stats.song_duration,
- (long)db_get_mtime());
+ stats.song_duration);
+
+ if (db_is_simple())
+ client_printf(client,
+ "db_update: %li\n",
+ (long)db_get_mtime());
+
return 0;
}
diff --git a/src/database.h b/src/database.h
index 20d132ea1..a22fea823 100644
--- a/src/database.h
+++ b/src/database.h
@@ -44,8 +44,18 @@ void
db_finish(void);
/**
+ * Check whether the default #SimpleDatabasePlugin is used. This
+ * allows using db_get_root(), db_save(), db_get_mtime() and
+ * db_exists().
+ */
+bool
+db_is_simple(void);
+
+/**
* Returns the root directory object. Returns NULL if there is no
* configured music directory.
+ *
+ * May only be used if db_is_simple() returns true.
*/
gcc_pure
struct directory *
@@ -64,18 +74,26 @@ gcc_pure
struct song *
db_get_song(const char *file);
+/**
+ * May only be used if db_is_simple() returns true.
+ */
bool
db_save(GError **error_r);
bool
db_load(GError **error);
+/**
+ * May only be used if db_is_simple() returns true.
+ */
gcc_pure
time_t
db_get_mtime(void);
/**
* Returns true if there is a valid database file on the disk.
+ *
+ * May only be used if db_is_simple() returns true.
*/
gcc_pure
static inline bool
diff --git a/src/update.c b/src/update.c
index 12eec40c4..ef4dfe749 100644
--- a/src/update.c
+++ b/src/update.c
@@ -118,7 +118,7 @@ update_enqueue(const char *path, bool _discard)
{
assert(g_thread_self() == main_task);
- if (!mapper_has_music_directory())
+ if (!db_is_simple() || !mapper_has_music_directory())
return 0;
if (progress != UPDATE_PROGRESS_IDLE) {