From cc6add0dfda08353a037a03577c7ecfa61926ea8 Mon Sep 17 00:00:00 2001 From: Abestanis Date: Sun, 1 Nov 2020 17:55:32 +0100 Subject: [PATCH 01/10] Use Qt 5.15.1 for the CI checks and the Windows installer --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fa12c099..d726cf5b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,14 +10,14 @@ jobs: matrix: os: [windows-latest, ubuntu-latest] arch: [x86, x64] - qt_version: [5.9.9, 5.14.1] + qt_version: [5.9.9, 5.15.1] include: - os: windows-latest arch: x86 - qt_compile_suite: win32_msvc2017 + qt_compile_suite: win32_msvc2019 - os: windows-latest arch: x64 - qt_compile_suite: win64_msvc2017_64 + qt_compile_suite: win64_msvc2019_64 exclude: # We only want to test for the latest version of Qt on Windows - os: windows-latest From ea1b76511531a5cb9890544cc7b564486c75d3dd Mon Sep 17 00:00:00 2001 From: Abestanis Date: Sun, 1 Nov 2020 17:58:13 +0100 Subject: [PATCH 02/10] Don't use deprecated functions --- src/autoupdater.cpp | 2 +- src/morkparser.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/autoupdater.cpp b/src/autoupdater.cpp index 372da632..dfc827df 100644 --- a/src/autoupdater.cpp +++ b/src/autoupdater.cpp @@ -229,7 +229,7 @@ void AutoUpdater::onInstallerDownloadFinished(QNetworkReply* result) { if (downloadProcessDialog->exec() == QDialog::Rejected || downloadProcessDialog->wasCanceled()) { installerFile.remove(); - } else if (!QProcess::startDetached(installerFile.fileName())) { + } else if (!QProcess::startDetached(installerFile.fileName(), {})) { QMessageBox::critical( nullptr, tr("Update failed"), tr("Failed to start the Birdtray installer."), diff --git a/src/morkparser.cpp b/src/morkparser.cpp index 44beee4e..be1f5add 100644 --- a/src/morkparser.cpp +++ b/src/morkparser.cpp @@ -650,7 +650,7 @@ void MorkParser::parseGroup() QString endAbort = "@$$}~abort~" + id + "}@"; // Find the end of this group - int ofst = morkData_.indexOf( endAbort, morkPos_ ); + int ofst = morkData_.indexOf( endAbort.toUtf8(), morkPos_ ); if ( ofst != -1 ) { @@ -660,7 +660,7 @@ void MorkParser::parseGroup() } // Now look up for success - ofst = morkData_.indexOf( endCommit, morkPos_ ); + ofst = morkData_.indexOf( endCommit.toUtf8(), morkPos_ ); if (ofst == -1) { throw MorkParserException(QCoreApplication::translate( From 567787cd942b1b0ad692ba2448dc6230486f10e2 Mon Sep 17 00:00:00 2001 From: Abestanis Date: Sun, 1 Nov 2020 17:59:03 +0100 Subject: [PATCH 03/10] Use Cbor instead of Json when available --- src/setting_newemail.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/setting_newemail.cpp b/src/setting_newemail.cpp index 2db32ee1..c114f68a 100644 --- a/src/setting_newemail.cpp +++ b/src/setting_newemail.cpp @@ -50,12 +50,20 @@ QJsonObject Setting_NewEmail::toJSON() const Setting_NewEmail Setting_NewEmail::fromByteArray(const QByteArray &str) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) + QCborParserError parserError; + QCborValue object = QCborValue::fromCbor(str, &parserError); + if (parserError.error != QCborError::NoError) { + return Setting_NewEmail(); + } + return fromJSON(object.toJsonValue().toObject()); +#else + // QJsonDocument is deprecated since Qt 5.15 QJsonDocument doc = QJsonDocument::fromBinaryData( str ); - if ( !doc.isObject() ) return Setting_NewEmail(); - return fromJSON( doc.object() ); +#endif } bool Setting_NewEmail::edit() From 84ecbf530ce6754ee00c41169bb41ce31bc27e81 Mon Sep 17 00:00:00 2001 From: Abestanis Date: Sun, 1 Nov 2020 18:01:43 +0100 Subject: [PATCH 04/10] Retry a failed update check every hour instead of relying on the deprecated QNetworkConfigurationManager --- src/trayicon.cpp | 36 ++++++++++++------------------------ src/trayicon.h | 7 ++----- 2 files changed, 14 insertions(+), 29 deletions(-) diff --git a/src/trayicon.cpp b/src/trayicon.cpp index 0d6cad11..c4376e36 100644 --- a/src/trayicon.cpp +++ b/src/trayicon.cpp @@ -14,7 +14,10 @@ #include "birdtrayapp.h" #include "log.h" -TrayIcon::TrayIcon(bool showSettings) +#define UPDATE_RETRY_MS 3600000 + + +TrayIcon::TrayIcon(bool showSettings) : updateRetryTimer(this) { mBlinkingIconOpacity = 1.0; mBlinkingDelta = 0.0; @@ -39,7 +42,11 @@ TrayIcon::TrayIcon(bool showSettings) mThunderbirdWindowExisted = false; mThunderbirdWindowHide = false; connect(QApplication::instance(), &QApplication::aboutToQuit, this, &TrayIcon::onQuit); - + updateRetryTimer.setInterval(UPDATE_RETRY_MS); + updateRetryTimer.setSingleShot(true); + connect(&updateRetryTimer, &QTimer::timeout, + BirdtrayApp::get()->getAutoUpdater(), &AutoUpdater::checkForUpdates); + Settings* settings = BirdtrayApp::get()->getSettings(); mThunderbirdStartTime = QDateTime::currentDateTime().addSecs(settings->mLaunchThunderbirdDelay); @@ -94,10 +101,6 @@ TrayIcon::~TrayIcon() { #ifdef Q_OS_WIN mThunderbirdUpdaterProcess->deleteLater(); #endif /* Q_OS_WIN */ - if (networkConnectivityManager != nullptr) { - networkConnectivityManager->deleteLater(); - networkConnectivityManager = nullptr; - } if (mUnreadMonitor != nullptr) { if (mUnreadMonitor->isRunning()) { mUnreadMonitor->quit(); @@ -760,26 +763,11 @@ void TrayIcon::onQuit() { void TrayIcon::onAutoUpdateCheckFinished(bool foundUpdate, const QString &errorMessage) { Q_UNUSED(foundUpdate) - AutoUpdater* autoUpdater = BirdtrayApp::get()->getAutoUpdater(); if (errorMessage.isNull()) { - disconnect(autoUpdater, &AutoUpdater::onCheckUpdateFinished, + disconnect(BirdtrayApp::get()->getAutoUpdater(), &AutoUpdater::onCheckUpdateFinished, this, &TrayIcon::onAutoUpdateCheckFinished); - } else if (networkConnectivityManager == nullptr) { - networkConnectivityManager = new QNetworkConfigurationManager(); - networkConnectivityManager->updateConfigurations(); - auto callback = [=](const QNetworkConfiguration &config) { - if (config.state() == QNetworkConfiguration::Active) { - if (networkConnectivityManager != nullptr) { - networkConnectivityManager->deleteLater(); - networkConnectivityManager = nullptr; - } - autoUpdater->checkForUpdates(); - } - }; - connect(networkConnectivityManager, &QNetworkConfigurationManager::configurationChanged, - this, callback); - connect(networkConnectivityManager, &QNetworkConfigurationManager::configurationAdded, - this, callback); + } else if (!updateRetryTimer.isActive()) { + updateRetryTimer.start(); } } diff --git a/src/trayicon.h b/src/trayicon.h index a1b9501c..73c38524 100644 --- a/src/trayicon.h +++ b/src/trayicon.h @@ -220,11 +220,8 @@ class TrayIcon : public QSystemTrayIcon // A reference to a Thunderbird updater process. ProcessHandle* mThunderbirdUpdaterProcess; #endif /* Q_OS_WIN */ - - /** - * A manager to check for network connectivity. - */ - QNetworkConfigurationManager* networkConnectivityManager = nullptr; + // A timer that is used to retry for automatic update checks if they fail. + QTimer updateRetryTimer; /** * Whether we have received data about unread emails yet. From df9e7009b3d3a0c483cd05c074572b1007455e39 Mon Sep 17 00:00:00 2001 From: Abestanis Date: Sun, 1 Nov 2020 18:02:21 +0100 Subject: [PATCH 05/10] Remove unused header --- src/trayicon.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/trayicon.h b/src/trayicon.h index 73c38524..a6da7c3e 100644 --- a/src/trayicon.h +++ b/src/trayicon.h @@ -7,7 +7,6 @@ #include #include #include -#include #ifdef Q_OS_WIN # include "processhandle.h" #endif /* Q_OS_WIN */ From eddd3445110d457bdf142aa6c5a96959dd618077 Mon Sep 17 00:00:00 2001 From: Abestanis Date: Sun, 1 Nov 2020 18:03:44 +0100 Subject: [PATCH 06/10] [WIP] Don't use deprecated QProcess::startDetached(string) function --- src/trayicon.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/trayicon.cpp b/src/trayicon.cpp index c4376e36..a80c820a 100644 --- a/src/trayicon.cpp +++ b/src/trayicon.cpp @@ -142,7 +142,7 @@ void TrayIcon::unreadCounterUpdate( unsigned int total, QColor color ) // Replace the %OLD% with the old unread count cmdline.replace( "%OLD%", QString::number( mUnreadCounter ) ); - if ( !QProcess::startDetached( cmdline ) ) + if ( !QProcess::startDetached( cmdline, {} ) ) // FIXME: Arguments Log::debug( "Failed to execute hook command %s", qPrintable( cmdline ) ); else Log::debug( "Executing hook command %s", qPrintable( cmdline ) ); From 6183e827a4e8367ba4d8a5aa3d6c635828c3ca2a Mon Sep 17 00:00:00 2001 From: Abestanis Date: Sun, 1 Nov 2020 20:07:21 +0100 Subject: [PATCH 07/10] Remove the version check for Qt 5.6, we dont support any older Qt versions anymore --- src/trayicon.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/trayicon.cpp b/src/trayicon.cpp index a80c820a..dcbebf8a 100644 --- a/src/trayicon.cpp +++ b/src/trayicon.cpp @@ -692,10 +692,7 @@ void TrayIcon::startThunderbird() mThunderbirdProcess = new QProcess(); connect( mThunderbirdProcess, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(tbProcessFinished(int,QProcess::ExitStatus)) ); - -#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) connect( mThunderbirdProcess, &QProcess::errorOccurred, this, &TrayIcon::tbProcessError ); -#endif mThunderbirdProcess->start(executable, args); } From 905b130bd49ce86c903f81ba71a4e2390c954c8d Mon Sep 17 00:00:00 2001 From: Abestanis Date: Sun, 1 Nov 2020 20:36:04 +0100 Subject: [PATCH 08/10] Try to ignore warning in header --- src/autoupdater.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/autoupdater.h b/src/autoupdater.h index d743dafc..24f5457b 100644 --- a/src/autoupdater.h +++ b/src/autoupdater.h @@ -1,11 +1,14 @@ #ifndef AUTO_UPDATER_H #define AUTO_UPDATER_H -#include #include #include #include #include +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +#include +QT_WARNING_POP #include "updatedialog.h" #include "updatedownloaddialog.h" From 61190e57bdb595b1ee929ff7049ef8173318d873 Mon Sep 17 00:00:00 2001 From: Abestanis Date: Sun, 1 Nov 2020 20:52:43 +0100 Subject: [PATCH 09/10] Fix QT_WARNING_DISABLE_DEPRECATED being potentially undefined --- src/autoupdater.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/autoupdater.h b/src/autoupdater.h index 24f5457b..186be20a 100644 --- a/src/autoupdater.h +++ b/src/autoupdater.h @@ -6,7 +6,9 @@ #include #include QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED +#ifdef QT_WARNING_DISABLE_DEPRECATED + QT_WARNING_DISABLE_DEPRECATED +#endif #include QT_WARNING_POP #include "updatedialog.h" From cf31968485c9ccd6660da642681ca646e05c52b0 Mon Sep 17 00:00:00 2001 From: Abestanis Date: Wed, 29 Jun 2022 10:19:09 +0200 Subject: [PATCH 10/10] Try to fix the build on the Ubuntu CI --- src/setting_newemail.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/setting_newemail.cpp b/src/setting_newemail.cpp index c114f68a..c36d698d 100644 --- a/src/setting_newemail.cpp +++ b/src/setting_newemail.cpp @@ -2,6 +2,9 @@ #include #include #include +#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) +# include +#endif #include "setting_newemail.h" #include "dialogaddeditnewemail.h"