diff --git a/src/libtomahawk/globalactionmanager.cpp b/src/libtomahawk/globalactionmanager.cpp index e51afe7ee..ce7b6d7b9 100644 --- a/src/libtomahawk/globalactionmanager.cpp +++ b/src/libtomahawk/globalactionmanager.cpp @@ -172,12 +172,21 @@ GlobalActionManager::getShortLink( const playlist_ptr& pl ) QByteArray msg = s.serialize( jspf ); qDebug() << "POSTING DATA:" << msg; + const QByteArray boundary = "----------------------------2434992cccab"; + QByteArray data(QByteArray("--" + boundary + "\r\n")); + data += "Content-Disposition: form-data; name=\"data\"; filename=\"playlist.jspf\"\r\n"; + data += "Content-Type: application/octet-stream\r\n\r\n"; + data += msg; + data += "\r\n\r\n"; + data += "--" + boundary + "--\r\n\r\n"; + const QUrl url( QString( "%1/playlist/").arg( hostname() ) ); QNetworkRequest req( url ); - req.setHeader( QNetworkRequest::ContentTypeHeader, QLatin1String( "application/x-www-form-urlencoded" ) ); - QNetworkReply *reply = TomahawkUtils::nam()->post( req, msg ); + qDebug() << "POSTING TO:" << url.toString(); + req.setHeader( QNetworkRequest::ContentTypeHeader, QString( "multipart/form-data; boundary=%1" ).arg( QString::fromLatin1( boundary ) ) ); + QNetworkReply *reply = TomahawkUtils::nam()->post( req, data ); - connect( reply, SIGNAL( finished() ), SLOT( shortenLinkRequestFinished() ) ); + connect( reply, SIGNAL( finished() ), SLOT( postShortenFinished() ) ); connect( reply, SIGNAL( error( QNetworkReply::NetworkError ) ), SLOT( shortenLinkRequestError( QNetworkReply::NetworkError ) ) ); } @@ -1102,6 +1111,25 @@ GlobalActionManager::shortenLinkRequestFinished() } +void +GlobalActionManager::postShortenFinished() +{ + QNetworkReply* reply = qobject_cast( sender() ); + Q_ASSERT( reply ); + const QByteArray raw = reply->readAll(); + qDebug() << "GOT REPLYL" << raw; + + const QUrl url = QUrl::fromUserInput( raw ); + qDebug() << "GOT POSTED SHORT URL:" << url.toString(); + QClipboard* cb = QApplication::clipboard(); + + QByteArray data = url.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 ); + + reply->deleteLater(); +} + void GlobalActionManager::shortenLinkRequestError( QNetworkReply::NetworkError error ) { diff --git a/src/libtomahawk/globalactionmanager.h b/src/libtomahawk/globalactionmanager.h index c946ddfb4..42cd1c093 100644 --- a/src/libtomahawk/globalactionmanager.h +++ b/src/libtomahawk/globalactionmanager.h @@ -72,6 +72,7 @@ signals: private slots: void shortenLinkRequestFinished(); + void postShortenFinished(); void shortenLinkRequestError( QNetworkReply::NetworkError ); void bookmarkPlaylistCreated( const Tomahawk::playlist_ptr& pl ); diff --git a/src/sourcetree/sourcetreeview.cpp b/src/sourcetree/sourcetreeview.cpp index eb8d14768..0be882670 100644 --- a/src/sourcetree/sourcetreeview.cpp +++ b/src/sourcetree/sourcetreeview.cpp @@ -361,7 +361,7 @@ SourceTreeView::copyPlaylistLink() PlaylistItem* item = itemFromIndex< PlaylistItem >( m_contextMenuIndex ); playlist_ptr playlist = item->playlist(); -// GlobalActionManager::instance()->getShortLink( playlist ); + GlobalActionManager::instance()->getShortLink( playlist ); // QString suggestedFilename = TomahawkSettings::instance()->playlistDefaultPath() + "/" + playlist->title(); // QString filename = QFileDialog::getSaveFileName( TomahawkUtils::tomahawkWindow(), tr( "Save XSPF" ),