From f23af07f6ac60e50f32f510699d9b240caf72066 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Sun, 2 Oct 2011 19:54:10 -0400 Subject: [PATCH] TWK-393: Play immediately when dropping something onto audiocontrols --- src/audiocontrols.cpp | 5 +-- src/libtomahawk/globalactionmanager.cpp | 41 ++++++++++++++++++++----- src/libtomahawk/globalactionmanager.h | 2 ++ 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/audiocontrols.cpp b/src/audiocontrols.cpp index a2fa864c5..0050f8ac5 100644 --- a/src/audiocontrols.cpp +++ b/src/audiocontrols.cpp @@ -538,6 +538,7 @@ AudioControls::dropEvent( QDropEvent* e ) if ( DropJob::acceptsMimeData( e->mimeData() ) ) { DropJob *dj = new DropJob(); + dj->setDropAction( DropJob::Append ); connect( dj, SIGNAL( tracks( QList ) ), this, SLOT( droppedTracks( QList ) ) ); dj->tracksFromMimeData( e->mimeData() ); @@ -551,8 +552,8 @@ AudioControls::droppedTracks( QList< query_ptr > tracks ) { if ( !tracks.isEmpty() ) { - // queue and play the first if nothign is playing - GlobalActionManager::instance()->handleOpenTrack( tracks.first() ); + // queue and play the first no matter what + GlobalActionManager::instance()->handlePlayTrack( tracks.first() ); // just queue the rest for ( int i = 1; i < tracks.size(); i++ ) diff --git a/src/libtomahawk/globalactionmanager.cpp b/src/libtomahawk/globalactionmanager.cpp index 2baa8920f..833eae16e 100644 --- a/src/libtomahawk/globalactionmanager.cpp +++ b/src/libtomahawk/globalactionmanager.cpp @@ -363,6 +363,13 @@ GlobalActionManager::handleOpenTrack ( const query_ptr& q ) } } +void +GlobalActionManager::handlePlayTrack( const query_ptr& qry ) +{ + playNow( qry ); +} + + bool GlobalActionManager::handleQueueCommand( const QUrl& url ) @@ -697,11 +704,8 @@ GlobalActionManager::handlePlayCommand( const QUrl& url ) query_ptr q = Query::get( artist, title, album ); if( !urlStr.isEmpty() ) q->setResultHint( urlStr ); - Pipeline::instance()->resolve( q, true ); - - m_waitingToPlay = q; - connect( q.data(), SIGNAL( resolvingFinished( bool ) ), this, SLOT( waitingForResolved( bool ) ) ); + playNow( q ); return true; } @@ -717,14 +721,25 @@ GlobalActionManager::playSpotify( const QUrl& url ) QString spotifyUrl = url.hasQueryItem( "spotifyURI" ) ? url.queryItemValue( "spotifyURI" ) : url.queryItemValue( "spotifyURL" ); SpotifyParser* p = new SpotifyParser( spotifyUrl, this ); - connect( p, SIGNAL( track( Tomahawk::query_ptr ) ), this, SLOT( playNow( Tomahawk::query_ptr ) ) ); + connect( p, SIGNAL( track( Tomahawk::query_ptr ) ), this, SLOT( playOrQueueNow( Tomahawk::query_ptr ) ) ); return true; } - void GlobalActionManager::playNow( const query_ptr& q ) +{ + + Pipeline::instance()->resolve( q, true ); + + m_waitingToPlay = q; + q->setProperty( "playNow", true ); + connect( q.data(), SIGNAL( resolvingFinished( bool ) ), this, SLOT( waitingForResolved( bool ) ) ); +} + + +void +GlobalActionManager::playOrQueueNow( const query_ptr& q ) { Pipeline::instance()->resolve( q, true ); @@ -743,7 +758,7 @@ GlobalActionManager::playRdio( const QUrl& url ) QString rdioUrl = url.hasQueryItem( "rdioURI" ) ? url.queryItemValue( "spotifyURI" ) : url.queryItemValue( "rdioURL" ); RdioParser* p = new RdioParser( this ); p->parse( rdioUrl ); - connect( p, SIGNAL( track( Tomahawk::query_ptr ) ), this, SLOT( playNow( Tomahawk::query_ptr ) ) ); + connect( p, SIGNAL( track( Tomahawk::query_ptr ) ), this, SLOT( playOrQueueNow( Tomahawk::query_ptr ) ) ); return true; } @@ -921,7 +936,17 @@ GlobalActionManager::waitingForResolved( bool /* success */ ) { // play it! // AudioEngine::instance()->playItem( AudioEngine::instance()->playlist(), m_waitingToPlay->results().first() ); - AudioEngine::instance()->play(); + if ( sender() && sender()->property( "playNow" ).toBool() ) + { + if ( AudioEngine::instance()->playlist() ) + AudioEngine::instance()->playItem( AudioEngine::instance()->playlist(), m_waitingToPlay->results().first() ); + else + { + ViewManager::instance()->queue()->model()->append( m_waitingToPlay ); + AudioEngine::instance()->play(); + } + } else + AudioEngine::instance()->play(); m_waitingToPlay.clear(); } diff --git a/src/libtomahawk/globalactionmanager.h b/src/libtomahawk/globalactionmanager.h index 8b0854fe0..156fbc58d 100644 --- a/src/libtomahawk/globalactionmanager.h +++ b/src/libtomahawk/globalactionmanager.h @@ -64,6 +64,7 @@ public slots: Tomahawk::dynplaylist_ptr loadDynamicPlaylist( const QUrl& url, bool station ); void handleOpenTrack( const Tomahawk::query_ptr& qry ); + void handlePlayTrack( const Tomahawk::query_ptr& qry ); signals: void shortLinkReady( QUrl longUrl, QUrl shortUrl ) const; @@ -77,6 +78,7 @@ private slots: void xspfCreated( const QByteArray& xspf ); + void playOrQueueNow( const Tomahawk::query_ptr& ); void playNow( const Tomahawk::query_ptr& ); private: