aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/SongFilter.cxx30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/SongFilter.cxx b/src/SongFilter.cxx
index c0404406d..4b8ae20ba 100644
--- a/src/SongFilter.cxx
+++ b/src/SongFilter.cxx
@@ -94,15 +94,27 @@ SongFilter::Item::Match(const Tag &_tag) const
return true;
}
- /** 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 (first char is a \0), then it's a match as well and
- * we should return true.
- */
- if (*value == 0 && tag < TAG_NUM_OF_ITEM_TYPES &&
- !visited_types[tag])
- return true;
+ 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 (first char is a \0),
+ then it's a match as well and we should return
+ true. */
+ if (*value == 0)
+ return true;
+
+ if (tag == TAG_ALBUM_ARTIST && visited_types[TAG_ARTIST]) {
+ /* if we're looking for "album artist", but
+ only "artist" exists, use that */
+ for (unsigned i = 0; i < _tag.num_items; i++) {
+ const TagItem &item = *_tag.items[i];
+ if (item.type == TAG_ARTIST &&
+ StringMatch(item.value))
+ return true;
+ }
+ }
+ }
return false;
}