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 ); }
TrackList TrackMatcher::match( Collections::MemoryCollection *memColl ) { if( !m_track || !memColl ) return TrackList(); TrackMap trackMap = memColl->trackMap(); TrackList result; if ( trackMap.contains( m_track->uidUrl() ) ) result.append( trackMap.value( m_track->uidUrl() ) ); return result; //checking for another matcher is not necessary }
TrackList TrackMatcher::match( const TrackList &tracks ) { if( !m_track ) return TrackList(); TrackList result; QString url = m_track->uidUrl(); foreach( TrackPtr track, tracks ) if ( track->uidUrl() == url ) { result.append( track ); break; } return result; //checking for another matcher is not necessary }
TrackList YearMatcher::match( const TrackList &tracks ) { if( !m_year ) return TrackList(); TrackList matchingTracks; int year = m_year->year(); foreach( TrackPtr track, tracks ) if ( track->year()->year() == year ) matchingTracks.append( track ); if ( isLast() || matchingTracks.count() == 0) return matchingTracks; else return next()->match( matchingTracks ); }
TrackList ComposerMatcher::match( const TrackList &tracks ) { if( !m_composer ) return TrackList(); TrackList matchingTracks; QString name = m_composer->name(); foreach( TrackPtr track, tracks ) if ( track->composer()->name() == name ) matchingTracks.append( track ); if ( isLast() || matchingTracks.count() == 0) return matchingTracks; else return next()->match( matchingTracks ); }