diff options
| author | Inix <Nixy01@proton.me> | 2025-10-21 23:36:35 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-10-21 23:36:35 +0200 |
| commit | cde02bfe46c43396b19ba74605cd97ca716bcad2 (patch) | |
| tree | 891d620531ddb754578b0b73d392c1e7693f1563 /src/yuzu/update_checker.cpp | |
| parent | 1971fbe5afcc074a7b5abf569db7d066732184ac (diff) | |
[frontend, android] Move update_checker to frontend_common and add Android support (#2687)
I still have to add a setting to disable the auto update checking on a later PR, firstly lets make sure i didn't accidentally break anything with CMAKE. or QT.
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2687
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: Inix <Nixy01@proton.me>
Co-committed-by: Inix <Nixy01@proton.me>
Diffstat (limited to 'src/yuzu/update_checker.cpp')
| -rw-r--r-- | src/yuzu/update_checker.cpp | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/src/yuzu/update_checker.cpp b/src/yuzu/update_checker.cpp deleted file mode 100644 index af56068682..0000000000 --- a/src/yuzu/update_checker.cpp +++ /dev/null @@ -1,137 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -// SPDX-License-Identifier: GPL-3.0-or-later - -// Copyright Citra Emulator Project / Azahar Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#include "update_checker.h" -#include "common/logging/log.h" -#include "common/scm_rev.h" -#include <fmt/format.h> - -#ifndef CPPHTTPLIB_OPENSSL_SUPPORT -#define CPPHTTPLIB_OPENSSL_SUPPORT -#endif - -#include <httplib.h> - -#ifdef YUZU_BUNDLED_OPENSSL -#include <openssl/cert.h> -#endif - -#include <nlohmann/json.hpp> -#include <optional> -#include <qdebug.h> -#include <string> - -std::optional<std::string> UpdateChecker::GetResponse(std::string url, std::string path) -{ - try { - constexpr std::size_t timeout_seconds = 15; - - std::unique_ptr<httplib::Client> client = std::make_unique<httplib::Client>(url); - client->set_connection_timeout(timeout_seconds); - client->set_read_timeout(timeout_seconds); - client->set_write_timeout(timeout_seconds); - -#ifdef YUZU_BUNDLED_OPENSSL - client->load_ca_cert_store(kCert, sizeof(kCert)); -#endif - - if (client == nullptr) { - LOG_ERROR(Frontend, "Invalid URL {}{}", url, path); - return {}; - } - - httplib::Request request{ - .method = "GET", - .path = path, - }; - - client->set_follow_location(true); - httplib::Result result; - result = client->send(request); - - if (!result) { - LOG_ERROR(Frontend, "GET to {}{} returned null", url, path); - return {}; - } - - const auto &response = result.value(); - if (response.status >= 400) { - LOG_ERROR(Frontend, - "GET to {}{} returned error status code: {}", - url, - path, - response.status); - return {}; - } - if (!response.headers.contains("content-type")) { - LOG_ERROR(Frontend, "GET to {}{} returned no content", url, path); - return {}; - } - - return response.body; - } catch (std::exception &e) { - qDebug() << e.what(); - return std::nullopt; - } -} - -std::optional<std::string> UpdateChecker::GetLatestRelease(bool include_prereleases) -{ - const auto update_check_url = std::string{Common::g_build_auto_update_api}; - std::string update_check_path = fmt::format("/repos/{}", - std::string{Common::g_build_auto_update_repo}); - try { - if (include_prereleases) { // This can return either a prerelease or a stable release, - // whichever is more recent. - const auto update_check_tags_path = update_check_path + "/tags"; - const auto update_check_releases_path = update_check_path + "/releases"; - - const auto tags_response = GetResponse(update_check_url, update_check_tags_path); - const auto releases_response = GetResponse(update_check_url, update_check_releases_path); - - if (!tags_response || !releases_response) - return {}; - - const std::string latest_tag - = nlohmann::json::parse(tags_response.value()).at(0).at("name"); - const bool latest_tag_has_release = releases_response.value().find( - fmt::format("\"{}\"", latest_tag)) - != std::string::npos; - - // If there is a newer tag, but that tag has no associated release, don't prompt the - // user to update. - if (!latest_tag_has_release) - return {}; - - return latest_tag; - } else { // This is a stable release, only check for other stable releases. - update_check_path += "/releases/latest"; - const auto response = GetResponse(update_check_url, update_check_path); - - if (!response) - return {}; - - const std::string latest_tag = nlohmann::json::parse(response.value()).at("tag_name"); - return latest_tag; - } - - } catch (nlohmann::detail::out_of_range &) { - LOG_ERROR(Frontend, - "Parsing JSON response from {}{} failed during update check: " - "nlohmann::detail::out_of_range", - update_check_url, - update_check_path); - return {}; - } catch (nlohmann::detail::type_error &) { - LOG_ERROR(Frontend, - "Parsing JSON response from {}{} failed during update check: " - "nlohmann::detail::type_error", - update_check_url, - update_check_path); - return {}; - } -} |
