diff --git a/src/dynamic/widgets/DynamicWidget.cpp b/src/dynamic/widgets/DynamicWidget.cpp index 1f8990edd..79db4e306 100644 --- a/src/dynamic/widgets/DynamicWidget.cpp +++ b/src/dynamic/widgets/DynamicWidget.cpp @@ -29,7 +29,7 @@ #include "dynamic/GeneratorInterface.h" #include "dynamic/GeneratorFactory.h" #include "pipeline.h" -#include +#include "audioengine.h" using namespace Tomahawk; @@ -38,6 +38,7 @@ DynamicWidget::DynamicWidget( const Tomahawk::dynplaylist_ptr& playlist, QWidget , m_layout( new QVBoxLayout ) , m_resolveOnNextLoad( false ) , m_runningOnDemand( false ) + , m_startOnResolved( false ) , m_songsSinceLastResolved( 0 ) , m_headerText( 0 ) , m_headerLayout( 0 ) @@ -163,12 +164,13 @@ DynamicWidget::generateOrStart() } else if( m_playlist->mode() == OnDemand ) { if( m_runningOnDemand == false ) { m_runningOnDemand = true; + m_startOnResolved = true; m_playlist->generator()->startOnDemand(); m_generateButton->setText( tr( "Stop" ) ); } else { // stop m_runningOnDemand = false; - + m_startOnResolved = false; m_generateButton->setText( tr( "Start" ) ); } } @@ -196,7 +198,8 @@ DynamicWidget::applyModeChange( int mode ) } else if( mode == Static ) { m_generateButton->setText( tr( "Generate" ) ); m_genNumber->show(); - m_headerLayout->insertWidget( 4, m_genNumber ); + if( m_headerLayout->indexOf( m_generateButton ) == -1 ) + m_headerLayout->insertWidget( 4, m_genNumber ); disconnect( TomahawkApp::instance()->audioEngine(), SIGNAL( loading( Tomahawk::result_ptr ) ), this, SLOT( newTrackLoading() ) ); } @@ -224,6 +227,12 @@ void DynamicWidget::trackResolved() { m_songsSinceLastResolved = 0; + + if( m_startOnResolved ) { + m_startOnResolved = false; + TomahawkApp::instance()->audioEngine()->play(); + } + } void @@ -243,6 +252,12 @@ DynamicWidget::newTrackLoading() } } +void DynamicWidget::onDemandFailed() +{ + if( m_runningOnDemand ) + generateOrStart(); +} + void DynamicWidget::controlsChanged() diff --git a/src/dynamic/widgets/DynamicWidget.h b/src/dynamic/widgets/DynamicWidget.h index f81af58a3..413244776 100644 --- a/src/dynamic/widgets/DynamicWidget.h +++ b/src/dynamic/widgets/DynamicWidget.h @@ -62,6 +62,7 @@ private slots: void tracksGenerated( const QList< Tomahawk::query_ptr>& queries ); // used by on demand mode + void onDemandFailed(); void newTrackLoading(); void onDemandFetched( const Tomahawk::query_ptr& track ); void trackResolveFailed(); @@ -79,6 +80,7 @@ private: // used in OnDemand mode bool m_runningOnDemand; + bool m_startOnResolved; int m_songsSinceLastResolved; QLabel* m_headerText; diff --git a/src/libtomahawk/dynamic/GeneratorInterface.h b/src/libtomahawk/dynamic/GeneratorInterface.h index f27093203..62503d698 100644 --- a/src/libtomahawk/dynamic/GeneratorInterface.h +++ b/src/libtomahawk/dynamic/GeneratorInterface.h @@ -94,6 +94,7 @@ public: void removeControl( const dyncontrol_ptr& control ); signals: + void onDemandFailed(); void generated( const QList< Tomahawk::query_ptr>& queries ); void nextTrackGenerated( const Tomahawk::query_ptr& track ); diff --git a/src/libtomahawk/dynamic/echonest/EchonestGenerator.cpp b/src/libtomahawk/dynamic/echonest/EchonestGenerator.cpp index 1d4b0143f..dda01b280 100644 --- a/src/libtomahawk/dynamic/echonest/EchonestGenerator.cpp +++ b/src/libtomahawk/dynamic/echonest/EchonestGenerator.cpp @@ -160,6 +160,7 @@ EchonestGenerator::dynamicStarted() emit nextTrackGenerated( songQuery ); } catch( const Echonest::ParseError& e ) { qWarning() << "libechonest threw an error parsing the start of the dynamic playlist:" << e.errorType() << e.what(); + emit onDemandFailed(); } }