TrackList ArtistMatcher::match( Collections::MemoryCollection *memColl ) { if( !m_artist || !memColl ) return TrackList(); if( !memColl->artistMap().contains( m_artist->name() ) ) return TrackList(); ArtistPtr artist = memColl->artistMap().value( m_artist->name() ); TrackList matchingTracks; switch( m_queryMode ) { case Collections::QueryMaker::AlbumOrTrackArtists: case Collections::QueryMaker::AlbumArtists: foreach( AlbumPtr album, memColl->albumMap().values() ) if( album->albumArtist() == artist ) matchingTracks.append( album->tracks() ); if( m_queryMode != Collections::QueryMaker::AlbumOrTrackArtists ) break; case Collections::QueryMaker::TrackArtists: matchingTracks.append( artist->tracks() ); } if( isLast() || matchingTracks.isEmpty() ) return matchingTracks; else return next()->match( matchingTracks ); }