From 1ddeaa0d619745190cf6ca315d5e5a233562c60c Mon Sep 17 00:00:00 2001 From: agriche Date: Thu, 19 Nov 2015 14:05:11 +0100 Subject: [PATCH] - In DEBUG mode,the Openboard application crashes after a checkUpdate ("http://get.openboard.org/update.json"). => the url do not exists. --- src/core/UBApplicationController.cpp | 109 +++++++++++++++++---------- 1 file changed, 71 insertions(+), 38 deletions(-) diff --git a/src/core/UBApplicationController.cpp b/src/core/UBApplicationController.cpp index 203aad85..6bfcbdef 100644 --- a/src/core/UBApplicationController.cpp +++ b/src/core/UBApplicationController.cpp @@ -22,9 +22,7 @@ * along with OpenBoard. If not, see . */ -#include -#include -#include + #include "UBApplicationController.h" @@ -67,6 +65,9 @@ #include "ui_mainWindow.h" +#ifdef Q_WS_MAC +#include +#endif #include "core/memcheck.h" @@ -85,6 +86,7 @@ UBApplicationController::UBApplicationController(UBBoardView *pControlView, , mAutomaticCheckForUpdates(false) , mCheckingForUpdates(false) , mIsShowingDesktop(false) + , mHttp(0) { mDisplayManager = new UBDisplayManager(this); @@ -119,7 +121,7 @@ UBApplicationController::UBApplicationController(UBBoardView *pControlView, QTimer::singleShot (1000, this, SLOT (checkAtLaunch())); -#ifdef Q_OS_LINUX +#ifdef Q_WS_X11 mMainWindow->setStyleSheet("QToolButton { font-size: 11px}"); #endif @@ -136,6 +138,8 @@ UBApplicationController::~UBApplicationController() delete mBlackScene; delete mMirror; + if (mHttp) delete mHttp; + delete(mOpenSankoreImporter); mOpenSankoreImporter = NULL; } @@ -475,55 +479,84 @@ void UBApplicationController::showDesktop(bool dontSwitchFrontProcess) UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector); } + void UBApplicationController::checkUpdate(QString urlString) { - //connect(networkAccessManager, &QNetworkAccessManager::finished, - // this, &UBApplicationController::updateRequestFinished); - connect(networkAccessManager, SIGNAL(finished(QNetworkReply*)), - this, SLOT(updateRequestFinished(QNetworkReply*))); - networkAccessManager->get(QNetworkRequest(QUrl(urlString))); + #if defined(QT_NO_DEBUG) + /* + if(mHttp) + mHttp->deleteLater(); + QUrl url(urlString); + mHttp = new QHttpPart(url.host()); + connect(mHttp, SIGNAL(requestFinished(int,bool)), this, SLOT(updateRequestFinished(int,bool))); + connect(mHttp, SIGNAL(responseHeaderReceived(QHttpResponseHeader)), this, SLOT(updateHeaderReceived(QHttpResponseHeader))); -} + mHttp->get(url.path()); + */ + if(mHttpreply) + mHttpreply->deleteLater(); + QUrl url(urlString); + mHttpreply = qnam.get(QNetworkRequest(url)); + connect(mHttpreply, SIGNAL(requestFinished(int,bool)), this, SLOT(updateRequestFinished(int,bool))); + connect(mHttpreply, SIGNAL(responseHeaderReceived(QHttpResponseHeader)), this, SLOT(updateHeaderReceived(QHttpResponseHeader))); + // mHttpreply->setUrl(url.path()); + //mHttp->get(url.path()); +#else -void UBApplicationController::updateRequestFinished(QNetworkReply * reply) -{ - if (reply->error()) { - qWarning() << "HTTP Error"; - return; - } - // Check if we are being redirected. If so, call checkUpdate again - QVariant redirect_target = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); - - if (!redirect_target.isNull()) { - // The returned URL might be relative. resolved() creates an absolute url from it - QUrl redirect_url(reply->url().resolved(redirect_target.toUrl())); +#endif +} - checkUpdate(redirect_url.toString()); - return; +/* +void UBApplicationController::updateHeaderReceived(QHttpResponseHeader header) +{ + if(header.statusCode() == 302 && header.hasKey("Location")){ + mHttp->close(); + checkUpdate(header.value("Location")); } +} +*/ +void UBApplicationController::updateHeaderReceived(QNetworkRequest header ) +{ + //if(header.attribute(QNetworkRequest::HttpStatusCodeAttribute) == 302 && header.header(QNetworkRequest::LocationHeader)){ + // mHttp->close(); + mHttpreply->close(); + //checkUpdate(header.value("Location")); + // } +} - // No error and no redirect => we read the whole response - - QString responseString = QString(reply->readAll()); - qDebug() << responseString; - - if (!responseString.isEmpty() && - responseString.contains("version") && - responseString.contains("url")) { - - reply->close(); - reply->deleteLater(); - - downloadJsonFinished(responseString); - } +void UBApplicationController::updateRequestFinished(int id, bool error) +{ + if (error){ + qWarning() << "http command id" << id << "return an error"; + } + else{ + /* QString responseString = QString(mHttp->readAll()); + qDebug() << responseString; + if (!responseString.isEmpty() && responseString.contains("version") && responseString.contains("url")){ + mHttp->close(); + mHttp->deleteLater(); + mHttp = 0; + downloadJsonFinished(responseString); + } + */ + QString responseString = QString(mHttpreply->readAll()); + qDebug() << responseString; + if (!responseString.isEmpty() && responseString.contains("version") && responseString.contains("url")){ + mHttpreply->close(); + mHttpreply->deleteLater(); + mHttpreply = 0; + downloadJsonFinished(responseString); + } + } } + void UBApplicationController::downloadJsonFinished(QString currentJson) { QScriptValue scriptValue;