aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Main.cxx3
-rw-r--r--src/db/DatabaseGlue.cxx18
-rw-r--r--src/db/DatabaseSimple.hxx21
-rw-r--r--src/db/plugins/SimpleDatabasePlugin.hxx4
-rw-r--r--src/db/update/Service.hxx6
-rw-r--r--src/db/update/UpdateGlue.cxx13
6 files changed, 24 insertions, 41 deletions
diff --git a/src/Main.cxx b/src/Main.cxx
index 06bef5326..3cedfe267 100644
--- a/src/Main.cxx
+++ b/src/Main.cxx
@@ -68,6 +68,7 @@
#include "db/update/Service.hxx"
#include "db/DatabaseGlue.hxx"
#include "db/DatabaseSimple.hxx"
+#include "db/plugins/SimpleDatabasePlugin.hxx"
#endif
#ifdef ENABLE_NEIGHBOR_PLUGINS
@@ -460,7 +461,7 @@ int mpd_main(int argc, char *argv[])
const bool create_db = !glue_db_init_and_load();
instance->update = db_is_simple()
- ? new UpdateService(*main_loop)
+ ? new UpdateService(*main_loop, db_get_simple())
: nullptr;
#endif
diff --git a/src/db/DatabaseGlue.cxx b/src/db/DatabaseGlue.cxx
index b8aae5be5..f320633c7 100644
--- a/src/db/DatabaseGlue.cxx
+++ b/src/db/DatabaseGlue.cxx
@@ -95,23 +95,13 @@ db_is_simple(void)
return is_simple;
}
-Directory *
-db_get_root(void)
+SimpleDatabase &
+db_get_simple()
{
+ assert(is_simple);
assert(db != nullptr);
- assert(db_is_simple());
-
- return ((SimpleDatabase *)db)->GetRoot();
-}
-
-bool
-db_save(Error &error)
-{
- assert(db != nullptr);
- assert(db_is_open);
- assert(db_is_simple());
- return ((SimpleDatabase *)db)->Save(error);
+ return *(SimpleDatabase *)db;
}
bool
diff --git a/src/db/DatabaseSimple.hxx b/src/db/DatabaseSimple.hxx
index 5d5680d43..c0f84ab79 100644
--- a/src/db/DatabaseSimple.hxx
+++ b/src/db/DatabaseSimple.hxx
@@ -22,12 +22,9 @@
#include "Compiler.h"
-#include <sys/time.h>
-
struct config_param;
struct Directory;
-struct db_selection;
-struct db_visitor;
+class SimpleDatabase;
class Error;
/**
@@ -38,21 +35,9 @@ class Error;
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
-Directory *
-db_get_root(void);
-
-/**
- * May only be used if db_is_simple() returns true.
- */
-bool
-db_save(Error &error);
+SimpleDatabase &
+db_get_simple();
/**
* Returns true if there is a valid database file on the disk.
diff --git a/src/db/plugins/SimpleDatabasePlugin.hxx b/src/db/plugins/SimpleDatabasePlugin.hxx
index 137a60884..8c7978a91 100644
--- a/src/db/plugins/SimpleDatabasePlugin.hxx
+++ b/src/db/plugins/SimpleDatabasePlugin.hxx
@@ -59,6 +59,10 @@ public:
bool Save(Error &error);
+ bool FileExists() const {
+ return mtime > 0;
+ }
+
static Database *Create(EventLoop &loop, DatabaseListener &listener,
const config_param &param,
Error &error);
diff --git a/src/db/update/Service.hxx b/src/db/update/Service.hxx
index 3ea4baea1..815be6dbc 100644
--- a/src/db/update/Service.hxx
+++ b/src/db/update/Service.hxx
@@ -26,6 +26,8 @@
#include "event/DeferredMonitor.hxx"
#include "thread/Thread.hxx"
+class SimpleDatabase;
+
/**
* This class manages the update queue and runs the update thread.
*/
@@ -36,6 +38,8 @@ class UpdateService final : DeferredMonitor {
UPDATE_PROGRESS_DONE = 2
};
+ SimpleDatabase &db;
+
Progress progress;
bool modified;
@@ -53,7 +57,7 @@ class UpdateService final : DeferredMonitor {
UpdateWalk walk;
public:
- UpdateService(EventLoop &_loop);
+ UpdateService(EventLoop &_loop, SimpleDatabase &_db);
/**
* Returns a non-zero job id when we are currently updating
diff --git a/src/db/update/UpdateGlue.cxx b/src/db/update/UpdateGlue.cxx
index 742fbfe98..a13d56926 100644
--- a/src/db/update/UpdateGlue.cxx
+++ b/src/db/update/UpdateGlue.cxx
@@ -20,7 +20,7 @@
#include "config.h"
#include "Service.hxx"
#include "UpdateDomain.hxx"
-#include "db/DatabaseSimple.hxx"
+#include "db/plugins/SimpleDatabasePlugin.hxx"
#include "Idle.hxx"
#include "util/Error.hxx"
#include "Log.hxx"
@@ -44,12 +44,12 @@ UpdateService::Task()
SetThreadIdlePriority();
- modified = walk.Walk(*db_get_root(), next.path_utf8.c_str(),
+ modified = walk.Walk(*db.GetRoot(), next.path_utf8.c_str(),
next.discard);
- if (modified || !db_exists()) {
+ if (modified || !db.FileExists()) {
Error error;
- if (!db_save(error))
+ if (!db.Save(error))
LogError(error, "Failed to save database");
}
@@ -146,8 +146,7 @@ UpdateService::RunDeferred()
}
}
-UpdateService::UpdateService(EventLoop &_loop)
- :DeferredMonitor(_loop), walk(_loop)
+UpdateService::UpdateService(EventLoop &_loop, SimpleDatabase &_db)
+ :DeferredMonitor(_loop), db(_db), walk(_loop)
{
- assert(db_is_simple());
}