diff --git a/src/db/update/Playlist.cxx b/src/db/update/Playlist.cxx index db4eddb73..809fd39a4 100644 --- a/src/db/update/Playlist.cxx +++ b/src/db/update/Playlist.cxx @@ -72,8 +72,9 @@ UpdateWalk::UpdatePlaylistFile(Directory &parent, std::string_view name, auto db_song = std::make_unique(std::move(*song), *directory); - db_song->target = - PathTraitsUTF8::IsAbsoluteOrHasScheme(db_song->filename.c_str()) + const bool is_absolute = + PathTraitsUTF8::IsAbsoluteOrHasScheme(db_song->filename.c_str()); + db_song->target = is_absolute ? db_song->filename /* prepend "../" to relative paths to go from the virtual directory @@ -85,6 +86,11 @@ UpdateWalk::UpdatePlaylistFile(Directory &parent, std::string_view name, { const ScopeDatabaseLock protect; + + if (!is_absolute && + !directory->TargetExists(db_song->target)) + continue; + directory->AddSong(std::move(db_song)); } }