1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-23 17:29:42 +01:00

* DropJob now uses the new API.

This commit is contained in:
Christian Muehlhaeuser 2012-05-28 16:12:51 +02:00
parent 0980044ef6
commit c8afb7a7c6
2 changed files with 36 additions and 172 deletions

View File

@ -32,7 +32,6 @@
#include "utils/Logger.h"
#include "utils/TomahawkUtils.h"
#include "GlobalActionManager.h"
#include "infosystem/InfoSystem.h"
#include "utils/XspfLoader.h"
#include "jobview/JobStatusView.h"
#include "jobview/JobStatusModel.h"
@ -57,7 +56,6 @@ DropJob::DropJob( QObject *parent )
, m_getWholeAlbums( false )
, m_top10( false )
, m_dropAction( Default )
, m_dropJob( 0 )
{
}
@ -294,11 +292,11 @@ DropJob::tracksFromQueryList( const QMimeData* data )
query_ptr* query = reinterpret_cast<query_ptr*>(qptr);
if ( query && !query->isNull() )
{
tDebug() << "Dropped query item:" << query->data()->artist() << "-" << query->data()->track();
tDebug() << "Dropped query item:" << query->data()->toString();
if ( m_top10 )
{
getTopTen( query->data()->artist() );
queries << getTopTen( query->data()->artist() );
}
else if ( m_getWholeArtists )
{
@ -376,7 +374,7 @@ DropJob::tracksFromAlbumMetaData( const QMimeData *data )
stream >> album;
if ( m_top10 )
getTopTen( artist );
queries << getTopTen( artist );
else if ( m_getWholeArtists )
queries << getArtist( artist );
else
@ -405,7 +403,7 @@ DropJob::tracksFromArtistMetaData( const QMimeData *data )
}
else
{
getTopTen( artist );
queries << getTopTen( artist );
}
}
return queries;
@ -569,6 +567,7 @@ DropJob::handleRdioUrls( const QString& urlsRaw )
rdio->parse( urls );
}
void
DropJob::handleGroovesharkUrls ( const QString& urlsRaw )
{
@ -594,7 +593,6 @@ DropJob::handleGroovesharkUrls ( const QString& urlsRaw )
}
void
DropJob::handleAllUrls( const QString& urls )
{
@ -672,22 +670,28 @@ DropJob::expandedUrls( QStringList urls )
void
DropJob::onTracksAdded( const QList<Tomahawk::query_ptr>& tracksList )
{
qDebug() << Q_FUNC_INFO;
if ( m_dropJob )
tDebug() << Q_FUNC_INFO << tracksList.count();
/* if ( results.isEmpty() )
{
m_dropJob->setFinished();
m_dropJob = 0;
const QString which = album.isEmpty() ? "artist" : "album";
JobStatusView::instance()->model()->addJob( new ErrorStatusMessage( tr( "No tracks found for given %1" ).arg( which ), 5 ) );
}*/
if ( !m_dropJob.isEmpty() )
{
m_dropJob.takeFirst()->setFinished();
}
m_resultList.append( tracksList );
if ( --m_queryCount == 0 )
{
if ( m_onlyLocal )
/* if ( m_onlyLocal )
removeRemoteSources();
if ( !m_allowDuplicates )
removeDuplicates();
removeDuplicates();*/
emit tracks( m_resultList );
deleteLater();
@ -695,67 +699,6 @@ DropJob::onTracksAdded( const QList<Tomahawk::query_ptr>& tracksList )
}
void
DropJob::tracksFromDB( const QList< query_ptr >& tracks )
{
// Tracks that we get from databasecommand_alltracks are resolved only against the database and explicitly marked
// as finished. if the source they resolve to is offline they will not resolve against any resolver.
// explicitly resolve them if they fall in that case first
foreach( const query_ptr& track, tracks )
{
if ( !track->playable() && !track->solved() && track->results().size() ) // we have offline results
{
track->setResolveFinished( false );
Pipeline::instance()->resolve( track );
}
}
album_ptr albumPtr;
artist_ptr artistPtr;
if ( Tomahawk::Album* album = qobject_cast< Tomahawk::Album* >( sender() ) )
{
foreach ( const album_ptr& ptr, m_albumsToKeep )
if ( ptr.data() == album )
{
albumPtr = ptr;
m_albumsToKeep.remove( ptr );
}
}
else if ( Tomahawk::Artist* artist = qobject_cast< Tomahawk::Artist* >( sender() ) )
{
foreach ( const artist_ptr& ptr, m_artistsToKeep )
if ( ptr.data() == artist )
{
artistPtr = ptr;
m_artistsToKeep.remove( ptr );
}
}
// If we have no tracks, this means no sources in our network have the give request (artist or album)
// Since we really do want to try to drop them, we ask the infosystem as well.
if ( tracks.isEmpty() )
{
if ( !albumPtr.isNull() && !albumPtr->artist().isNull() )
{
Q_ASSERT( artistPtr.isNull() );
--m_queryCount; // This query is done. New query is infosystem query
getAlbumFromInfoystem( albumPtr->artist()->name(), albumPtr->name() );
}
else if ( !artistPtr.isNull() )
{
Q_ASSERT( albumPtr.isNull() );
--m_queryCount;
getTopTen( artistPtr->name() );
}
}
else
{
onTracksAdded( tracks );
}
}
void
DropJob::removeDuplicates()
{
@ -803,41 +746,8 @@ DropJob::removeRemoteSources()
}
void
DropJob::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output )
{
if ( requestData.caller == s_dropJobInfoId )
{
const Tomahawk::InfoSystem::InfoStringHash info = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >();
const QString artist = info["artist"];
const QString album = info["album"];
qDebug() << "Got requestData response for artist" << artist << "and album:" << album << output;
QList< query_ptr > results;
int i = 0;
foreach ( const QVariant& title, output.toMap().value( "tracks" ).toList() )
{
results << Query::get( artist, title.toString(), QString(), uuid() );
if ( ++i == 10 ) // Only getting top ten for now. Would make sense to make it configurable
break;
}
if ( results.isEmpty() )
{
const QString which = album.isEmpty() ? "artist" : "album";
JobStatusView::instance()->model()->addJob( new ErrorStatusMessage( tr( "No tracks found for given %1" ).arg( which ), 5 ) );
}
onTracksAdded( results );
}
}
QList< query_ptr >
DropJob::getArtist( const QString &artist )
DropJob::getArtist( const QString &artist, Tomahawk::ModelMode mode )
{
artist_ptr artistPtr = Artist::get( artist );
if ( artistPtr->playlistInterface( Mixed )->tracks().isEmpty() )
@ -845,13 +755,15 @@ DropJob::getArtist( const QString &artist )
m_artistsToKeep.insert( artistPtr );
connect( artistPtr.data(), SIGNAL( tracksAdded( QList<Tomahawk::query_ptr>, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ),
SLOT( tracksFromDB( QList<Tomahawk::query_ptr> ) ) );
SLOT( onTracksAdded( QList<Tomahawk::query_ptr> ) ) );
m_dropJob << new DropJobNotifier( QPixmap( RESPATH "images/album-icon.png" ), Album );
JobStatusView::instance()->model()->addJob( m_dropJob.last() );
m_queryCount++;
return QList< query_ptr >();
}
else
return artistPtr->playlistInterface( Mixed )->tracks();
return artistPtr->playlistInterface( Mixed )->tracks();
}
@ -872,62 +784,21 @@ DropJob::getAlbum( const QString& artist, const QString& album )
// the artist_ptr which means we never get the signal delivered. so we hold on to the album pointer till we're done
m_albumsToKeep.insert( albumPtr );
m_dropJob = new DropJobNotifier( QPixmap( RESPATH "images/album-icon.png" ), Album );
connect( albumPtr.data(), SIGNAL( tracksAdded( QList<Tomahawk::query_ptr>, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ),
SLOT( tracksFromDB( QList<Tomahawk::query_ptr> ) ) );
JobStatusView::instance()->model()->addJob( m_dropJob );
SLOT( onTracksAdded( QList<Tomahawk::query_ptr> ) ) );
m_dropJob << new DropJobNotifier( QPixmap( RESPATH "images/album-icon.png" ), Album );
JobStatusView::instance()->model()->addJob( m_dropJob.last() );
m_queryCount++;
return QList< query_ptr >();
}
else
return albumPtr->playlistInterface( Mixed )->tracks();
return albumPtr->playlistInterface( Mixed )->tracks();
}
void
DropJob::getTopTen( const QString &artist )
QList< query_ptr >
DropJob::getTopTen( const QString& artist )
{
connect( Tomahawk::InfoSystem::InfoSystem::instance(),
SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ),
SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) );
Tomahawk::InfoSystem::InfoStringHash artistInfo;
artistInfo["artist"] = artist;
Tomahawk::InfoSystem::InfoRequestData requestData;
requestData.caller = s_dropJobInfoId;
requestData.customData = QVariantMap();
requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( artistInfo );
requestData.type = Tomahawk::InfoSystem::InfoArtistSongs;
Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData );
m_queryCount++;
return getArtist( artist, Tomahawk::InfoSystemMode );
}
void
DropJob::getAlbumFromInfoystem( const QString& artist, const QString& album )
{
connect( Tomahawk::InfoSystem::InfoSystem::instance(),
SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ),
SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) );
Tomahawk::InfoSystem::InfoStringHash artistInfo;
artistInfo["artist"] = artist;
artistInfo["album"] = album;
Tomahawk::InfoSystem::InfoRequestData requestData;
requestData.caller = s_dropJobInfoId;
requestData.customData = QVariantMap();
requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( artistInfo );
requestData.type = Tomahawk::InfoSystem::InfoAlbumSongs;
Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData );
m_queryCount++;
}

