From 89f39f1a1fff734b6602e7dbe4f6e0fcfc19662c Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 10 Sep 2011 12:00:30 +0200 Subject: [PATCH] * Use short-urls when copying track url to clipboard. --- src/libtomahawk/globalactionmanager.cpp | 41 +++++++++++++++---------- src/libtomahawk/globalactionmanager.h | 5 ++- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/libtomahawk/globalactionmanager.cpp b/src/libtomahawk/globalactionmanager.cpp index 1a330bc41..17f5cb95c 100644 --- a/src/libtomahawk/globalactionmanager.cpp +++ b/src/libtomahawk/globalactionmanager.cpp @@ -207,12 +207,10 @@ GlobalActionManager::xspfCreated( const QByteArray& xspf ) void -GlobalActionManager::copyToClipboard( const query_ptr& query ) const +GlobalActionManager::copyToClipboard( const query_ptr& query ) { - QClipboard* cb = QApplication::clipboard(); - QByteArray data = openLinkFromQuery( query ).toEncoded(); - data.replace( "'", "%27" ); // QUrl doesn't encode ', which it doesn't have to. Some apps don't like ' though, and want %27. Both are valid. - cb->setText( data ); + m_clipboardLongUrl = openLinkFromQuery( query ); + GlobalActionManager::instance()->shortenLink( m_clipboardLongUrl ); } @@ -800,6 +798,7 @@ GlobalActionManager::shortenLinkRequestFinished() { qDebug() << Q_FUNC_INFO; QNetworkReply *reply = qobject_cast( sender() ); + bool error = false; // NOTE: this should never happen if( !reply ) @@ -809,30 +808,38 @@ GlobalActionManager::shortenLinkRequestFinished() } // Check for the redirect attribute, as this should be the shortened link - QVariant urlVariant = reply->attribute( QNetworkRequest::RedirectionTargetAttribute ); // NOTE: this should never happen if( urlVariant.isNull() || !urlVariant.isValid() ) - { - emit shortLinkReady( reply->request().url(), QUrl( "" ) ); - reply->deleteLater(); - return; - } + error = true; + QUrl longUrl = reply->request().url(); QUrl shortUrl = urlVariant.toUrl(); // NOTE: this should never happen if( !shortUrl.isValid() ) - { - emit shortLinkReady( reply->request().url(), QUrl( "" ) ); - reply->deleteLater(); - return; - } + error = true; // Success! Here is the short link + if ( m_clipboardLongUrl == reply->request().url() ) + { + QClipboard* cb = QApplication::clipboard(); + + QByteArray data = error ? longUrl.toEncoded() : shortUrl.toEncoded(); + data.replace( "'", "%27" ); // QUrl doesn't encode ', which it doesn't have to. Some apps don't like ' though, and want %27. Both are valid. + cb->setText( data ); + + m_clipboardLongUrl.clear(); + } + else + { + if ( !error ) + emit shortLinkReady( longUrl, shortUrl ); + else + emit shortLinkReady( longUrl, QUrl( "" ) ); + } - emit shortLinkReady( reply->request().url(), shortUrl ); reply->deleteLater(); } diff --git a/src/libtomahawk/globalactionmanager.h b/src/libtomahawk/globalactionmanager.h index fb6e5af9c..148d6e72a 100644 --- a/src/libtomahawk/globalactionmanager.h +++ b/src/libtomahawk/globalactionmanager.h @@ -53,7 +53,7 @@ public: /// Takes a spotify link and performs the default open action on it bool openRdioLink( const QString& link ); - void copyToClipboard( const Tomahawk::query_ptr& query ) const; + void copyToClipboard( const Tomahawk::query_ptr& query ); QString copyPlaylistToClipboard( const Tomahawk::dynplaylist_ptr& playlist ); void savePlaylistToFile( const Tomahawk::playlist_ptr& playlist, const QString& filename ); @@ -105,8 +105,7 @@ private: Tomahawk::playlist_ptr m_toShow; Tomahawk::query_ptr m_waitingToBookmark; Tomahawk::query_ptr m_waitingToPlay; - - QWeakPointer m_nam; + QUrl m_clipboardLongUrl; static GlobalActionManager* s_instance; };