diff options
author | Max Kellermann <max@duempel.org> | 2014-06-23 10:13:50 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-06-23 10:13:50 +0200 |
commit | fa1fb47d7553a15f8bde1636364c0e6dba57c39c (patch) | |
tree | d458b289b803690651efa0759852df812de274eb /src/db/plugins | |
parent | b9eeb6e6eb1818c591634abf5e25e6a8bb8e89fd (diff) | |
parent | 848ed1478866e4d99c10aa962a6d976a6b989536 (diff) | |
download | mpd-fa1fb47d7553a15f8bde1636364c0e6dba57c39c.tar.gz mpd-fa1fb47d7553a15f8bde1636364c0e6dba57c39c.tar.xz mpd-fa1fb47d7553a15f8bde1636364c0e6dba57c39c.zip |
Merge branch 'v0.18.x'
Diffstat (limited to 'src/db/plugins')
-rw-r--r-- | src/db/plugins/ProxyDatabasePlugin.cxx | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/db/plugins/ProxyDatabasePlugin.cxx b/src/db/plugins/ProxyDatabasePlugin.cxx index 1ef281e23..918e6be49 100644 --- a/src/db/plugins/ProxyDatabasePlugin.cxx +++ b/src/db/plugins/ProxyDatabasePlugin.cxx @@ -695,6 +695,23 @@ SearchSongs(struct mpd_connection *connection, return result && CheckError(connection, error); } +/** + * Check whether we can use the "base" constraint. Requires + * libmpdclient 2.9 and MPD 0.18. + */ +gcc_pure +static bool +ServerSupportsSearchBase(const struct mpd_connection *connection) +{ +#if LIBMPDCLIENT_CHECK_VERSION(2,9,0) + return mpd_connection_cmp_server_version(connection, 0, 18, 0) >= 0; +#else + (void)connection; + + return false; +#endif +} + bool ProxyDatabase::Visit(const DatabaseSelection &selection, VisitDirectory visit_directory, @@ -706,7 +723,10 @@ ProxyDatabase::Visit(const DatabaseSelection &selection, if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error)) return nullptr; - if (!visit_directory && !visit_playlist && selection.recursive) + if (!visit_directory && !visit_playlist && selection.recursive && + (ServerSupportsSearchBase(connection) + ? !selection.IsEmpty() + : selection.HasOtherThanBase())) /* this optimized code path can only be used under certain conditions */ return ::SearchSongs(connection, selection, visit_song, error); |