diff --git a/NEWS b/NEWS index 6dbf69390..397bc7176 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,9 @@ ver 0.19 (not yet released) - proxy: forward "idle" events - proxy: copy "Last-Modified" from remote directories - upnp: new plugin +* storage + - music_directory can point to a remote file server + - smbclient: new plugin * playlist - soundcloud: use https instead of http - soundcloud: add default API key diff --git a/src/Main.cxx b/src/Main.cxx index 82e0145cd..b98f3c24d 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -55,6 +55,7 @@ #include "unix/SignalHandlers.hxx" #include "unix/Daemon.hxx" #include "system/FatalError.hxx" +#include "util/UriUtil.hxx" #include "util/Error.hxx" #include "util/Domain.hxx" #include "thread/Id.hxx" @@ -63,6 +64,7 @@ #include "config/ConfigData.hxx" #include "config/ConfigDefaults.hxx" #include "config/ConfigOption.hxx" +#include "config/ConfigError.hxx" #include "Stats.hxx" #ifdef ENABLE_DATABASE @@ -71,6 +73,7 @@ #include "db/DatabaseSimple.hxx" #include "db/plugins/SimpleDatabasePlugin.hxx" #include "storage/plugins/LocalStorage.hxx" +#include "storage/Registry.hxx" #endif #ifdef ENABLE_NEIGHBOR_PLUGINS @@ -148,6 +151,15 @@ glue_mapper_init(Error &error) static bool InitStorage(Error &error) { + auto uri = config_get_string(CONF_MUSIC_DIR, nullptr); + if (uri != nullptr && uri_has_scheme(uri)) { + instance->storage = CreateStorageURI(uri, error); + if (instance->storage == nullptr && !error.IsDefined()) + error.Format(config_domain, + "Unrecognized storage URI: %s", uri); + return instance->storage != nullptr; + } + auto path_fs = config_get_path(CONF_MUSIC_DIR, error); if (path_fs.IsNull() && error.IsDefined()) return false;