From 986730a51d6939a00c2d14313dae29e7faac69eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Lindstr=C3=B6m?= Date: Sat, 17 Nov 2012 12:58:27 +0100 Subject: [PATCH] Better spotifyUri parsing, now allowing embed links to --- src/libtomahawk/DropJob.cpp | 2 ++ src/libtomahawk/utils/SpotifyParser.cpp | 36 ++++++++++++++++++------- src/libtomahawk/utils/SpotifyParser.h | 2 +- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/libtomahawk/DropJob.cpp b/src/libtomahawk/DropJob.cpp index ae68d72ed..bb9a0c9a1 100644 --- a/src/libtomahawk/DropJob.cpp +++ b/src/libtomahawk/DropJob.cpp @@ -551,6 +551,8 @@ DropJob::handleXspfs( const QString& fileUrls ) void DropJob::handleSpotifyUrls( const QString& urlsRaw ) { + // Todo: Allow search querys, and split these in a better way. + // Example: spotify:search:artist:Madonna year:<1970 year:>1990 QStringList urls = urlsRaw.split( QRegExp( "\\s+" ), QString::SkipEmptyParts ); qDebug() << "Got spotify browse uris!" << urls; diff --git a/src/libtomahawk/utils/SpotifyParser.cpp b/src/libtomahawk/utils/SpotifyParser.cpp index 9d2853952..e3bc78a2f 100644 --- a/src/libtomahawk/utils/SpotifyParser.cpp +++ b/src/libtomahawk/utils/SpotifyParser.cpp @@ -75,8 +75,29 @@ SpotifyParser::~SpotifyParser() void -SpotifyParser::lookupUrl( const QString& link ) +SpotifyParser::lookupUrl( const QString& rawLink ) { + tLog() << "Looking up Spotify rawURI:" << rawLink; + QString link = rawLink; + if ( link.contains( "open.spotify.com/" ) ) // convert to a URI + { + link.replace( "http://open.spotify.com/", "" ); + link.replace( "/", ":" ); + link = "spotify:" + link; + } + // TODO: Ignoring search and user querys atm + // (spotify:(?:(?:artist|album|track|user:[^:]+:playlist):[a-zA-Z0-9]+|user:[^:]+|search:(?:[-\w$\.+!*'(),<>:\s]+|%[a-fA-F0-9\s]{2})+)) + QRegExp rx( "(spotify:(?:(?:artist|album|track|user:[^:]+:playlist):[a-zA-Z0-9]+[^:]))" ); + if ( rx.indexIn( link, 0 ) != -1 ) + { + link = rx.cap(1); + } + else + { + tLog() << "Bad SpotifyURI!" << link; + return; + } + if ( link.contains( "track" ) ) { m_trackMode = true; @@ -97,17 +118,12 @@ SpotifyParser::lookupUrl( const QString& link ) void -SpotifyParser::lookupSpotifyBrowse( const QString& linkRaw ) +SpotifyParser::lookupSpotifyBrowse( const QString& link ) { - tLog() << "Parsing Spotify Browse URI:" << linkRaw; - m_browseUri = linkRaw; + tLog() << "Parsing Spotify Browse URI:" << link; - if ( m_browseUri.contains( "open.spotify.com/" ) ) // convert to a URI - { - m_browseUri.replace( "http://open.spotify.com/", "" ); - m_browseUri.replace( "/", ":" ); - m_browseUri = "spotify:" + m_browseUri; - } + // Used in checkBrowseFinished as identifier + m_browseUri = link; if ( m_browseUri.contains( "playlist" ) && Tomahawk::Accounts::SpotifyAccount::instance() != 0 && diff --git a/src/libtomahawk/utils/SpotifyParser.h b/src/libtomahawk/utils/SpotifyParser.h index 552726231..1b2544e2f 100644 --- a/src/libtomahawk/utils/SpotifyParser.h +++ b/src/libtomahawk/utils/SpotifyParser.h @@ -79,7 +79,7 @@ private: void lookupUrl( const QString& url ); void lookupTrack( const QString& track ); - void lookupSpotifyBrowse( const QString& playlist ); + void lookupSpotifyBrowse(const QString& link ); void checkTrackFinished(); void checkBrowseFinished();