1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-02 20:28:14 +02:00

TWK-936: Allow loading playlists with new open/playlist tomahawk link

This commit is contained in:
Leo Franchi
2012-06-15 15:36:50 +02:00
parent 1d5e199d89
commit bc6cd4008d
4 changed files with 68 additions and 5 deletions

View File

@@ -495,6 +495,23 @@ GlobalActionManager::handleOpenTrack( const query_ptr& q )
} }
void
GlobalActionManager::handleOpenTracks( const QList< query_ptr >& queries )
{
if ( queries.isEmpty() )
return;
ViewManager::instance()->queue()->model()->append( queries );
ViewManager::instance()->showQueue();
if ( !AudioEngine::instance()->isPlaying() && !AudioEngine::instance()->isPaused() )
{
connect( queries.first().data(), SIGNAL( resolvingFinished( bool ) ), this, SLOT( waitingForResolved( bool ) ) );
m_waitingToPlay = queries.first();
}
}
void void
GlobalActionManager::handlePlayTrack( const query_ptr& qry ) GlobalActionManager::handlePlayTrack( const query_ptr& qry )
{ {
@@ -591,6 +608,43 @@ GlobalActionManager::doQueueAdd( const QStringList& parts, const QList< QPair< Q
} }
} }
} }
else if ( parts.size() && parts[ 0 ] == "playlist" )
{
QString xspfUrl, jspfUrl;
for ( int i = 0; i < queryItems.size(); i++ )
{
const QPair< QString, QString > queryItem = queryItems.at( i );
if ( queryItem.first == "xspf" )
{
xspfUrl = queryItem.second;
break;
}
else if ( queryItem.first == "jspf" )
{
jspfUrl = queryItem.second;
break;
}
}
if ( !xspfUrl.isEmpty() )
{
XSPFLoader* loader = new XSPFLoader( false, false, this );
connect( loader, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( handleOpenTracks( QList< Tomahawk::query_ptr > ) ) );
loader->load( QUrl( xspfUrl ) );
loader->setAutoDelete( true );
return true;
}
else if ( !jspfUrl.isEmpty() )
{
JSPFLoader* loader = new JSPFLoader( false, this );
connect( loader, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( handleOpenTracks( QList< Tomahawk::query_ptr > ) ) );
loader->load( QUrl( jspfUrl ) );
loader->setAutoDelete( true );
return true;
}
}
return false; return false;
} }
@@ -1225,7 +1279,8 @@ GlobalActionManager::waitingForResolved( bool /* success */ )
ViewManager::instance()->queue()->model()->append( m_waitingToPlay ); ViewManager::instance()->queue()->model()->append( m_waitingToPlay );
AudioEngine::instance()->play(); AudioEngine::instance()->play();
} }
} else }
else
AudioEngine::instance()->play(); AudioEngine::instance()->play();
m_waitingToPlay.clear(); m_waitingToPlay.clear();

View File

@@ -67,6 +67,8 @@ public slots:
Tomahawk::dynplaylist_ptr loadDynamicPlaylist( const QUrl& url, bool station ); Tomahawk::dynplaylist_ptr loadDynamicPlaylist( const QUrl& url, bool station );
void handleOpenTrack( const Tomahawk::query_ptr& qry ); void handleOpenTrack( const Tomahawk::query_ptr& qry );
void handleOpenTracks( const QList< Tomahawk::query_ptr >& queries );
void handlePlayTrack( const Tomahawk::query_ptr& qry ); void handlePlayTrack( const Tomahawk::query_ptr& qry );
#endif #endif

View File

@@ -37,6 +37,7 @@ using namespace Tomahawk;
JSPFLoader::JSPFLoader( bool autoCreate, QObject *parent ) JSPFLoader::JSPFLoader( bool autoCreate, QObject *parent )
: QObject( parent ) : QObject( parent )
, m_autoCreate( autoCreate ) , m_autoCreate( autoCreate )
, m_autoDelete( true )
{} {}
JSPFLoader::~JSPFLoader() JSPFLoader::~JSPFLoader()
@@ -87,6 +88,8 @@ void
JSPFLoader::reportError() JSPFLoader::reportError()
{ {
emit failed(); emit failed();
if ( m_autoDelete )
deleteLater(); deleteLater();
} }
@@ -180,7 +183,6 @@ JSPFLoader::gotBody()
if ( m_autoCreate ) if ( m_autoCreate )
{ {
QMessageBox::critical( 0, tr( "XSPF Error" ), tr( "This is not a valid XSPF playlist." ) ); QMessageBox::critical( 0, tr( "XSPF Error" ), tr( "This is not a valid XSPF playlist." ) );
deleteLater();
return; return;
} }
else else
@@ -200,8 +202,10 @@ JSPFLoader::gotBody()
false, false,
m_entries ); m_entries );
deleteLater();
} }
emit ok( m_playlist ); emit ok( m_playlist );
if ( m_autoDelete )
deleteLater();
} }

View File

@@ -45,6 +45,8 @@ public:
QList< Tomahawk::query_ptr > entries() const; QList< Tomahawk::query_ptr > entries() const;
void setOverrideTitle( const QString& newTitle ) { m_overrideTitle = newTitle; } void setOverrideTitle( const QString& newTitle ) { m_overrideTitle = newTitle; }
void setAutoDelete( bool autoDelete ) { m_autoDelete = autoDelete; }
signals: signals:
void failed(); void failed();
void ok( const Tomahawk::playlist_ptr& ); void ok( const Tomahawk::playlist_ptr& );
@@ -61,7 +63,7 @@ private:
void reportError(); void reportError();
void gotBody(); void gotBody();
bool m_autoCreate; bool m_autoCreate, m_autoDelete;
QList< Tomahawk::query_ptr > m_entries; QList< Tomahawk::query_ptr > m_entries;
QString m_title, m_info, m_creator, m_overrideTitle; QString m_title, m_info, m_creator, m_overrideTitle;