Commit b504d631 authored by Max Kellermann's avatar Max Kellermann

ProxyDatabasePlugin: use an artificial "root" directory

Fixes assertion failures in the Directory library.
parent b4b1728b
...@@ -49,6 +49,7 @@ class ProxyDatabase : public Database { ...@@ -49,6 +49,7 @@ class ProxyDatabase : public Database {
unsigned port; unsigned port;
struct mpd_connection *connection; struct mpd_connection *connection;
struct directory *root;
public: public:
static Database *Create(const struct config_param *param, static Database *Create(const struct config_param *param,
...@@ -124,6 +125,8 @@ ProxyDatabase::Open(GError **error_r) ...@@ -124,6 +125,8 @@ ProxyDatabase::Open(GError **error_r)
return false; return false;
} }
root = directory_new_root();
return true; return true;
} }
...@@ -132,6 +135,7 @@ ProxyDatabase::Close() ...@@ -132,6 +135,7 @@ ProxyDatabase::Close()
{ {
assert(connection != nullptr); assert(connection != nullptr);
directory_free(root);
mpd_connection_free(connection); mpd_connection_free(connection);
} }
...@@ -331,10 +335,13 @@ ProxyDatabase::Visit(const DatabaseSelection &selection, ...@@ -331,10 +335,13 @@ ProxyDatabase::Visit(const DatabaseSelection &selection,
// TODO: match // TODO: match
// TODO: auto-reconnect // TODO: auto-reconnect
struct directory *parent = directory_new(selection.uri, nullptr); struct directory *parent = *selection.uri == 0
? root
: directory_new(selection.uri, root);
bool success = ::Visit(connection, *parent, selection.recursive, bool success = ::Visit(connection, *parent, selection.recursive,
visit_directory, visit_song, visit_playlist, visit_directory, visit_song, visit_playlist,
error_r); error_r);
if (parent != root)
directory_free(parent); directory_free(parent);
return success; return success;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment