From 1d4aa96e9bfdc1da8dc0debbb490c7fa4e7bca50 Mon Sep 17 00:00:00 2001 From: Lars Toenning Date: Sat, 13 Jun 2020 21:58:07 +0200 Subject: [PATCH] Add warning about expire and redesign warning/error popup Fixes Github Issue #38 --- src/blackconfig/buildconfig.cpp | 5 +++++ src/blackconfig/buildconfig.h | 3 +++ src/blackcore/application.cpp | 27 +++++++++++++++++-------- src/blackcore/application.h | 5 ++++- src/blackcore/setupreader.cpp | 2 +- src/blackgui/guiapplication.cpp | 36 ++++++++++++++++----------------- src/blackgui/guiapplication.h | 7 ++++++- 7 files changed, 56 insertions(+), 29 deletions(-) diff --git a/src/blackconfig/buildconfig.cpp b/src/blackconfig/buildconfig.cpp index e920e1c19..72bc98b50 100644 --- a/src/blackconfig/buildconfig.cpp +++ b/src/blackconfig/buildconfig.cpp @@ -97,6 +97,11 @@ namespace BlackConfig return QDateTime::currentDateTime() > getEol(); } + int CBuildConfig::daysTillLifetimeExpiry() + { + return QDateTime::currentDateTime().daysTo(getEol()); + } + const QString boolToYesNo(bool v) { return v ? QStringLiteral("yes") : QStringLiteral("no"); diff --git a/src/blackconfig/buildconfig.h b/src/blackconfig/buildconfig.h index 8cbf3f9cf..94c7ef350 100644 --- a/src/blackconfig/buildconfig.h +++ b/src/blackconfig/buildconfig.h @@ -109,6 +109,9 @@ namespace BlackConfig //! Lifetime ended? static bool isLifetimeExpired(); + //! Days till lifetime end + static int daysTillLifetimeExpiry(); + //! Vatsim client id static int vatsimClientId(); // defined in buildconfig_gen.cpp.in diff --git a/src/blackcore/application.cpp b/src/blackcore/application.cpp index d7ae79086..0872ae238 100644 --- a/src/blackcore/application.cpp +++ b/src/blackcore/application.cpp @@ -1404,14 +1404,21 @@ namespace BlackCore // checks if (CBuildConfig::isLifetimeExpired()) { - this->cmdLineErrorMessage("Program expired " + CBuildConfig::getEol().toString()); + this->cmdLineErrorMessage("Program expired since " + CBuildConfig::getEol().date().toString(), + "This version is no longer supported and usable. You have to install a newer version."); return false; } + if(CBuildConfig::daysTillLifetimeExpiry() <= 30) + { + this->cmdLineWarningMessage("This version will expire in " + QString::number(CBuildConfig::daysTillLifetimeExpiry()) + " days!", + "You'll need to update swift in order to use it thereafter."); + } + const QStringList verifyErrors = CDirectoryUtils::verifyRuntimeDirectoriesAndFiles(); if (!verifyErrors.isEmpty() && !m_applicationInfo.isUnitTest()) { - this->cmdLineErrorMessage("Missing runtime directories/files: " + verifyErrors.join(", ")); + this->cmdLineErrorMessage("Missing runtime directories/files:", verifyErrors.join(", ")); return false; } @@ -1419,13 +1426,13 @@ namespace BlackCore const QStringList args(QCoreApplication::instance()->arguments()); if (!m_parser.parse(args)) { - this->cmdLineErrorMessage(m_parser.errorText()); + this->cmdLineErrorMessage("Parser error:", m_parser.errorText()); return false; } if (m_singleApplication && m_alreadyRunning && !this->skipSingleApplicationCheck()) { - this->cmdLineErrorMessage("Program must only run once"); + this->cmdLineErrorMessage("Program must only run once", "You cannot run two or more instances side-by-side."); return false; } @@ -1461,12 +1468,16 @@ namespace BlackCore return !this->synchronizeSetup(timeoutMs).hasErrorMessages(); } - bool CApplication::cmdLineErrorMessage(const QString &errorMessage, bool retry) const + bool CApplication::cmdLineWarningMessage(const QString &text, const QString &informativeText) const + { + fputs(qPrintable(text + informativeText), stderr); + return false; + } + + bool CApplication::cmdLineErrorMessage(const QString &text, const QString &informativeText, bool retry) const { Q_UNUSED(retry) // only works with UI version - fputs(qPrintable(errorMessage), stderr); - fputs("\n\n", stderr); - fputs(qPrintable(m_parser.helpText()), stderr); + fputs(qPrintable(text + informativeText), stderr); return false; } diff --git a/src/blackcore/application.h b/src/blackcore/application.h index 2b8dbc6cd..c4b6533d7 100644 --- a/src/blackcore/application.h +++ b/src/blackcore/application.h @@ -299,8 +299,11 @@ namespace BlackCore //! \see synchronizeSetup virtual bool parseAndSynchronizeSetup(int timeoutMs = BlackMisc::Network::CNetworkUtils::getLongTimeoutMs()); + //! Display warning message + virtual bool cmdLineWarningMessage(const QString &text, const QString &informativeText = "") const; + //! Display error message - virtual bool cmdLineErrorMessage(const QString &cmdLineErrorMessage, bool retry = false) const; + virtual bool cmdLineErrorMessage(const QString &text, const QString &informativeText = "", bool retry = false) const; //! Display error message virtual bool cmdLineErrorMessage(const BlackMisc::CStatusMessageList &msgs, bool retry = false) const; diff --git a/src/blackcore/setupreader.cpp b/src/blackcore/setupreader.cpp index 722034a7c..0b14b5a20 100644 --- a/src/blackcore/setupreader.cpp +++ b/src/blackcore/setupreader.cpp @@ -184,7 +184,7 @@ namespace BlackCore ok = true; break; } - retry = sApp->cmdLineErrorMessage(QStringLiteral("URL '%1' not reachable").arg(urlString), true); + retry = sApp->cmdLineErrorMessage(QStringLiteral("URL '%1' not reachable").arg(urlString), "", true); } while (retry); } diff --git a/src/blackgui/guiapplication.cpp b/src/blackgui/guiapplication.cpp index e4a11fbb5..ec26957ef 100644 --- a/src/blackgui/guiapplication.cpp +++ b/src/blackgui/guiapplication.cpp @@ -590,26 +590,27 @@ namespace BlackGui return "1.0"; } - bool CGuiApplication::cmdLineErrorMessage(const QString &errorMessage, bool retry) const + bool CGuiApplication::cmdLineWarningMessage(const QString &text, const QString &informativeText) const { - const QString helpText(beautifyHelpMessage(m_parser.helpText())); - constexpr int MaxLength = 60; + QMessageBox warningBox(QMessageBox::Warning, QGuiApplication::applicationDisplayName(), "" +text + ""); + warningBox.setInformativeText(informativeText); + return warningBox.exec(); + } - QString htmlMsg; - if (errorMessage.length() > MaxLength) - { - htmlMsg = "

