diff --git a/src/gui/render.cpp b/src/gui/render.cpp index 4bcf822..a429131 100644 --- a/src/gui/render.cpp +++ b/src/gui/render.cpp @@ -1719,26 +1719,6 @@ int Render::DrawServerWindow() { } int Render::Run() { - latest_version_info_ = CheckUpdate(); - if (!latest_version_info_.empty() && - latest_version_info_.contains("version") && - latest_version_info_["version"].is_string()) { - latest_version_ = 'v' + latest_version_info_["version"].get(); - if (latest_version_info_.contains("releaseNotes") && - latest_version_info_["releaseNotes"].is_string()) { - release_notes_ = latest_version_info_["releaseNotes"].get(); - } else { - release_notes_ = ""; - } - update_available_ = IsNewerVersion(CROSSDESK_VERSION, latest_version_); - if (update_available_) { - show_update_notification_window_ = true; - } - } else { - latest_version_ = ""; - update_available_ = false; - } - path_manager_ = std::make_unique("CrossDesk"); if (path_manager_) { exec_log_path_ = path_manager_->GetLogPath().string(); @@ -1767,6 +1747,29 @@ int Render::Run() { InitializeLogger(); LOG_INFO("CrossDesk version: {}", CROSSDESK_VERSION); + latest_version_info_ = CheckUpdate(); + if (!latest_version_info_.empty() && + latest_version_info_.contains("version") && + latest_version_info_["version"].is_string()) { + latest_version_ = 'v' + latest_version_info_["version"].get(); + if (latest_version_info_.contains("releaseNotes") && + latest_version_info_["releaseNotes"].is_string()) { + release_notes_ = latest_version_info_["releaseNotes"].get(); + } else { + release_notes_ = ""; + } + update_available_ = IsNewerVersion(CROSSDESK_VERSION, latest_version_); + LOG_INFO("Update check: current={}, latest={}, available={}", + CROSSDESK_VERSION, latest_version_, update_available_); + if (update_available_) { + show_update_notification_window_ = true; + } + } else { + latest_version_ = ""; + update_available_ = false; + LOG_WARN("Update check skipped: version.json is empty or missing version"); + } + InitializeSettings(); InitializeSDL(); InitializeModules(); diff --git a/src/version_checker/version_checker.cpp b/src/version_checker/version_checker.cpp index 196692c..7907800 100644 --- a/src/version_checker/version_checker.cpp +++ b/src/version_checker/version_checker.cpp @@ -8,6 +8,8 @@ #include +#include "rd_log.h" + #include #include #include @@ -225,6 +227,15 @@ bool ReadPatchField(const nlohmann::json& json, int* patch) { return false; } +void LogHttpError(const httplib::Result& result) { + LOG_WARN("Failed to fetch version.json: error={}, message={}", + static_cast(result.error()), httplib::to_string(result.error())); +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + LOG_WARN("version.json SSL error={}, OpenSSL error={}", result.ssl_error(), + result.ssl_openssl_error()); +#endif +} + } // namespace std::string ExtractNumericPart(const std::string& ver) { @@ -312,8 +323,10 @@ nlohmann::json CheckUpdate() { cli.set_connection_timeout(5); cli.set_read_timeout(5); + cli.set_follow_location(true); - if (auto res = cli.Get("/version.json")) { + auto res = cli.Get("/version.json"); + if (res) { if (res->status == 200) { try { auto j = nlohmann::json::parse(res->body); @@ -324,16 +337,22 @@ nlohmann::json CheckUpdate() { } latest_patch_ = 0; latest_patch_available_ = ReadPatchField(j, &latest_patch_); + LOG_INFO("Fetched version.json: version={}, releaseDate={}, patch={}", + j.value("version", ""), j.value("releaseDate", ""), + latest_patch_available_ ? latest_patch_ : -1); return j; - } catch (std::exception&) { + } catch (const std::exception& e) { + LOG_WARN("Failed to parse version.json: {}", e.what()); ResetLatestMetadata(); return nlohmann::json{}; } } else { + LOG_WARN("Failed to fetch version.json: HTTP status={}", res->status); ResetLatestMetadata(); return nlohmann::json{}; } } else { + LogHttpError(res); ResetLatestMetadata(); return nlohmann::json{}; } diff --git a/xmake/targets.lua b/xmake/targets.lua index f7a86ab..6b8d0ed 100644 --- a/xmake/targets.lua +++ b/xmake/targets.lua @@ -74,9 +74,14 @@ function setup_targets() set_kind("binary") set_default(false) add_packages("cpp-httplib") + add_deps("rd_log") add_includedirs("src/version_checker") add_files("tests/version_checker_test.cpp", "src/version_checker/version_checker.cpp") + if is_os("macosx") then + add_defines("CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN") + add_frameworks("Security", "CoreFoundation") + end target("screen_capturer") set_kind("object") @@ -177,6 +182,10 @@ function setup_targets() add_deps("rd_log") add_files("src/version_checker/*.cpp") add_includedirs("src/version_checker", {public = true}) + if is_os("macosx") then + add_defines("CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN") + add_frameworks("Security", "CoreFoundation") + end target("tools") set_kind("object")