diff --git a/src/blackcore/setupreader.cpp b/src/blackcore/setupreader.cpp index 0a944eaae..4c72f0b68 100644 --- a/src/blackcore/setupreader.cpp +++ b/src/blackcore/setupreader.cpp @@ -90,6 +90,7 @@ namespace BlackCore if (url.isEmpty()) { CLogMessage(this).warning("Cannot read update info, failed URLs: %1") << this->m_updateInfoUrls.read()->getFailedUrls(); + emit versionSynchronized(false); return; } QNetworkRequest request(url); @@ -144,7 +145,6 @@ namespace BlackCore if (this->isFinishedOrShutdown()) { - CLogMessage(this).debug() << Q_FUNC_INFO; CLogMessage(this).info("Terminated loading bootstrap files"); nwReply->abort(); emit setupSynchronized(false); @@ -234,9 +234,9 @@ namespace BlackCore if (this->isFinishedOrShutdown()) { - CLogMessage(this).debug() << Q_FUNC_INFO; CLogMessage(this).info("Terminated loading of update info"); nwReply->abort(); + emit versionSynchronized(false); return; // stop, terminate straight away, ending thread } @@ -263,6 +263,7 @@ namespace BlackCore if (sameVersionLoaded) { CLogMessage(this).info("Same update info loaded from %1 as already in data cache %2") << urlString << m_updateInfo.getFilename(); + emit versionSynchronized(true); return; // success } @@ -279,11 +280,13 @@ namespace BlackCore if (!m.isEmpty()) { CLogMessage(this).preformatted(m); + emit versionSynchronized(false); return; // issue with cache } else { CLogMessage(this).info("Update info: Updated data cache in %1") << m_updateInfo.getFilename(); + emit versionSynchronized(true); return; // success } // cache } // outdated? @@ -302,6 +305,10 @@ namespace BlackCore { QTimer::singleShot(500, this, &CSetupReader::ps_readSetup); } + else + { + emit versionSynchronized(false); + } } // method } // namespace diff --git a/src/blackcore/setupreader.h b/src/blackcore/setupreader.h index 2fc329218..22d209951 100644 --- a/src/blackcore/setupreader.h +++ b/src/blackcore/setupreader.h @@ -37,6 +37,9 @@ namespace BlackCore //! Setup has been read void setupSynchronized(bool success); + //! Version bas been read + void versionSynchronized(bool success); + protected slots: //! \copydoc CThreadedReader::initialize virtual void initialize() override; diff --git a/src/blackcore/webdataservices.cpp b/src/blackcore/webdataservices.cpp index 728e4d5d3..fbac85ae2 100644 --- a/src/blackcore/webdataservices.cpp +++ b/src/blackcore/webdataservices.cpp @@ -35,8 +35,8 @@ using namespace BlackMisc::Weather; namespace BlackCore { CWebDataServices::CWebDataServices( - CWebReaderFlags::WebReader readerFlags, int autoReadAfterSetupSynchronized, QObject *parent) : - QObject(parent), m_readerFlags(readerFlags), m_autoReadAfterSetupMs(autoReadAfterSetupSynchronized) + CWebReaderFlags::WebReader readerFlags, int autoReadAfterSetupSynchronizedMs, QObject *parent) : + QObject(parent), m_readerFlags(readerFlags), m_autoReadAfterSetupMs(autoReadAfterSetupSynchronizedMs) { this->setObjectName("CWebDataReader"); connect(&CSetupReader::instance(), &CSetupReader::setupSynchronized, this, &CWebDataServices::ps_setupRead); diff --git a/src/blackcore/webdataservices.h b/src/blackcore/webdataservices.h index 61166e65c..b1221ba39 100644 --- a/src/blackcore/webdataservices.h +++ b/src/blackcore/webdataservices.h @@ -14,7 +14,6 @@ #include "blackcore/blackcoreexport.h" #include "blackcore/webreaderflags.h" -#include "blackcore/setupreader.h" #include "blackcore/data/globalsetup.h" #include "blackmisc/aviation/atcstationlist.h" #include "blackmisc/aviation/liverylist.h" @@ -53,7 +52,7 @@ namespace BlackCore public: //! Constructor CWebDataServices(CWebReaderFlags::WebReader readerFlags, - int autoReadAfterSetupSynchronized, QObject *parent = nullptr); + int autoReadAfterSetupSynchronizedMs, QObject *parent = nullptr); //! Shutdown void gracefulShutdown(); diff --git a/src/blackmisc/threadedreader.cpp b/src/blackmisc/threadedreader.cpp index e6145cea2..1f4271453 100644 --- a/src/blackmisc/threadedreader.cpp +++ b/src/blackmisc/threadedreader.cpp @@ -17,7 +17,11 @@ namespace BlackMisc CThreadedReader::CThreadedReader(QObject *owner, const QString &name) : CContinuousWorker(owner, name), m_updateTimer(new QTimer(this)) - { } + { + bool c = connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, &CThreadedReader::gracefulShutdown); + Q_ASSERT_X(c, Q_FUNC_INFO, "Connect failed"); + Q_UNUSED(c); + } qint64 CThreadedReader::lastModifiedMsSinceEpoch(QNetworkReply *nwReply) const { @@ -51,7 +55,10 @@ namespace BlackMisc void CThreadedReader::requestStop() { - QMetaObject::invokeMethod(m_updateTimer, "stop"); + if (m_updateTimer) + { + QMetaObject::invokeMethod(m_updateTimer, "stop"); + } } void CThreadedReader::requestReload() @@ -62,6 +69,7 @@ namespace BlackMisc void CThreadedReader::gracefulShutdown() { + if (this->m_shutdown) { return; } this->m_shutdown = true; this->requestStop(); this->quit(); @@ -69,12 +77,7 @@ namespace BlackMisc CThreadedReader::~CThreadedReader() { - cleanup(); - } - - void CThreadedReader::cleanup() - { - // cleanup code would go here + this->m_shutdown = true; } void CThreadedReader::setInterval(int updatePeriodMs) diff --git a/src/blackmisc/threadedreader.h b/src/blackmisc/threadedreader.h index 6cf4ff822..893e9f0da 100644 --- a/src/blackmisc/threadedreader.h +++ b/src/blackmisc/threadedreader.h @@ -49,9 +49,6 @@ namespace BlackMisc //! Destructor virtual ~CThreadedReader(); - //! \copydoc CContinuousWorker::cleanup - virtual void cleanup() override; - //! Set the update time //! \param updatePeriodMs <=0 stops the timer //! \threadsafe @@ -61,6 +58,7 @@ namespace BlackMisc //! \threadsafe int interval() const; + public slots: //! Graceful shutdown //! \threadsafe void gracefulShutdown(); diff --git a/src/swiftlauncher/swiftlauncher.cpp b/src/swiftlauncher/swiftlauncher.cpp index 6f53a2df8..831ca3d4b 100644 --- a/src/swiftlauncher/swiftlauncher.cpp +++ b/src/swiftlauncher/swiftlauncher.cpp @@ -11,7 +11,7 @@ #include "ui_swiftlauncher.h" #include "blackgui/stylesheetutility.h" #include "blackcore/dbusserver.h" -#include "blackcore/data/updateinfo.h" +#include "blackcore/setupreader.h" #include "blackmisc/network/networkutils.h" #include "blackmisc/icons.h" #include "blackmisc/project.h" @@ -49,10 +49,12 @@ CSwiftLauncher::CSwiftLauncher(QWidget *parent) : connect(ui->tb_SwiftGui, &QPushButton::pressed, this, &CSwiftLauncher::ps_startButtonPressed); connect(ui->tb_Database, &QPushButton::pressed, this, &CSwiftLauncher::ps_startButtonPressed); connect(ui->tb_BackToMain, &QToolButton::pressed, this, &CSwiftLauncher::ps_showMainPage); + connect(&CSetupReader::instance(), &CSetupReader::versionSynchronized, this, &CSwiftLauncher::ps_loadedSetup); new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_L), this, SLOT(ps_showLogPage())); this->ui->le_DBusServerPort->setValidator(new QIntValidator(0, 65535, this)); - QTimer::singleShot(5000, this, &CSwiftLauncher::ps_loadedSetup); //deferred init of setup + + // QTimer::singleShot(5000, this, &CSwiftLauncher::ps_loadedSetup); //deferred init of setup } CSwiftLauncher::~CSwiftLauncher() @@ -254,11 +256,21 @@ QString CSwiftLauncher::toCmdLine(const QString &exe, const QStringList &exeArgs void CSwiftLauncher::ps_loadSetup() { - CSetupReader::instance().requestReload(); + if (!this->ui->le_LatestVersion->text().isEmpty()) + { + this->ui->le_LatestVersion->setText(""); + CSetupReader::instance().requestReload(); + } } -void CSwiftLauncher::ps_loadedSetup() +void CSwiftLauncher::ps_loadedSetup(bool success) { + if (!success) + { + CLogMessage(this).warning("Loading setup or version information failed"); + return; + } + CUpdateInfo updateInfo(this->m_updateInfo.get()); QString latestVersion(updateInfo.getLatestVersion()) ; // need to get this from somewhere CUrlList downloadUrls(updateInfo.getDownloadUrls()); @@ -278,6 +290,11 @@ void CSwiftLauncher::ps_loadedSetup() this->displayLatestNews(); } +void CSwiftLauncher::ps_changedCache() +{ + this->ps_loadedSetup(true); +} + void CSwiftLauncher::ps_startButtonPressed() { QObject *sender = QObject::sender(); diff --git a/src/swiftlauncher/swiftlauncher.h b/src/swiftlauncher/swiftlauncher.h index c6bc25427..5110c2871 100644 --- a/src/swiftlauncher/swiftlauncher.h +++ b/src/swiftlauncher/swiftlauncher.h @@ -14,7 +14,8 @@ #include #include -#include "blackcore/setupreader.h" +#include "blackcore/data/globalsetup.h" +#include "blackcore/data/updateinfo.h" #include "blackgui/enableforframelesswindow.h" #include "blackgui/overlaymessagesframe.h" #include "swiftguistandard/guimodeenums.h" @@ -58,8 +59,8 @@ protected: private: QScopedPointer ui; - BlackCore::CData m_setup { this, &CSwiftLauncher::ps_loadedSetup }; //!< setup cache - BlackCore::CData m_updateInfo { this, &CSwiftLauncher::ps_loadedSetup }; + BlackCore::CData m_setup { this, &CSwiftLauncher::ps_changedCache }; //!< setup cache + BlackCore::CData m_updateInfo { this, &CSwiftLauncher::ps_changedCache }; //!< version cache QString m_executable; QStringList m_executableArgs; @@ -113,7 +114,10 @@ private slots: void ps_loadSetup(); //! Loaded latest version - void ps_loadedSetup(); + void ps_loadedSetup(bool success); + + //! Cache values have been changed + void ps_changedCache(); //! Start button pressed void ps_startButtonPressed();