diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index d99ea5a34..b6189e887 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -80,8 +80,9 @@ const char * const OPENTX_COMPANION_DOWNLOAD_URL[] = { }; MainWindow::MainWindow(): - downloadDialog_forWait(NULL), + downloadDialog_forWait(nullptr), checkForUpdatesState(0), + networkManager(nullptr), windowsListActions(new QActionGroup(this)) { // setUnifiedTitleAndToolBarOnMac(true); @@ -252,39 +253,50 @@ QString MainWindow::getCompanionUpdateBaseUrl() void MainWindow::checkForUpdates() { + if (!checkForUpdatesState) { + closeUpdatesWaitDialog(); + if (networkManager) { + networkManager->deleteLater(); + networkManager = nullptr; + } + return; + } + if (checkForUpdatesState & SHOW_DIALOG_WAIT) { checkForUpdatesState -= SHOW_DIALOG_WAIT; downloadDialog_forWait = new downloadDialog(NULL, tr("Checking for updates")); downloadDialog_forWait->show(); } + if (networkManager) + disconnect(networkManager, 0, this, 0); + else + networkManager = new QNetworkAccessManager(this); + + QUrl url; if (checkForUpdatesState & CHECK_COMPANION) { checkForUpdatesState -= CHECK_COMPANION; - // TODO why create each time a network manager? - networkManager = new QNetworkAccessManager(this); - connect(networkManager, SIGNAL(finished(QNetworkReply*)),this, SLOT(checkForCompanionUpdateFinished(QNetworkReply*))); - QUrl url(QString("%1/%2").arg(getCompanionUpdateBaseUrl()).arg(COMPANION_STAMP)); + url.setUrl(QString("%1/%2").arg(getCompanionUpdateBaseUrl()).arg(COMPANION_STAMP)); + connect(networkManager, &QNetworkAccessManager::finished, this, &MainWindow::checkForCompanionUpdateFinished); qDebug() << "Checking for Companion update " << url.url(); - QNetworkRequest request(url); - request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); - networkManager->get(request); } else if (checkForUpdatesState & CHECK_FIRMWARE) { checkForUpdatesState -= CHECK_FIRMWARE; - QString stamp = getCurrentFirmware()->getStampUrl(); + const QString stamp = getCurrentFirmware()->getStampUrl(); if (!stamp.isEmpty()) { - networkManager = new QNetworkAccessManager(this); - connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(checkForFirmwareUpdateFinished(QNetworkReply*))); - QUrl url(stamp); + url.setUrl(stamp); + connect(networkManager, &QNetworkAccessManager::finished, this, &MainWindow::checkForFirmwareUpdateFinished); qDebug() << "Checking for firmware update " << url.url(); - QNetworkRequest request(url); - request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); - networkManager->get(request); } } - else if (checkForUpdatesState==0) { - closeUpdatesWaitDialog(); + if (!url.isValid()) { + checkForUpdates(); + return; } + + QNetworkRequest request(url); + request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); + networkManager->get(request); } void MainWindow::onUpdatesError() @@ -320,6 +332,7 @@ QString MainWindow::seekCodeString(const QByteArray & qba, const QString & label void MainWindow::checkForCompanionUpdateFinished(QNetworkReply * reply) { QByteArray qba = reply->readAll(); + reply->deleteLater(); QString version = seekCodeString(qba, "VERSION"); if (version.isNull()) return onUpdatesError(); @@ -431,6 +444,7 @@ void MainWindow::checkForFirmwareUpdateFinished(QNetworkReply * reply) bool ignore = false; QByteArray qba = reply->readAll(); + reply->deleteLater(); QString versionString = seekCodeString(qba, "VERSION"); QString dateString = seekCodeString(qba, "DATE"); if (versionString.isNull() || dateString.isNull()) diff --git a/companion/src/releasenotesfirmwaredialog.cpp b/companion/src/releasenotesfirmwaredialog.cpp index d219d2cd5..bcce6709c 100644 --- a/companion/src/releasenotesfirmwaredialog.cpp +++ b/companion/src/releasenotesfirmwaredialog.cpp @@ -48,5 +48,6 @@ void ReleaseNotesFirmwareDialog::replyFinished(QNetworkReply * reply) { ui->textEditor->setHtml(reply->readAll()); ui->textEditor->setOpenExternalLinks(true); + reply->deleteLater(); }