" + errorMessage.left(MaxLength) + "..." + "

" + - "Details: " + errorMessage + "

"; - } + bool CGuiApplication::cmdLineErrorMessage(const QString &text, const QString &informativeText, bool retry) const + { + QMessageBox errorBox(QMessageBox::Critical, QGuiApplication::applicationDisplayName(), "" +text + ""); + if(informativeText.length() < 300) + errorBox.setInformativeText(informativeText); else - { - htmlMsg = "

" + errorMessage + "

"; - } - htmlMsg += helpText + ""; + errorBox.setDetailedText(informativeText); + + errorBox.addButton(QMessageBox::Abort); + if(retry) + errorBox.addButton(QMessageBox::Retry); + + const int r = errorBox.exec(); - const int r = QMessageBox::warning(nullptr, - QGuiApplication::applicationDisplayName(), - htmlMsg, QMessageBox::Abort, retry ? QMessageBox::Retry : QMessageBox::NoButton); return (r == QMessageBox::Retry); } @@ -619,11 +620,10 @@ namespace BlackGui if (!msgs.hasErrorMessages()) { return false; } static const CPropertyIndexList propertiesSingle({ CStatusMessage::IndexMessage }); static const CPropertyIndexList propertiesMulti({ CStatusMessage::IndexSeverityAsString, CStatusMessage::IndexMessage }); - const QString helpText(CGuiApplication::beautifyHelpMessage(m_parser.helpText())); const QString msgsHtml = msgs.toHtml(msgs.size() > 1 ? propertiesMulti : propertiesSingle); const int r = QMessageBox::critical(nullptr, QGuiApplication::applicationDisplayName(), - "" + msgsHtml + "

" + helpText + "", QMessageBox::Abort, retry ? QMessageBox::Retry : QMessageBox::NoButton); + "" + msgsHtml + "", QMessageBox::Abort, retry ? QMessageBox::Retry : QMessageBox::NoButton); return (r == QMessageBox::Retry); } diff --git a/src/blackgui/guiapplication.h b/src/blackgui/guiapplication.h index c6caa9f4d..e7e26d8ed 100644 --- a/src/blackgui/guiapplication.h +++ b/src/blackgui/guiapplication.h @@ -125,9 +125,14 @@ namespace BlackGui //! Set window title QString setExtraWindowTitle(const QString &extraInfo, QWidget *mainWindowWidget = mainApplicationWidget()) const; + //! \name print warning message + //! @{ + virtual bool cmdLineWarningMessage(const QString &text, const QString &informativeText) const override; + //! @} + //! \name print messages generated during parsing / cmd handling //! @{ - virtual bool cmdLineErrorMessage(const QString &cmdLineErrorMessage, bool retry = false) const override; + virtual bool cmdLineErrorMessage(const QString &text, const QString &informativeText = "", bool retry = false) const override; virtual bool cmdLineErrorMessage(const BlackMisc::CStatusMessageList &msgs, bool retry = false) const override; //! @}