diff options
author | Max Kellermann <max@duempel.org> | 2014-07-29 23:14:25 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-07-29 23:31:27 +0200 |
commit | aa0f06d6b712b1fe40536714ecdb2dd968417be3 (patch) | |
tree | 081d8d7b304aa370b5f62daab2da7e18281b2e4d | |
parent | 0c47685e0291b835034b7f5855eafef9bf69c7c9 (diff) | |
download | mpd-aa0f06d6b712b1fe40536714ecdb2dd968417be3.tar.gz mpd-aa0f06d6b712b1fe40536714ecdb2dd968417be3.tar.xz mpd-aa0f06d6b712b1fe40536714ecdb2dd968417be3.zip |
db/Interface: add virtual method Update()
For database plugins that don't use the UpdateService.
-rw-r--r-- | src/command/OtherCommands.cxx | 24 | ||||
-rw-r--r-- | src/db/Interface.hxx | 12 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/command/OtherCommands.cxx b/src/command/OtherCommands.cxx index 4f149e58e..a924f77b5 100644 --- a/src/command/OtherCommands.cxx +++ b/src/command/OtherCommands.cxx @@ -49,6 +49,7 @@ #ifdef ENABLE_DATABASE #include "DatabaseCommands.hxx" +#include "db/Interface.hxx" #include "db/update/Service.hxx" #endif @@ -242,6 +243,25 @@ handle_update(Client &client, UpdateService &update, } } +static CommandResult +handle_update(Client &client, Database &db, + const char *uri_utf8, bool discard) +{ + Error error; + unsigned id = db.Update(uri_utf8, discard, error); + if (id > 0) { + client_printf(client, "updating_db: %i\n", id); + return CommandResult::OK; + } else if (error.IsDefined()) { + return print_error(client, error); + } else { + /* Database::Update() has returned 0 without setting + the Error: the method is not implemented */ + command_error(client, ACK_ERROR_NO_EXIST, "Not implemented"); + return CommandResult::ERROR; + } +} + #endif static CommandResult @@ -267,6 +287,10 @@ handle_update(Client &client, unsigned argc, char *argv[], bool discard) UpdateService *update = client.partition.instance.update; if (update != nullptr) return handle_update(client, *update, path, discard); + + Database *db = client.partition.instance.database; + if (db != nullptr) + return handle_update(client, *db, path, discard); #else (void)argc; (void)argv; diff --git a/src/db/Interface.hxx b/src/db/Interface.hxx index 5fc9265e2..152928c79 100644 --- a/src/db/Interface.hxx +++ b/src/db/Interface.hxx @@ -116,6 +116,18 @@ public: Error &error) const = 0; /** + * Update the database. Returns the job id on success, 0 on + * error (with #Error set) and 0 if not implemented (#Error + * not set). + */ + virtual unsigned Update(gcc_unused const char *uri_utf8, + gcc_unused bool discard, + gcc_unused Error &error) { + /* not implemented: return 0 and don't set an Error */ + return 0; + } + + /** * Returns the time stamp of the last database update. * Returns 0 if that is not not known/available. */ |