View File

@ -22,9 +22,6 @@
#include "Query.h"
#include "infosystem/InfoSystem.h"
#include "utils/XspfLoader.h"
#include <QObject>
#include <QStringList>
#include <QMimeData>
@ -120,9 +117,7 @@ signals:
private slots:
void expandedUrls( QStringList );
void onTracksAdded( const QList<Tomahawk::query_ptr>& );
void infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output );
void tracksFromDB( const QList< Tomahawk::query_ptr >& );
private:
/// handle parsing mime data
void handleAllUrls( const QString& urls );
@ -133,11 +128,9 @@ private:
QList< Tomahawk::query_ptr > tracksFromAlbumMetaData( const QMimeData* d );
QList< Tomahawk::query_ptr > tracksFromMixedData( const QMimeData* d );
QList< Tomahawk::query_ptr > getArtist( const QString& artist );
QList< Tomahawk::query_ptr > getArtist( const QString& artist, Tomahawk::ModelMode mode = Tomahawk::Mixed );
QList< Tomahawk::query_ptr > getAlbum( const QString& artist, const QString& album );
void getTopTen( const QString& artist );
void getAlbumFromInfoystem( const QString& artist, const QString& album );
QList< Tomahawk::query_ptr > getTopTen( const QString& artist );
void removeDuplicates();
void removeRemoteSources();
@ -151,7 +144,7 @@ private:
DropTypes m_dropTypes;
DropAction m_dropAction;
Tomahawk::DropJobNotifier* m_dropJob;
QList<Tomahawk::DropJobNotifier*> m_dropJob;
QList< Tomahawk::query_ptr > m_resultList;
QSet< Tomahawk::album_ptr > m_albumsToKeep;