QList< Tomahawk::query_ptr > AlbumPlaylistInterface::tracks() const { if ( m_queries.isEmpty() && m_album && QDateTime::currentMSecsSinceEpoch() - m_lastQueryTimestamp > 10000 /*10s*/ ) { if ( ( m_mode == Mixed || m_mode == InfoSystemMode ) && !m_infoSystemLoaded ) { Tomahawk::InfoSystem::InfoStringHash artistInfo; artistInfo["artist"] = m_album.data()->artist()->name(); artistInfo["album"] = m_album.data()->name(); Tomahawk::InfoSystem::InfoRequestData requestData; requestData.caller = id(); requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( artistInfo ); requestData.type = Tomahawk::InfoSystem::InfoAlbumSongs; requestData.timeoutMillis = 0; requestData.allSources = true; Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) ); connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( finished( QString ) ), SLOT( infoSystemFinished( QString ) ) ); const_cast< int& >( m_lastQueryTimestamp ) = QDateTime::currentMSecsSinceEpoch(); } else if ( m_mode == DatabaseMode && !m_databaseLoaded && !isFinished() ) { if ( m_collection.isNull() ) //we do a dbcmd directly, for the SuperCollection I guess? { DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks( m_collection ); cmd->setAlbum( m_album->weakRef() ); cmd->setSortOrder( DatabaseCommand_AllTracks::AlbumPosition ); connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr>, QVariant ) ), SLOT( onTracksLoaded( QList<Tomahawk::query_ptr> ) ) ); Database::instance()->enqueue( Tomahawk::dbcmd_ptr( cmd ) ); } else { Tomahawk::album_ptr ap = Album::get( m_album->id(), m_album->name(), m_album->artist() ); Tomahawk::TracksRequest* cmd = m_collection->requestTracks( ap ); connect( dynamic_cast< QObject* >( cmd ), SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( onTracksLoaded( QList<Tomahawk::query_ptr> ) ), Qt::UniqueConnection ); cmd->enqueue(); } const_cast< int& >( m_lastQueryTimestamp ) = QDateTime::currentMSecsSinceEpoch(); } } return m_queries; }
Tomahawk::TracksRequest* DatabaseCollection::requestTracks( const Tomahawk::album_ptr& album ) { //FIXME: assuming there's only one dbcollection per source, and that this is the one Tomahawk::collection_ptr thisCollection = source()->dbCollection(); if ( thisCollection->name() != this->name() ) return 0; DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks( thisCollection ); cmd->setAlbum( album->weakRef() ); cmd->setSortOrder( DatabaseCommand_AllTracks::AlbumPosition ); return cmd; }
QList<Tomahawk::query_ptr> Album::tracks() { if ( m_queries.isEmpty() ) { DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks(); cmd->setAlbum( this ); cmd->setSortOrder( DatabaseCommand_AllTracks::AlbumPosition ); connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr>, QVariant ) ), SLOT( onTracksAdded( QList<Tomahawk::query_ptr> ) ) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) ); } return m_queries; }
QList< Tomahawk::query_ptr > AlbumPlaylistInterface::tracks() const { if ( m_queries.isEmpty() && m_album ) { if ( ( m_mode == Mixed || m_mode == InfoSystemMode ) && !m_infoSystemLoaded ) { Tomahawk::InfoSystem::InfoStringHash artistInfo; artistInfo["artist"] = m_album.data()->artist()->name(); artistInfo["album"] = m_album.data()->name(); Tomahawk::InfoSystem::InfoRequestData requestData; requestData.caller = id(); requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( artistInfo ); requestData.type = Tomahawk::InfoSystem::InfoAlbumSongs; requestData.timeoutMillis = 0; requestData.allSources = true; Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) ); connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( finished( QString ) ), SLOT( infoSystemFinished( QString ) ) ); } else if ( m_mode == DatabaseMode && !m_databaseLoaded ) { DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks( m_collection ); cmd->setAlbum( m_album->weakRef() ); cmd->setSortOrder( DatabaseCommand_AllTracks::AlbumPosition ); connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr>, QVariant ) ), SLOT( onTracksLoaded( QList<Tomahawk::query_ptr> ) ) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) ); } } return m_queries; }