1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-25 02:09:48 +01:00

Rework HttpIODeviceReadyHandler

This commit is contained in:
Uwe L. Korn 2014-08-24 12:40:03 +01:00
parent 2200527678
commit 3fd5f6f850
2 changed files with 10 additions and 15 deletions

View File

@ -117,11 +117,11 @@ httpIODeviceFactory( const Tomahawk::result_ptr&, const QString& url,
{
QNetworkRequest req( url );
// Follow HTTP Redirects
NetworkReply* reply = new NetworkReply( Tomahawk::Utils::nam()->get( req ) );
QSharedPointer< NetworkReply > reply( new NetworkReply( Tomahawk::Utils::nam()->get( req ) ) );
qRegisterMetaType<NetworkReply*>("NetworkReply*");
qRegisterMetaType<IODeviceCallback>("IODeviceCallback");
HttpIODeviceReadyHandler* handler = new HttpIODeviceReadyHandler( reply, callback );
reply->connect( reply, SIGNAL( finalUrlReached() ),
reply->connect( reply.data(), SIGNAL( finalUrlReached() ),
handler, SLOT( called() ));
}

View File

@ -21,6 +21,7 @@
#include "UrlHandler.h"
#include "utils/Logger.h"
#include "utils/NetworkReply.h"
class HttpIODeviceReadyHandler : public QObject
@ -29,15 +30,12 @@ class HttpIODeviceReadyHandler : public QObject
public:
NetworkReply* reply;
QSharedPointer<NetworkReply> reply;
IODeviceCallback callback;
QWeakPointer<HttpIODeviceReadyHandler> ref;
bool once;
HttpIODeviceReadyHandler( NetworkReply* _reply, IODeviceCallback _callback )
HttpIODeviceReadyHandler( const QSharedPointer<NetworkReply>& _reply, IODeviceCallback _callback )
: reply( _reply )
, callback( _callback )
, once( false )
{
// Do Nothing
}
@ -46,14 +44,11 @@ public slots:
void called()
{
// Sometimes Qt calls this function twice. Weird.
if (once) {
deleteLater();
}
once = true;
QSharedPointer< QIODevice > sp( reply->reply(), &QObject::deleteLater );
callback( reply->reply()->url().toString(), sp );
tLog() << Q_FUNC_INFO << reply->reply();
QSharedPointer< QNetworkReply > sp( reply->reply(), &QObject::deleteLater );
reply->disconnectFromReply();
QSharedPointer< QIODevice > spIO = sp.staticCast< QIODevice>();
callback( sp->url().toString(), spIO );
// Call once, then self-destruct
deleteLater();