1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-20 07:49:42 +01: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
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;
}
@ -1225,7 +1279,8 @@ GlobalActionManager::waitingForResolved( bool /* success */ )
ViewManager::instance()->queue()->model()->append( m_waitingToPlay );
AudioEngine::instance()->play();
}
} else
}
else
AudioEngine::instance()->play();
m_waitingToPlay.clear();

View File

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

View File

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

View File

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