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
e5e623ff
Commit
e5e623ff
authored
6 years ago
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SongFilter: add class NotSongFilter
parent
e47e3205
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
71 additions
and
0 deletions
+71
-0
protocol.xml
doc/protocol.xml
+6
-0
Filter.cxx
src/song/Filter.cxx
+15
-0
NotSongFilter.hxx
src/song/NotSongFilter.hxx
+50
-0
No files found.
doc/protocol.xml
View file @
e5e623ff
...
...
@@ -278,6 +278,12 @@
<listitem>
<para>
"
<code>
(!EXPRESSION)
</code>
": negate an expression.
</para>
</listitem>
<listitem>
<para>
"
<code>
(EXPRESSION1 AND EXPRESSION2 ...)
</code>
": combine two or
more expressions with logical "and".
</para>
...
...
This diff is collapsed.
Click to expand it.
src/song/Filter.cxx
View file @
e5e623ff
...
...
@@ -19,6 +19,7 @@
#include "config.h"
#include "Filter.hxx"
#include "NotSongFilter.hxx"
#include "UriSongFilter.hxx"
#include "BaseSongFilter.hxx"
#include "TagSongFilter.hxx"
...
...
@@ -214,6 +215,20 @@ SongFilter::ParseExpression(const char *&s, bool fold_case)
}
}
if
(
*
s
==
'!'
)
{
s
=
StripLeft
(
s
+
1
);
if
(
*
s
!=
'('
)
throw
std
::
runtime_error
(
"'(' expected"
);
auto
inner
=
ParseExpression
(
s
,
fold_case
);
if
(
*
s
!=
')'
)
throw
std
::
runtime_error
(
"')' expected"
);
s
=
StripLeft
(
s
+
1
);
return
std
::
make_unique
<
NotSongFilter
>
(
std
::
move
(
inner
));
}
auto
type
=
ExpectFilterType
(
s
);
if
(
type
==
LOCATE_TAG_MODIFIED_SINCE
)
{
...
...
This diff is collapsed.
Click to expand it.
src/song/NotSongFilter.hxx
0 → 100644
View file @
e5e623ff
/*
* Copyright 2003-2018 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef MPD_NOT_SONG_FILTER_HXX
#define MPD_NOT_SONG_FILTER_HXX
#include "ISongFilter.hxx"
/**
* Negate an #ISongFilter.
*/
class
NotSongFilter
final
:
public
ISongFilter
{
ISongFilterPtr
child
;
public
:
template
<
typename
C
>
explicit
NotSongFilter
(
C
&&
_child
)
noexcept
:
child
(
std
::
forward
<
C
>
(
_child
))
{}
/* virtual methods from ISongFilter */
ISongFilterPtr
Clone
()
const
noexcept
override
{
return
std
::
make_unique
<
NotSongFilter
>
(
child
->
Clone
());
}
std
::
string
ToExpression
()
const
noexcept
override
{
return
"(!"
+
child
->
ToExpression
()
+
")"
;
}
bool
Match
(
const
LightSong
&
song
)
const
noexcept
override
{
return
!
child
->
Match
(
song
);
}
};
#endif
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