void WhatsHotWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ) { if ( requestData.caller != s_whatsHotIdentifier ) return; if ( output.isNull() ) { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Info came back empty"; return; } if ( !output.canConvert< QVariantMap >() ) { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "WhatsHot: Could not parse output into a map"; return; } QVariantMap returnedData = output.toMap(); switch ( requestData.type ) { case InfoSystem::InfoChartCapabilities: { setViewData( returnedData ); } case InfoSystem::InfoChart: { if ( returnedData.contains( "chart_error" ) ) { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Info came back with error!"; Tomahawk::InfoSystem::InfoStringHash criteria; criteria.insert( "chart_refetch", returnedData[ "chart_source" ].value< QString >() ); Tomahawk::InfoSystem::InfoRequestData requestData; requestData.caller = s_whatsHotIdentifier; requestData.customData = QVariantMap(); requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( criteria ); requestData.type = Tomahawk::InfoSystem::InfoChartCapabilities; requestData.timeoutMillis = 20000; requestData.allSources = false; Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); tDebug( LOGVERBOSE ) << "WhatsHot: re-requesting InfoChartCapabilities"; break; } if ( !returnedData.contains( "type" ) ) break; const QString type = returnedData[ "type" ].toString(); if ( !returnedData.contains( type ) ) break; const QString chartId = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >().value( "chart_id" ); m_queuedFetches.remove( chartId ); ChartDataLoader* loader = new ChartDataLoader(); loader->setProperty( "chartid", chartId ); loader->moveToThread( m_workerThread ); if ( type == "artists" ) { loader->setType( ChartDataLoader::Artist ); loader->setData( returnedData[ "artists" ].value< QStringList >() ); connect( loader, SIGNAL( artists( Tomahawk::ChartDataLoader*, QList< Tomahawk::artist_ptr > ) ), SLOT( chartArtistsLoaded( Tomahawk::ChartDataLoader*, QList< Tomahawk::artist_ptr > ) ) ); TreeModel* artistsModel = new TreeModel( ui->artistsViewLeft ); artistsModel->setMode( InfoSystemMode ); artistsModel->startLoading(); m_artistModels[ chartId ] = artistsModel; if ( m_queueItemToShow == chartId ) setLeftViewArtists( artistsModel ); } else if ( type == "albums" ) { loader->setType( ChartDataLoader::Album ); loader->setData( returnedData[ "albums" ].value< QList< Tomahawk::InfoSystem::InfoStringHash > >() ); connect( loader, SIGNAL( albums( Tomahawk::ChartDataLoader*, QList< Tomahawk::album_ptr > ) ), SLOT( chartAlbumsLoaded( Tomahawk::ChartDataLoader*, QList< Tomahawk::album_ptr > ) ) ); PlayableModel* albumModel = new PlayableModel( ui->albumsView ); albumModel->startLoading(); m_albumModels[ chartId ] = albumModel; if ( m_queueItemToShow == chartId ) setLeftViewAlbums( albumModel ); } else if ( type == "tracks" ) { loader->setType( ChartDataLoader::Track ); loader->setData( returnedData[ "tracks" ].value< QList< Tomahawk::InfoSystem::InfoStringHash > >() ); connect( loader, SIGNAL( tracks( Tomahawk::ChartDataLoader*, QList< Tomahawk::query_ptr > ) ), SLOT( chartTracksLoaded( Tomahawk::ChartDataLoader*, QList< Tomahawk::query_ptr > ) ) ); PlaylistModel* trackModel = new PlaylistModel( ui->tracksViewLeft ); trackModel->startLoading(); m_trackModels[ chartId ] = trackModel; if ( m_queueItemToShow == chartId ) setLeftViewTracks( trackModel ); } QMetaObject::invokeMethod( loader, "go", Qt::QueuedConnection ); break; } default: return; } }
void NewReleasesWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ) { if ( requestData.caller != s_newReleasesIdentifier ) return; if ( !output.canConvert< QVariantMap >() ) { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "NewReleases: Could not parse output"; return; } QVariantMap returnedData = output.toMap(); switch ( requestData.type ) { case InfoSystem::InfoNewReleaseCapabilities: { tLog() << "NewReleases: got InfoNewReleaseCapabilities"; QStandardItem *rootItem= m_crumbModelLeft->invisibleRootItem(); foreach ( const QString label, returnedData.keys() ) { QStandardItem *childItem = parseNode( rootItem, label, returnedData[label] ); rootItem->appendRow(childItem); tLog() << "NewReleases: " << label; } m_sortedProxy->setSourceModel( m_crumbModelLeft ); m_sortedProxy->sort( 0, Qt::AscendingOrder ); ui->breadCrumbLeft->setModel( m_sortedProxy ); break; } case InfoSystem::InfoNewRelease: { if( !returnedData.contains("type") ) break; const QString type = returnedData["type"].toString(); if( !returnedData.contains(type) ) break; const QString side = requestData.customData["whatshot_side"].toString(); const QString releaseId = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >().value( "nr_id" ); m_queuedFetches.remove( releaseId ); ChartDataLoader* loader = new ChartDataLoader(); loader->setProperty( "nrid", releaseId ); loader->moveToThread( m_workerThread ); if ( type == "albums" ) { loader->setType( ChartDataLoader::Album ); loader->setData( returnedData[ "albums" ].value< QList< Tomahawk::InfoSystem::InfoStringHash > >() ); connect( loader, SIGNAL( albums( Tomahawk::ChartDataLoader*, QList< Tomahawk::album_ptr > ) ), this, SLOT( newReleasesLoaded( Tomahawk::ChartDataLoader*, QList<Tomahawk::album_ptr> ) ) ); AlbumModel* albumModel = new AlbumModel( ui->albumsView ); m_albumModels[ releaseId ] = albumModel; if ( m_queueItemToShow == releaseId ) setLeftViewAlbums( albumModel ); } else { // intentionally unhandled } QMetaObject::invokeMethod( loader, "go", Qt::QueuedConnection ); break; }
void WhatsHotWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ) { if ( requestData.caller != s_whatsHotIdentifier ) return; if ( !output.canConvert< QVariantMap >() ) { tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "WhatsHot: Could not parse output"; return; } QVariantMap returnedData = output.toMap(); switch ( requestData.type ) { case InfoSystem::InfoChartCapabilities: { QStandardItem *rootItem= m_crumbModelLeft->invisibleRootItem(); QVariantMap defaults; if ( returnedData.contains( "defaults" ) ) defaults = returnedData.take( "defaults" ).toMap(); QString defaultSource = returnedData.take( "defaultSource" ).toString(); foreach ( const QString label, returnedData.keys() ) { QStandardItem *childItem = parseNode( rootItem, label, returnedData[label] ); rootItem->appendRow(childItem); } // Set the default source // Set the default chart for each source for ( int i = 0; i < rootItem->rowCount(); i++ ) { QStandardItem* source = rootItem->child( i, 0 ); if ( defaultSource.toLower() == source->text().toLower() ) { source->setData( true, Breadcrumb::DefaultRole ); } if ( defaults.contains( source->text().toLower() ) ) { QStringList defaultIndices = defaults[ source->text().toLower() ].toStringList(); QStandardItem* cur = source; foreach( const QString& index, defaultIndices ) { // Go through the children of the current item, marking the default one as default for ( int k = 0; k < cur->rowCount(); k++ ) { if ( cur->child( k, 0 )->text() == index ) { cur = cur->child( k, 0 ); // this is the default, drill down into the default to pick the next default cur->setData( true, Breadcrumb::DefaultRole ); break; } } } } } m_sortedProxy->setSourceModel( m_crumbModelLeft ); m_sortedProxy->sort( 0, Qt::AscendingOrder ); ui->breadCrumbLeft->setModel( m_sortedProxy ); break; } case InfoSystem::InfoChart: { if( !returnedData.contains("type") ) break; const QString type = returnedData["type"].toString(); if( !returnedData.contains(type) ) break; const QString side = requestData.customData["whatshot_side"].toString(); const QString chartId = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >().value( "chart_id" ); m_queuedFetches.remove( chartId ); ChartDataLoader* loader = new ChartDataLoader(); loader->setProperty( "chartid", chartId ); loader->moveToThread( m_workerThread ); if ( type == "artists" ) { loader->setType( ChartDataLoader::Artist ); loader->setData( returnedData[ "artists" ].value< QStringList >() ); connect( loader, SIGNAL( artists( Tomahawk::ChartDataLoader*, QList< Tomahawk::artist_ptr > ) ), this, SLOT( chartArtistsLoaded( Tomahawk::ChartDataLoader*, QList< Tomahawk::artist_ptr > ) ) ); TreeModel* artistsModel = new TreeModel( ui->artistsViewLeft ); artistsModel->setMode( InfoSystemMode ); artistsModel->setColumnStyle( TreeModel::AllColumns ); m_artistModels[ chartId ] = artistsModel; if ( m_queueItemToShow == chartId ) setLeftViewArtists( artistsModel ); } else if ( type == "albums" )