Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
83765789
Commit
83765789
authored
7 years ago
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
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
parent
ed2354cd
sisyphus
0.23.15-alt1
0.23.14-alt1
0.23.13-alt1
0.23.12-alt1
0.23.11-alt1
0.23.8-alt3
0.23.8-alt2
0.23.8-alt1
0.21.24-alt1.1
0.21.24-alt1
0.20.23-alt3
0.20.23-alt2
0.20.23-alt1
0.20.21-alt1
gb-sisyphus-task339776.6100
gb-sisyphus-task337393.100
gb-sisyphus-task337176.300
gb-sisyphus-task334590.100
gb-sisyphus-task333607.100
gb-sisyphus-task331543.2500
gb-sisyphus-task328663.4700
gb-sisyphus-task325064.100
gb-sisyphus-task319111.4000
gb-sisyphus-task313704.100
gb-sisyphus-task312885.100
gb-sisyphus-task308905.3200
gb-sisyphus-task305294.500
gb-sisyphus-task304007.100
gb-sisyphus-task303674.1700
gb-sisyphus-task298681.300
gb-sisyphus-task296051.1000
gb-sisyphus-task274827.100
gb-sisyphus-task269249.2000
gb-sisyphus-task266579.400
gb-sisyphus-task258132.600
gb-sisyphus-task254601.200
gb-sisyphus-task253310.100
gb-sisyphus-task252214.300
gb-sisyphus-task251539.6100
gb-sisyphus-task247988.7000
gb-sisyphus-task238768.6000
gb-sisyphus-task229151.100
gb-sisyphus-task227574.200
gb-sisyphus-task226762.6000
gb-sisyphus-task219546.1700
gb-sisyphus-task213491.100
gb-p9-task277538.2600
gb-c9f2-task327704.1100
No related merge requests found
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
53 additions
and
0 deletions
+53
-0
NEWS
NEWS
+2
-0
SongFilter.cxx
src/SongFilter.cxx
+32
-0
SongFilter.hxx
src/SongFilter.hxx
+7
-0
Mount.cxx
src/db/plugins/simple/Mount.cxx
+12
-0
No files found.
NEWS
View file @
83765789
ver 0.20.16 (not yet released)
* database
- simple: fix search within mount points
* fix crash in debug build on Haiku and other operating systems
ver 0.20.15 (2018/01/05)
...
...
This diff is collapsed.
Click to expand it.
src/SongFilter.cxx
View file @
83765789
...
...
@@ -24,6 +24,8 @@
#include "tag/Tag.hxx"
#include "util/ConstBuffer.hxx"
#include "util/StringAPI.hxx"
#include "util/StringCompare.hxx"
#include "util/StringView.hxx"
#include "util/ASCII.hxx"
#include "util/TimeParser.hxx"
#include "util/UriUtil.hxx"
...
...
@@ -274,3 +276,33 @@ SongFilter::GetBase() const noexcept
return
nullptr
;
}
SongFilter
SongFilter
::
WithoutBasePrefix
(
const
char
*
_prefix
)
const
noexcept
{
const
StringView
prefix
(
_prefix
);
SongFilter
result
;
for
(
const
auto
&
i
:
items
)
{
if
(
i
.
GetTag
()
==
LOCATE_TAG_BASE_TYPE
)
{
const
char
*
s
=
StringAfterPrefix
(
i
.
GetValue
(),
prefix
);
if
(
s
!=
nullptr
)
{
if
(
*
s
==
0
)
continue
;
if
(
*
s
==
'/'
)
{
++
s
;
if
(
*
s
!=
0
)
result
.
items
.
emplace_back
(
LOCATE_TAG_BASE_TYPE
,
s
);
continue
;
}
}
}
result
.
items
.
emplace_back
(
i
);
}
return
result
;
}
This diff is collapsed.
Click to expand it.
src/SongFilter.hxx
View file @
83765789
...
...
@@ -152,6 +152,13 @@ public:
*/
gcc_pure
const
char
*
GetBase
()
const
noexcept
;
/**
* Create a copy of the filter with the given prefix stripped
* from all #LOCATE_TAG_BASE_TYPE items. This is used to
* filter songs in mounted databases.
*/
SongFilter
WithoutBasePrefix
(
const
char
*
prefix
)
const
noexcept
;
};
/**
...
...
This diff is collapsed.
Click to expand it.
src/db/plugins/simple/Mount.cxx
View file @
83765789
...
...
@@ -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
);
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment