SourceInfoWidget::SourceInfoWidget( const Tomahawk::source_ptr& source, QWidget* parent ) : QWidget( parent ) , ui( new Ui::SourceInfoWidget ) , m_source( source ) { ui->setupUi( this ); TomahawkUtils::unmarginLayout( layout() ); TomahawkUtils::unmarginLayout( ui->horizontalLayout ); TomahawkUtils::unmarginLayout( ui->verticalLayout ); TomahawkUtils::unmarginLayout( ui->verticalLayout_2 ); TomahawkUtils::unmarginLayout( ui->verticalLayout_3 ); ui->splitter->setStretchFactor( 0, 0 ); ui->splitter->setStretchFactor( 1, 1 ); m_recentTracksModel = new RecentlyAddedModel( ui->recentCollectionView ); ui->recentCollectionView->proxyModel()->setStyle( PlayableProxyModel::Short ); ui->recentCollectionView->setPlayableModel( m_recentTracksModel ); ui->recentCollectionView->sortByColumn( PlayableModel::Age, Qt::DescendingOrder ); m_recentTracksModel->setSource( source ); m_historyModel = new RecentlyPlayedModel( ui->historyView ); ui->historyView->proxyModel()->setStyle( PlayableProxyModel::Short ); ui->historyView->setPlayableModel( m_historyModel ); m_historyModel->setSource( source ); m_recentAlbumModel = new AlbumModel( ui->recentAlbumView ); ui->recentAlbumView->setPlayableModel( m_recentAlbumModel ); ui->recentAlbumView->proxyModel()->sort( -1 ); onCollectionChanged(); connect( source->dbCollection().data(), SIGNAL( changed() ), SLOT( onCollectionChanged() ) ); m_title = tr( "New Additions" ); if ( source->isLocal() ) { m_description = tr( "My recent activity" ); } else { m_description = tr( "Recent activity from %1" ).arg( source->friendlyName() ); } }
void WelcomeWidget::onSourceAdded( const Tomahawk::source_ptr& source ) { connect( source->dbCollection().data(), SIGNAL( changed() ), SLOT( updateRecentAdditions() ), Qt::UniqueConnection ); }
void RecentlyAddedModel::onSourceAdded( const Tomahawk::source_ptr& source ) { connect( source->dbCollection().data(), SIGNAL( changed() ), SLOT( loadHistory() ) ); }
void DatabaseCommand_AllTracks::exec( DatabaseImpl* dbi ) { TomahawkSqlQuery query = dbi->newquery(); QList<Tomahawk::query_ptr> ql; QString m_orderToken, sourceToken; switch ( m_sortOrder ) { case 0: break; case Album: m_orderToken = "album.name, file_join.discnumber, file_join.albumpos"; break; case ModificationTime: m_orderToken = "file.mtime"; break; case AlbumPosition: m_orderToken = "file_join.discnumber, file_join.albumpos"; break; } if ( !m_collection.isNull() ) sourceToken = QString( "AND file.source %1" ).arg( m_collection->source()->isLocal() ? "IS NULL" : QString( "= %1" ).arg( m_collection->source()->id() ) ); QString albumToken; if ( m_album ) { if ( m_album->id() == 0 ) { m_artist = m_album->artist(); albumToken = QString( "AND album.id IS NULL" ); } else albumToken = QString( "AND album.id = %1" ).arg( m_album->id() ); } QString sql = QString( "SELECT file.id, artist.name, album.name, track.name, composer.name, file.size, " //0 "file.duration, file.bitrate, file.url, file.source, file.mtime, " //6 "file.mimetype, file_join.discnumber, file_join.albumpos, artist.id, " //11 "album.id, track.id, composer.id " //15 "FROM file, artist, track, file_join " "LEFT OUTER JOIN album " "ON file_join.album = album.id " "LEFT OUTER JOIN artist AS composer " "ON file_join.composer = composer.id " "WHERE file.id = file_join.file " "AND file_join.artist = artist.id " "AND file_join.track = track.id " "%1 " "%2 %3 " "%4 %5 %6" ).arg( sourceToken ) .arg( !m_artist ? QString() : QString( "AND artist.id = %1" ).arg( m_artist->id() ) ) .arg( !m_album ? QString() : albumToken ) .arg( m_sortOrder > 0 ? QString( "ORDER BY %1" ).arg( m_orderToken ) : QString() ) .arg( m_sortDescending ? "DESC" : QString() ) .arg( m_amount > 0 ? QString( "LIMIT 0, %1" ).arg( m_amount ) : QString() ); query.prepare( sql ); query.exec(); while( query.next() ) { QString url = query.value( 8 ).toString(); Tomahawk::source_ptr s = SourceList::instance()->get( query.value( 9 ).toUInt() ); if ( !s ) { Q_ASSERT( false ); continue; } if ( !s->isLocal() ) url = QString( "servent://%1\t%2" ).arg( s->nodeId() ).arg( url ); QString artist, track, album, composer; artist = query.value( 1 ).toString(); album = query.value( 2 ).toString(); track = query.value( 3 ).toString(); composer = query.value( 4 ).toString(); Tomahawk::result_ptr result = Tomahawk::Result::get( url ); Tomahawk::query_ptr qry = Tomahawk::Query::get( artist, track, album ); Tomahawk::track_ptr t = Tomahawk::Track::get( query.value( 16 ).toUInt(), artist, track, album, query.value( 6 ).toUInt(), composer, query.value( 13 ).toUInt(), query.value( 12 ).toUInt() ); t->loadAttributes(); result->setTrack( t ); result->setSize( query.value( 5 ).toUInt() ); result->setBitrate( query.value( 7 ).toUInt() ); result->setModificationTime( query.value( 10 ).toUInt() ); result->setMimetype( query.value( 11 ).toString() ); result->setScore( 1.0 ); result->setCollection( s->dbCollection() ); QList<Tomahawk::result_ptr> results; results << result; qry->addResults( results ); qry->setResolveFinished( true ); ql << qry; } emit tracks( ql, data() ); emit tracks( ql ); emit done( m_collection ); }