Пример #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 );
}