void Source::onPlaybackStarted( const Tomahawk::query_ptr& query ) { qDebug() << Q_FUNC_INFO << query->toString(); m_currentTrack = query; emit playbackStarted( query ); }
void Source::onPlaybackFinished( const Tomahawk::query_ptr& query ) { qDebug() << Q_FUNC_INFO << query->toString(); emit playbackFinished( query ); m_currentTrackTimer.start(); }
void ScriptEngine::resolve( const Tomahawk::query_ptr& query ) { qDebug() << Q_FUNC_INFO << query->toString(); QString eval = QString( "resolve( '%1', '%2', '%3', '%4' );" ) .arg( query->id().replace( "'", "\\'" ) ) .arg( query->artist().replace( "'", "\\'" ) ) .arg( query->album().replace( "'", "\\'" ) ) .arg( query->track().replace( "'", "\\'" ) ); QList< Tomahawk::result_ptr > results; QVariantMap m = mainFrame()->evaluateJavaScript( eval ).toMap(); qDebug() << "JavaScript Result:" << m; const QString qid = query->id(); const QVariantList reslist = m.value( "results" ).toList(); foreach( const QVariant& rv, reslist ) { QVariantMap m = rv.toMap(); qDebug() << "RES" << m; Tomahawk::result_ptr rp( new Tomahawk::Result() ); Tomahawk::artist_ptr ap = Tomahawk::Artist::get( 0, m.value( "artist" ).toString() ); rp->setArtist( ap ); rp->setAlbum( Tomahawk::Album::get( 0, m.value( "album" ).toString(), ap ) ); rp->setTrack( m.value( "track" ).toString() ); rp->setBitrate( m.value( "bitrate" ).toUInt() ); rp->setUrl( m.value( "url" ).toString() ); rp->setSize( m.value( "size" ).toUInt() ); rp->setScore( m.value( "score" ).toFloat() * ( (float)m_parent->weight() / 100.0 ) ); rp->setRID( uuid() ); rp->setFriendlySource( m_parent->name() ); if ( m.contains( "year" ) ) { QVariantMap attr; attr[ "releaseyear" ] = m.value( "year" ); rp->setAttributes( attr ); } rp->setDuration( m.value( "duration", 0 ).toUInt() ); if ( rp->duration() <= 0 && m.contains( "durationString" ) ) { QTime time = QTime::fromString( m.value( "durationString" ).toString(), "hh:mm:ss" ); rp->setDuration( time.secsTo( QTime( 0, 0 ) ) * -1 ); } rp->setMimetype( m.value( "mimetype" ).toString() ); if ( rp->mimetype().isEmpty() ) { rp->setMimetype( TomahawkUtils::extensionToMimetype( m.value( "extension" ).toString() ) ); Q_ASSERT( !rp->mimetype().isEmpty() ); } results << rp; }
void Source::onPlaybackFinished( const Tomahawk::query_ptr& query ) { tDebug() << Q_FUNC_INFO << query->toString(); emit playbackFinished( query ); m_currentTrack.clear(); emit stateChanged(); }
void Source::onPlaybackStarted( const Tomahawk::query_ptr& query, unsigned int duration ) { qDebug() << Q_FUNC_INFO << query->toString(); m_currentTrack = query; m_currentTrackTimer.start( duration * 1000 + 900000 ); // duration comes in seconds if ( m_playlistInterface.isNull() ) getPlaylistInterface(); emit playbackStarted( query ); }
QMap< int, float > FuzzyIndex::search( const Tomahawk::query_ptr& query ) { QMutexLocker lock( &m_mutex ); QMap< int, float > resultsmap; try { if ( !m_luceneReader ) { if ( !IndexReader::indexExists( m_luceneDir ) ) { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "index didn't exist."; return resultsmap; } m_luceneReader = IndexReader::open( m_luceneDir ); m_luceneSearcher = newLucene<IndexSearcher>( m_luceneReader ); } float minScore; Collection<String> fields; // = newCollection<String>(); MultiFieldQueryParserPtr parser = newLucene<MultiFieldQueryParser>( LuceneVersion::LUCENE_CURRENT, fields, m_analyzer ); BooleanQueryPtr qry = newLucene<BooleanQuery>(); if ( query->isFullTextQuery() ) { QString q = Tomahawk::DatabaseImpl::sortname( query->fullTextQuery() ); FuzzyQueryPtr fqry = newLucene<FuzzyQuery>( newLucene<Term>( L"track", q.toStdWString() ) ); qry->add( boost::dynamic_pointer_cast<Query>( fqry ), BooleanClause::SHOULD ); FuzzyQueryPtr fqry2 = newLucene<FuzzyQuery>( newLucene<Term>( L"artist", q.toStdWString() ) ); qry->add( boost::dynamic_pointer_cast<Query>( fqry2 ), BooleanClause::SHOULD ); FuzzyQueryPtr fqry3 = newLucene<FuzzyQuery>( newLucene<Term>( L"fulltext", q.toStdWString() ) ); qry->add( boost::dynamic_pointer_cast<Query>( fqry3 ), BooleanClause::SHOULD ); minScore = 0.00; } else { QString track = Tomahawk::DatabaseImpl::sortname( query->queryTrack()->track() ); QString artist = Tomahawk::DatabaseImpl::sortname( query->queryTrack()->artist() ); //QString album = Tomahawk::DatabaseImpl::sortname( query->queryTrack()->album() ); FuzzyQueryPtr fqry = newLucene<FuzzyQuery>( newLucene<Term>( L"track", track.toStdWString() ) ); qry->add( boost::dynamic_pointer_cast<Query>( fqry ), BooleanClause::MUST ); FuzzyQueryPtr fqry2 = newLucene<FuzzyQuery>( newLucene<Term>( L"artist", artist.toStdWString() ) ); qry->add( boost::dynamic_pointer_cast<Query>( fqry2 ), BooleanClause::MUST ); minScore = 0.00; } TopScoreDocCollectorPtr collector = TopScoreDocCollector::create( 50, false ); m_luceneSearcher->search( qry, collector ); Collection<ScoreDocPtr> hits = collector->topDocs()->scoreDocs; for ( int i = 0; i < collector->getTotalHits() && i < 50; i++ ) { DocumentPtr d = m_luceneSearcher->doc( hits[i]->doc ); float score = hits[i]->score; int id = QString::fromStdWString( d->get( L"trackid" ) ).toInt(); if ( score > minScore ) { resultsmap.insert( id, score ); // tDebug() << "Index hit:" << id << score << QString::fromWCharArray( ((Query*)qry)->toString() ); } } } catch( LuceneException& error ) { tDebug() << "Caught Lucene error:" << error.what() << query->toString(); QTimer::singleShot( 0, this, SLOT( wipeIndex() ) ); } return resultsmap; }
QMap< int, float > FuzzyIndex::search( const Tomahawk::query_ptr& query ) { // QMutexLocker lock( &m_mutex ); QMap< int, float > resultsmap; if ( !m_luceneReader || !m_luceneSearcher ) return resultsmap; try { // float minScore = 0.00; Collection<String> fields; // = newCollection<String>(); MultiFieldQueryParserPtr parser = newLucene<MultiFieldQueryParser>( LuceneVersion::LUCENE_CURRENT, fields, m_analyzer ); BooleanQueryPtr qry = newLucene<BooleanQuery>(); if ( query->isFullTextQuery() ) { const QString q = Tomahawk::DatabaseImpl::sortname( query->fullTextQuery() ); FuzzyQueryPtr fqry = newLucene<FuzzyQuery>( newLucene<Term>( L"track", q.toStdWString() ) ); qry->add( boost::dynamic_pointer_cast<Query>( fqry ), BooleanClause::SHOULD ); FuzzyQueryPtr fqry2 = newLucene<FuzzyQuery>( newLucene<Term>( L"artist", q.toStdWString() ) ); qry->add( boost::dynamic_pointer_cast<Query>( fqry2 ), BooleanClause::SHOULD ); FuzzyQueryPtr fqry3 = newLucene<FuzzyQuery>( newLucene<Term>( L"fulltext", q.toStdWString() ) ); qry->add( boost::dynamic_pointer_cast<Query>( fqry3 ), BooleanClause::SHOULD ); } else { const QString track = Tomahawk::DatabaseImpl::sortname( query->queryTrack()->track() ); const QString artist = Tomahawk::DatabaseImpl::sortname( query->queryTrack()->artist() ); //QString album = Tomahawk::DatabaseImpl::sortname( query->queryTrack()->album() ); FuzzyQueryPtr fqry = newLucene<FuzzyQuery>( newLucene<Term>( L"track", track.toStdWString() ), 0.5, 3 ); qry->add( boost::dynamic_pointer_cast<Query>( fqry ), BooleanClause::MUST ); FuzzyQueryPtr fqry2 = newLucene<FuzzyQuery>( newLucene<Term>( L"artist", artist.toStdWString() ), 0.5, 3 ); qry->add( boost::dynamic_pointer_cast<Query>( fqry2 ), BooleanClause::MUST ); } TopScoreDocCollectorPtr collector = TopScoreDocCollector::create( 20, true ); m_luceneSearcher->search( qry, collector ); Collection<ScoreDocPtr> hits = collector->topDocs()->scoreDocs; for ( int i = 0; i < collector->getTotalHits() && i < 20; i++ ) { DocumentPtr d = m_luceneSearcher->doc( hits[i]->doc ); const float score = hits[i]->score; const int id = QString::fromStdWString( d->get( L"trackid" ) ).toInt(); // if ( score > minScore ) { resultsmap.insert( id, score ); // tDebug() << "Index hit:" << id << score << QString::fromWCharArray( ((Query*)qry)->toString() ); } } } catch( LuceneException& error ) { tDebug() << "Caught Lucene error:" << QString::fromWCharArray( error.getError().c_str() ) << query->toString(); } return resultsmap; }