SongFilter: check value.empty() after checking tag fallbacks

In this new order, a filter 'AlbumArtist ""' matches only on songs
which neither have `AlbumArtist` nor `Artist`.
This commit is contained in:
Max Kellermann 2018-10-22 18:34:47 +02:00
parent db27bb76e2
commit c26703b7e6
2 changed files with 10 additions and 9 deletions

1
NEWS
View File

@ -1,6 +1,7 @@
ver 0.20.22 (not yet released)
* protocol
- add tag fallbacks for AlbumArtistSort, ArtistSort
- fix empty string filter on fallback tags
- "count group ..." can print an empty group
- fix broken command "list ... group"
* storage

View File

@ -110,15 +110,6 @@ SongFilter::Item::Match(const Tag &_tag) const noexcept
}
if (tag < TAG_NUM_OF_ITEM_TYPES && !visited_types[tag]) {
/* If the search critieron was not visited during the
sweep through the song's tag, it means this field
is absent from the tag or empty. Thus, if the
searched string is also empty
then it's a match as well and we should return
true. */
if (value.empty())
return true;
bool result = false;
if (ApplyTagFallback(TagType(tag),
[&](TagType tag2) {
@ -136,6 +127,15 @@ SongFilter::Item::Match(const Tag &_tag) const noexcept
return true;
}))
return result;
/* If the search critieron was not visited during the
sweep through the song's tag, it means this field
is absent from the tag or empty. Thus, if the
searched string is also empty
then it's a match as well and we should return
true. */
if (value.empty())
return true;
}
return false;