Example #1
0
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 );
}
Example #2
0
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 );
}