1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-20 07:49:42 +01: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 )
{
tDebug() << "Looking up 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 ) ) );
connect( reply, SIGNAL( finished() ), SLOT( soundcloudBrowseFinished() ) );
connect( reply, SIGNAL( finished() ), SLOT( soundcloudLookupFinished() ) );
m_browseJob = new DropJobNotifier( pixmap(), "Soundcloud", DropJob::All, reply );
JobStatusView::instance()->model()->addJob( m_browseJob );
@ -123,13 +124,25 @@ SoundcloudParser::soundcloudLookupFinished()
QJson::Parser p;
bool ok;
QVariantMap res = p.parse( r->reply(), &ok ).toMap();
if ( !ok )
{
tLog() << "Failed to parse json from Soundcloud browse item:" << p.errorString() << "On line" << p.errorLine();
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 )
{
parseTrack( res );
@ -160,10 +173,6 @@ SoundcloudParser::soundcloudLookupFinished()
return;
}
}
else if ( m_type == DropJob::Artist )
{
// cant parse soundcloud json here atm.
}
}
if ( m_single && !m_tracks.isEmpty() )
@ -185,7 +194,7 @@ SoundcloudParser::playlistCreated()
void
SoundcloudParser::soundcloudBrowseFinished()
SoundcloudParser::soundcloudArtistLookupFinished()
{
NetworkReply* r = qobject_cast< NetworkReply* >( sender() );
Q_ASSERT( r );
@ -194,39 +203,19 @@ SoundcloudParser::soundcloudBrowseFinished()
if ( r->reply()->error() == QNetworkReply::NoError )
{
if ( r->reply()->rawHeaderList().contains( "Location" ) )
{
QString url = r->reply()->rawHeader( "Location" );
if ( url.contains( "tracks" ) )
{
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;
}
QJson::Parser p;
bool ok;
QVariantList res = p.parse( r->reply(), &ok ).toList();
foreach( const QVariant& track, res )
parseTrack( track.toMap() );
if ( m_type != DropJob::All )
{
NetworkReply* reply = new NetworkReply( TomahawkUtils::nam()->get( QNetworkRequest( QUrl( url ) ) ) );
connect( reply, SIGNAL( finished() ), SLOT( soundcloudLookupFinished() ) );
}
}
}
if ( m_single && !m_tracks.isEmpty() )
emit track( m_tracks.first() );
else if ( !m_single && !m_tracks.isEmpty() )
emit tracks( m_tracks );
if ( m_type == DropJob::All )
{ // No good
m_queries.remove( r );
deleteLater();
if ( m_browseJob )
m_browseJob->setFinished();
return;
}
}

View File

@ -63,7 +63,7 @@ signals:
void playlist( const Tomahawk::query_ptr& playlist );
private slots:
void soundcloudBrowseFinished();
void soundcloudArtistLookupFinished();
void soundcloudLookupFinished();
void playlistCreated();