aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/db/SimpleDatabasePlugin.cxx18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/db/SimpleDatabasePlugin.cxx b/src/db/SimpleDatabasePlugin.cxx
index 1e5ffe9bb..d83c1ca73 100644
--- a/src/db/SimpleDatabasePlugin.cxx
+++ b/src/db/SimpleDatabasePlugin.cxx
@@ -261,13 +261,18 @@ SimpleDatabase::Visit(const DatabaseSelection &selection,
VisitPlaylist visit_playlist,
GError **error_r) const
{
- const struct directory *directory = LookupDirectory(selection.uri);
+ ScopeDatabaseLock protect;
+
+ const struct directory *directory =
+ directory_lookup_directory(root, selection.uri);
if (directory == NULL) {
- struct song *song;
- if (visit_song &&
- (song = GetSong(selection.uri, NULL)) != NULL &&
- selection.Match(*song))
- return visit_song(*song, error_r);
+ if (visit_song) {
+ struct song *song =
+ directory_lookup_song(root, selection.uri);
+ if (song != nullptr)
+ return !selection.Match(*song) ||
+ visit_song(*song, error_r);
+ }
g_set_error(error_r, db_quark(), DB_NOT_FOUND,
"No such directory");
@@ -278,7 +283,6 @@ SimpleDatabase::Visit(const DatabaseSelection &selection,
!visit_directory(*directory, error_r))
return false;
- ScopeDatabaseLock protect;
return directory->Walk(selection.recursive, selection.filter,
visit_directory, visit_song, visit_playlist,
error_r);