void SpotifySearchProvider::SearchFinishedSlot(const pb::spotify::SearchResponse& response) { QString query_string = QString::fromUtf8(response.request().query().c_str()); QMap<QString, PendingState>::iterator it = queries_.find(query_string); if (it == queries_.end()) return; PendingState state = it.value(); queries_.erase(it); ResultList ret; for (int i=0; i < response.result_size() ; ++i) { const pb::spotify::Track& track = response.result(i); Result result(this); result.type_ = globalsearch::Type_Track; SpotifyService::SongFromProtobuf(track, &result.metadata_); result.match_quality_ = MatchQuality(state.tokens_, result.metadata_.title()); ret << result; } for (int i=0 ; i<response.album_size() ; ++i) { const pb::spotify::Album& album = response.album(i); Result result(this); result.type_ = globalsearch::Type_Album; SpotifyService::SongFromProtobuf(album.metadata(), &result.metadata_); result.match_quality_ = qMin(MatchQuality(state.tokens_, result.metadata_.album()), MatchQuality(state.tokens_, result.metadata_.artist())); result.album_size_ = album.metadata().track(); for (int j=0; j < album.track_size() ; ++j) { Song track_song; SpotifyService::SongFromProtobuf(album.track(j), &track_song); result.album_songs_ << track_song; } ret << result; } emit ResultsAvailable(state.orig_id_, ret); emit SearchFinished(state.orig_id_); }
SearchProvider::ResultList IcecastSearchProvider::Search(int id, const QString& query) { IcecastBackend::StationList stations = backend_->GetStations(query); ResultList ret; const QStringList tokens = TokenizeQuery(query); foreach (const IcecastBackend::Station& station, stations) { if (ret.count() > 3) break; Result result(this); result.type_ = globalsearch::Type_Stream; result.metadata_ = station.ToSong(); result.match_quality_ = MatchQuality(tokens, station.name); ret << result; } return ret; }