From 3fd5f6f850d6f103324c3a023541830eec42b16c Mon Sep 17 00:00:00 2001 From: "Uwe L. Korn" Date: Sun, 24 Aug 2014 12:40:03 +0100 Subject: [PATCH] Rework HttpIODeviceReadyHandler --- src/libtomahawk/UrlHandler.cpp | 4 ++-- src/libtomahawk/UrlHandler_p.h | 21 ++++++++------------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/libtomahawk/UrlHandler.cpp b/src/libtomahawk/UrlHandler.cpp index ebb65e946..417d1f90d 100644 --- a/src/libtomahawk/UrlHandler.cpp +++ b/src/libtomahawk/UrlHandler.cpp @@ -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*"); qRegisterMetaType("IODeviceCallback"); HttpIODeviceReadyHandler* handler = new HttpIODeviceReadyHandler( reply, callback ); - reply->connect( reply, SIGNAL( finalUrlReached() ), + reply->connect( reply.data(), SIGNAL( finalUrlReached() ), handler, SLOT( called() )); } diff --git a/src/libtomahawk/UrlHandler_p.h b/src/libtomahawk/UrlHandler_p.h index ddf0f5af6..f00a4abb1 100644 --- a/src/libtomahawk/UrlHandler_p.h +++ b/src/libtomahawk/UrlHandler_p.h @@ -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 reply; IODeviceCallback callback; - QWeakPointer ref; - bool once; - HttpIODeviceReadyHandler( NetworkReply* _reply, IODeviceCallback _callback ) + HttpIODeviceReadyHandler( const QSharedPointer& _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();