DatabasePlugin: add FLAG_REQUIRE_STORAGE

Ignore the storage configuration if FLAG_REQUIRE_STORAGE is not set in
the DatabasePlugin.
This commit is contained in:
Max Kellermann 2014-02-17 20:57:56 +01:00
parent 9e36af7916
commit 150443b014
6 changed files with 43 additions and 11 deletions

View File

@ -67,6 +67,7 @@
#ifdef ENABLE_DATABASE
#include "db/update/Service.hxx"
#include "db/Configured.hxx"
#include "db/DatabasePlugin.hxx"
#include "db/plugins/SimpleDatabasePlugin.hxx"
#include "storage/Configured.hxx"
#include "storage/CompositeStorage.hxx"
@ -177,16 +178,23 @@ glue_db_init_and_load(void)
return true;
}
if (!InitStorage(error))
FatalError(error);
if (instance->database->GetPlugin().flags & DatabasePlugin::FLAG_REQUIRE_STORAGE) {
if (!InitStorage(error))
FatalError(error);
if (instance->storage == nullptr) {
delete instance->database;
instance->database = nullptr;
LogDefault(config_domain,
"Found database setting without "
"music_directory - disabling database");
return true;
if (instance->storage == nullptr) {
delete instance->database;
instance->database = nullptr;
LogDefault(config_domain,
"Found database setting without "
"music_directory - disabling database");
return true;
}
} else {
if (IsStorageConfigured())
LogDefault(config_domain,
"Ignoring the storage configuration "
"because the database does not need it");
}
if (!instance->database->Open(error))

View File

@ -33,6 +33,12 @@ class DatabaseListener;
class Database;
struct DatabasePlugin {
/**
* This plugin requires a #Storage instance. It contains only
* cached metadata from files in the #Storage.
*/
static constexpr unsigned FLAG_REQUIRE_STORAGE = 0x1;
const char *name;
unsigned flags;
@ -43,6 +49,10 @@ struct DatabasePlugin {
Database *(*create)(EventLoop &loop, DatabaseListener &listener,
const config_param &param,
Error &error);
constexpr bool RequireStorage() const {
return flags & FLAG_REQUIRE_STORAGE;
}
};
#endif

View File

@ -780,6 +780,6 @@ ProxyDatabase::GetStats(const DatabaseSelection &selection,
const DatabasePlugin proxy_db_plugin = {
"proxy",
0,
DatabasePlugin::FLAG_REQUIRE_STORAGE,
ProxyDatabase::Create,
};

View File

@ -337,6 +337,6 @@ SimpleDatabase::Save(Error &error)
const DatabasePlugin simple_db_plugin = {
"simple",
0,
DatabasePlugin::FLAG_REQUIRE_STORAGE,
SimpleDatabase::Create,
};

View File

@ -76,3 +76,9 @@ CreateConfiguredStorage(Error &error)
return CreateConfiguredStorageLocal(error);
}
bool
IsStorageConfigured()
{
return config_get_string(CONF_MUSIC_DIR, nullptr) != nullptr;
}

View File

@ -21,6 +21,7 @@
#define MPD_STORAGE_CONFIG_HXX
#include "check.h"
#include "Compiler.h"
class Error;
class Storage;
@ -33,4 +34,11 @@ class Storage;
Storage *
CreateConfiguredStorage(Error &error);
/**
* Returns true if there is configuration for a #Storage instance.
*/
gcc_const
bool
IsStorageConfigured();
#endif