mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-06 14:16:32 +02:00
Fix SoundcloudParser
This commit is contained in:
@@ -71,10 +71,11 @@ void
|
|||||||
SoundcloudParser::lookupUrl( const QString& link )
|
SoundcloudParser::lookupUrl( const QString& link )
|
||||||
{
|
{
|
||||||
tDebug() << "Looking up URL..." << link;
|
tDebug() << "Looking up URL..." << link;
|
||||||
|
|
||||||
QUrl scLink( QString( "http://api.soundcloud.com/resolve.json?client_id=TiNg2DRYhBnp01DA3zNag&url=" ) + link );
|
QUrl scLink( QString( "http://api.soundcloud.com/resolve.json?client_id=TiNg2DRYhBnp01DA3zNag&url=" ) + link );
|
||||||
|
|
||||||
NetworkReply* reply = new NetworkReply( TomahawkUtils::nam()->get( QNetworkRequest( scLink ) ) );
|
NetworkReply* reply = new NetworkReply( TomahawkUtils::nam()->get( QNetworkRequest( scLink ) ) );
|
||||||
connect( reply, SIGNAL( finished() ), SLOT( soundcloudBrowseFinished() ) );
|
connect( reply, SIGNAL( finished() ), SLOT( soundcloudLookupFinished() ) );
|
||||||
|
|
||||||
m_browseJob = new DropJobNotifier( pixmap(), "Soundcloud", DropJob::All, reply );
|
m_browseJob = new DropJobNotifier( pixmap(), "Soundcloud", DropJob::All, reply );
|
||||||
JobStatusView::instance()->model()->addJob( m_browseJob );
|
JobStatusView::instance()->model()->addJob( m_browseJob );
|
||||||
@@ -123,13 +124,25 @@ SoundcloudParser::soundcloudLookupFinished()
|
|||||||
QJson::Parser p;
|
QJson::Parser p;
|
||||||
bool ok;
|
bool ok;
|
||||||
QVariantMap res = p.parse( r->reply(), &ok ).toMap();
|
QVariantMap res = p.parse( r->reply(), &ok ).toMap();
|
||||||
|
|
||||||
if ( !ok )
|
if ( !ok )
|
||||||
{
|
{
|
||||||
tLog() << "Failed to parse json from Soundcloud browse item:" << p.errorString() << "On line" << p.errorLine();
|
tLog() << "Failed to parse json from Soundcloud browse item:" << p.errorString() << "On line" << p.errorLine();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( res.value( "kind" ).toString() == "playlist" )
|
||||||
|
m_type = DropJob::Playlist;
|
||||||
|
if( res.value( "kind" ).toString() == "track" )
|
||||||
|
m_type = DropJob::Track;
|
||||||
|
if( res.value( "kind" ).toString() == "user" )
|
||||||
|
{
|
||||||
|
QUrl url = QUrl( QString( res.value( "uri" ).toString() + "/tracks.json?client_id=TiNg2DRYhBnp01DA3zNag" ) );
|
||||||
|
qDebug() << Q_FUNC_INFO << url;
|
||||||
|
NetworkReply* reply = new NetworkReply( TomahawkUtils::nam()->get( QNetworkRequest( QUrl( url ) ) ) );
|
||||||
|
connect( reply, SIGNAL( finished() ), SLOT( soundcloudArtistLookupFinished() ) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( m_type == DropJob::Track )
|
if ( m_type == DropJob::Track )
|
||||||
{
|
{
|
||||||
parseTrack( res );
|
parseTrack( res );
|
||||||
@@ -160,10 +173,6 @@ SoundcloudParser::soundcloudLookupFinished()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( m_type == DropJob::Artist )
|
|
||||||
{
|
|
||||||
// cant parse soundcloud json here atm.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_single && !m_tracks.isEmpty() )
|
if ( m_single && !m_tracks.isEmpty() )
|
||||||
@@ -185,7 +194,7 @@ SoundcloudParser::playlistCreated()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
SoundcloudParser::soundcloudBrowseFinished()
|
SoundcloudParser::soundcloudArtistLookupFinished()
|
||||||
{
|
{
|
||||||
NetworkReply* r = qobject_cast< NetworkReply* >( sender() );
|
NetworkReply* r = qobject_cast< NetworkReply* >( sender() );
|
||||||
Q_ASSERT( r );
|
Q_ASSERT( r );
|
||||||
@@ -194,39 +203,19 @@ SoundcloudParser::soundcloudBrowseFinished()
|
|||||||
|
|
||||||
if ( r->reply()->error() == QNetworkReply::NoError )
|
if ( r->reply()->error() == QNetworkReply::NoError )
|
||||||
{
|
{
|
||||||
if ( r->reply()->rawHeaderList().contains( "Location" ) )
|
QJson::Parser p;
|
||||||
{
|
bool ok;
|
||||||
QString url = r->reply()->rawHeader( "Location" );
|
QVariantList res = p.parse( r->reply(), &ok ).toList();
|
||||||
if ( url.contains( "tracks" ) )
|
foreach( const QVariant& track, res )
|
||||||
{
|
parseTrack( track.toMap() );
|
||||||
m_type = DropJob::Track;
|
|
||||||
}
|
|
||||||
else if ( url.contains( "users" ) )
|
|
||||||
{
|
|
||||||
// For now, dont handle user tracklists
|
|
||||||
m_type = DropJob::All; //DropJob::Artist;
|
|
||||||
url = url.replace( ".json", "/tracks.json" );
|
|
||||||
}
|
|
||||||
else if ( url.contains( "playlists" ) )
|
|
||||||
{
|
|
||||||
m_type = DropJob::Playlist;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( m_type != DropJob::All )
|
if ( m_single && !m_tracks.isEmpty() )
|
||||||
{
|
emit track( m_tracks.first() );
|
||||||
NetworkReply* reply = new NetworkReply( TomahawkUtils::nam()->get( QNetworkRequest( QUrl( url ) ) ) );
|
else if ( !m_single && !m_tracks.isEmpty() )
|
||||||
connect( reply, SIGNAL( finished() ), SLOT( soundcloudLookupFinished() ) );
|
emit tracks( m_tracks );
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( m_type == DropJob::All )
|
deleteLater();
|
||||||
{ // No good
|
|
||||||
m_queries.remove( r );
|
|
||||||
|
|
||||||
if ( m_browseJob )
|
|
||||||
m_browseJob->setFinished();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -63,7 +63,7 @@ signals:
|
|||||||
void playlist( const Tomahawk::query_ptr& playlist );
|
void playlist( const Tomahawk::query_ptr& playlist );
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void soundcloudBrowseFinished();
|
void soundcloudArtistLookupFinished();
|
||||||
void soundcloudLookupFinished();
|
void soundcloudLookupFinished();
|
||||||
void playlistCreated();
|
void playlistCreated();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user