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 ); }
TrackList ArtistMatcher::match( const TrackList &tracks ) { if( !m_artist ) return TrackList(); TrackList matchingTracks; QString name = m_artist->name(); foreach( TrackPtr track, tracks ) switch( m_queryMode ) { case Collections::QueryMaker::AlbumOrTrackArtists: case Collections::QueryMaker::AlbumArtists: if( track->album()->hasAlbumArtist() && track->album()->albumArtist()->name() == name ) matchingTracks.append( track ); if( m_queryMode != Collections::QueryMaker::AlbumOrTrackArtists ) break; case Collections::QueryMaker::TrackArtists: if( track->artist()->name() == name ) matchingTracks.append( track ); } if( isLast() || matchingTracks.isEmpty() ) return matchingTracks; else return next()->match( matchingTracks ); }