From dc87aa3d5c588d1c5d6bcb33ddfcf1978a9a7279 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Fri, 29 Jan 2010 18:37:47 +0000 Subject: [PATCH] - Download thread now supports HTTP redirection --- src/downloadthread.cpp | 12 ++++++++++++ src/downloadthread.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/src/downloadthread.cpp b/src/downloadthread.cpp index e9f3f1a93..957874073 100644 --- a/src/downloadthread.cpp +++ b/src/downloadthread.cpp @@ -56,6 +56,18 @@ void downloadThread::processDlFinished(QNetworkReply* reply) { // Failure emit downloadFailure(url, errorCodeToString(reply->error())); } else { + QVariant redirection = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + if(redirection.isValid()) { + // We should redirect + qDebug("Redirecting from %s to %s", url.toLocal8Bit().data(), redirection.toUrl().toString().toLocal8Bit().data()); + redirect_mapping.insert(redirection.toUrl().toString(), url); + downloadUrl(redirection.toUrl().toString()); + return; + } + // Checking if it was redirecting, restoring initial URL + if(redirect_mapping.contains(url)) { + url = redirect_mapping.take(url); + } // Success QString filePath; QTemporaryFile tmpfile; diff --git a/src/downloadthread.h b/src/downloadthread.h index af5ee8abc..1d3bbd871 100644 --- a/src/downloadthread.h +++ b/src/downloadthread.h @@ -33,6 +33,7 @@ #include #include +#include class QNetworkAccessManager; @@ -41,6 +42,7 @@ class downloadThread : public QObject { private: QNetworkAccessManager *networkManager; + QHash redirect_mapping; signals: void downloadFinished(QString url, QString file_path);