1
0
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:
Hugo Lindström
2012-12-20 23:36:27 +01:00
parent 2b4b21e7db
commit 81bd375c0c
2 changed files with 27 additions and 38 deletions

View File

@@ -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;
} }
} }

View File

@@ -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();