From d598631a770296236da601d0525d4f444039fa24 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Tue, 26 Mar 2024 23:46:56 -0500 Subject: [PATCH] Remove temporary installer files on application startup --- scwx-qt/source/scwx/qt/main/main_window.cpp | 10 +++++-- .../source/scwx/qt/manager/update_manager.cpp | 29 +++++++++++++++++++ .../source/scwx/qt/manager/update_manager.hpp | 2 ++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 85cff2fe..3249577a 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -627,9 +627,13 @@ void MainWindowImpl::AsyncSetup() // Check for updates if (generalSettings.update_notifications_enabled().GetValue()) { - boost::asio::post( - threadPool_, - [this]() { updateManager_->CheckForUpdates(main::kVersionString_); }); + boost::asio::post(threadPool_, + [this]() + { + manager::UpdateManager::RemoveTemporaryReleases(); + updateManager_->CheckForUpdates( + main::kVersionString_); + }); } } diff --git a/scwx-qt/source/scwx/qt/manager/update_manager.cpp b/scwx-qt/source/scwx/qt/manager/update_manager.cpp index 08304263..d12874cb 100644 --- a/scwx-qt/source/scwx/qt/manager/update_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/update_manager.cpp @@ -6,6 +6,7 @@ #include #include #include +#include namespace scwx { @@ -230,6 +231,34 @@ UpdateManager::Impl::FindLatestRelease() return {latestRelease, latestReleaseVersion}; } +void UpdateManager::RemoveTemporaryReleases() +{ +#if defined(_WIN32) + const std::string destination { + QStandardPaths::writableLocation(QStandardPaths::TempLocation) + .toStdString()}; + const std::filesystem::path destinationPath {destination}; + std::filesystem::directory_iterator it {destinationPath}; + + for (auto& file : it) + { + if (file.is_regular_file() && file.path().string().ends_with(".msi") && + file.path().stem().string().starts_with("supercell-wx-")) + { + logger_->info("Removing temporary installer: {}", + file.path().string()); + + std::error_code error; + if (!std::filesystem::remove(file.path(), error)) + { + logger_->warn("Error removing temporary installer: {}", + error.message()); + } + } + } +#endif +} + std::shared_ptr UpdateManager::Instance() { static std::weak_ptr updateManagerReference_ {}; diff --git a/scwx-qt/source/scwx/qt/manager/update_manager.hpp b/scwx-qt/source/scwx/qt/manager/update_manager.hpp index 10a97350..5995c237 100644 --- a/scwx-qt/source/scwx/qt/manager/update_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/update_manager.hpp @@ -27,6 +27,8 @@ public: bool CheckForUpdates(const std::string& currentVersion = {}); + static void RemoveTemporaryReleases(); + static std::shared_ptr Instance(); signals: