diff options
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | src/SongFilter.cxx | 30 |
2 files changed, 22 insertions, 9 deletions
@@ -3,6 +3,7 @@ ver 0.18 (2012/??/??) - allow tilde paths for socket * protocol: - new command "toggleoutput" + - search for album artist falls back to the artist tag * innput: - curl: enable https - soup: plugin removed 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; } |