diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 5bb9eeb7..e164210f 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -4,9 +4,11 @@ #include "./ui_main_window.h" #include +#include #include #include #include +#include #include #include #include @@ -18,10 +20,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include @@ -61,8 +65,10 @@ public: imGuiDebugDialog_ {nullptr}, radarSiteDialog_ {nullptr}, settingsDialog_ {nullptr}, + updateDialog_ {nullptr}, radarProductModel_ {nullptr}, textEventManager_ {manager::TextEventManager::Instance()}, + updateManager_ {manager::UpdateManager::Instance()}, maps_ {}, elevationCuts_ {}, elevationButtonsChanged_ {false}, @@ -94,6 +100,7 @@ public: } ~MainWindowImpl() = default; + void AsyncSetup(); void ConfigureMapLayout(); void ConnectMapSignals(); void ConnectOtherSignals(); @@ -126,9 +133,11 @@ public: ui::ImGuiDebugDialog* imGuiDebugDialog_; ui::RadarSiteDialog* radarSiteDialog_; ui::SettingsDialog* settingsDialog_; + ui::UpdateDialog* updateDialog_; std::unique_ptr radarProductModel_; std::shared_ptr textEventManager_; + std::shared_ptr updateManager_; std::vector maps_; std::vector elevationCuts_; @@ -223,6 +232,9 @@ MainWindow::MainWindow(QWidget* parent) : // About Dialog p->aboutDialog_ = new ui::AboutDialog(this); + // Update Dialog + p->updateDialog_ = new ui::UpdateDialog(this); + auto& mapSettings = manager::SettingsManager::map_settings(); for (size_t i = 0; i < p->maps_.size(); i++) { @@ -236,6 +248,7 @@ MainWindow::MainWindow(QWidget* parent) : p->ConnectMapSignals(); p->ConnectOtherSignals(); p->HandleFocusChange(p->activeMap_); + p->AsyncSetup(); Application::FinishInitialization(); } @@ -381,6 +394,29 @@ void MainWindow::on_actionGitHubRepository_triggered() QDesktopServices::openUrl(QUrl {"https://github.com/dpaulat/supercell-wx"}); } +void MainWindow::on_actionCheckForUpdates_triggered() +{ + scwx::util::async( + [this]() + { + if (!p->updateManager_->CheckForUpdates(main::kVersionString_)) + { + QMetaObject::invokeMethod( + this, + [this]() + { + QMessageBox* messageBox = new QMessageBox(this); + messageBox->setIcon(QMessageBox::Icon::Information); + messageBox->setWindowTitle(tr("Check for Updates")); + messageBox->setText(tr("Supercell Wx is up to date.")); + messageBox->setStandardButtons( + QMessageBox::StandardButton::Ok); + messageBox->show(); + }); + } + }); +} + void MainWindow::on_actionAboutSupercellWx_triggered() { p->aboutDialog_->show(); @@ -468,6 +504,13 @@ void MainWindow::on_resourceTreeView_doubleClicked(const QModelIndex& index) p->activeMap_->SelectRadarProduct(group, product, 0, time); } +void MainWindowImpl::AsyncSetup() +{ + // Check for updates + scwx::util::async( + [this]() { updateManager_->CheckForUpdates(main::kVersionString_); }); +} + void MainWindowImpl::ConfigureMapLayout() { auto& generalSettings = manager::SettingsManager::general_settings(); @@ -629,6 +672,15 @@ void MainWindowImpl::ConnectOtherSignals() map->SelectRadarSite(selectedRadarSite); } }); + connect(updateManager_.get(), + &manager::UpdateManager::UpdateAvailable, + this, + [this](const std::string& latestVersion, + const types::gh::Release& latestRelease) + { + updateDialog_->UpdateReleaseInfo(latestVersion, latestRelease); + updateDialog_->show(); + }); } void MainWindowImpl::HandleFocusChange(QWidget* focused) diff --git a/scwx-qt/source/scwx/qt/main/main_window.hpp b/scwx-qt/source/scwx/qt/main/main_window.hpp index f67374fe..6ed96aba 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.hpp +++ b/scwx-qt/source/scwx/qt/main/main_window.hpp @@ -41,6 +41,7 @@ private slots: void on_actionUserManual_triggered(); void on_actionDiscord_triggered(); void on_actionGitHubRepository_triggered(); + void on_actionCheckForUpdates_triggered(); void on_actionAboutSupercellWx_triggered(); void on_radarSiteSelectButton_clicked(); void on_resourceTreeCollapseAllButton_clicked(); diff --git a/scwx-qt/source/scwx/qt/main/main_window.ui b/scwx-qt/source/scwx/qt/main/main_window.ui index 77d45c5e..9a66af52 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.ui +++ b/scwx-qt/source/scwx/qt/main/main_window.ui @@ -68,6 +68,7 @@ + @@ -404,6 +405,11 @@ Dump Radar &Product Records + + + &Check for Updates + +