bool Dynamic::QuizPlayBias::trackMatches( int position, const Meta::TrackList& playlist, int contextCount ) const { Q_UNUSED( contextCount ); if( position <= 0 || position >= playlist.count()) return true; // -- determine the last character we need to quiz Meta::TrackPtr lastTrack = playlist[position-1]; Meta::DataPtr lastData; if( m_follow == TitleToTitle ) lastData = Meta::DataPtr::staticCast<Meta::Track>(lastTrack); else if( m_follow == ArtistToArtist ) lastData = Meta::DataPtr::staticCast<Meta::Artist>(lastTrack->artist()); else if( m_follow == AlbumToAlbum ) lastData = Meta::DataPtr::staticCast<Meta::Album>(lastTrack->album()); if( !lastData || lastData->name().isEmpty() ) return true; // -- determine the first character Meta::TrackPtr track = playlist[position]; Meta::DataPtr data; if( m_follow == TitleToTitle ) data = Meta::DataPtr::staticCast<Meta::Track>(track); else if( m_follow == ArtistToArtist ) data = Meta::DataPtr::staticCast<Meta::Artist>(track->artist()); else if( m_follow == AlbumToAlbum ) data = Meta::DataPtr::staticCast<Meta::Album>(track->album()); if( !data || data->name().isEmpty() ) return false; // -- now compare QString lastName = lastData->name(); QString name = data->name(); return lastChar( lastName ).toLower() == name[0].toLower(); }
Dynamic::TrackSet Dynamic::QuizPlayBias::matchingTracks( int position, const Meta::TrackList& playlist, int contextCount, Dynamic::TrackCollectionPtr universe ) const { Q_UNUSED( contextCount ); if( position <= 0 || position > playlist.count()) return Dynamic::TrackSet( universe, true ); // determine the last character we need to quiz Meta::TrackPtr lastTrack = playlist[position-1]; Meta::DataPtr lastData; if( m_follow == TitleToTitle ) lastData = Meta::DataPtr::staticCast<Meta::Track>(lastTrack); else if( m_follow == ArtistToArtist ) lastData = Meta::DataPtr::staticCast<Meta::Artist>(lastTrack->artist()); else if( m_follow == AlbumToAlbum ) lastData = Meta::DataPtr::staticCast<Meta::Album>(lastTrack->album()); if( !lastData || lastData->name().isEmpty() ) { // debug() << "QuizPlay: no data for"<<lastTrack->name(); return Dynamic::TrackSet( universe, true ); } m_currentCharacter = lastChar(lastData->name()).toLower(); // debug() << "QuizPlay: data for"<<lastTrack->name()<<"is"<<m_currentCharacter; // -- look if we already buffered it if( m_tracksValid && m_characterTrackMap.contains( m_currentCharacter ) ) return m_characterTrackMap.value( m_currentCharacter ); // -- start a new query m_tracks = Dynamic::TrackSet( universe, false ); QTimer::singleShot(0, const_cast<QuizPlayBias*>(this), SLOT(newQuery())); // create the new query from my parent thread return Dynamic::TrackSet(); }