db/simple/Mount: drop mount point prefix from LOCATE_TAG_BASE_TYPE

Fixes search within mount points, resulting in error "No such
directory".

Closes #190
This commit is contained in:
Max Kellermann
2018-01-19 23:35:05 +01:00
parent ed2354cd9d
commit 8376578921
4 changed files with 53 additions and 0 deletions

View File

@@ -20,6 +20,7 @@
#include "config.h"
#include "Mount.hxx"
#include "PrefixedLightSong.hxx"
#include "SongFilter.hxx"
#include "db/Selection.hxx"
#include "db/LightDirectory.hxx"
#include "db/Interface.hxx"
@@ -86,5 +87,16 @@ WalkMount(const char *base, const Database &db,
vp = std::bind(PrefixVisitPlaylist,
base, std::ref(visit_playlist), _1, _2);
SongFilter prefix_filter;
if (base != nullptr && filter != nullptr) {
/* if the SongFilter contains a LOCATE_TAG_BASE_TYPE
item, copy the SongFilter and drop the mount point
from the filter, because the mounted database
doesn't know its own location within MPD's VFS */
prefix_filter = filter->WithoutBasePrefix(base);
filter = &prefix_filter;
}
db.Visit(DatabaseSelection(uri, recursive, filter), vd, vs, vp);
}