diff --git a/CMakeLists.txt b/CMakeLists.txt index c0c117fcf1..03a7d2d152 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -687,12 +687,17 @@ function(set_yuzu_qt_components) if (ENABLE_QT_TRANSLATION) list(APPEND YUZU_QT_COMPONENTS2 LinguistTools) endif() - if (USE_DISCORD_PRESENCE) - list(APPEND YUZU_QT_COMPONENTS2 Network) - endif() set(YUZU_QT_COMPONENTS ${YUZU_QT_COMPONENTS2} PARENT_SCOPE) endfunction(set_yuzu_qt_components) +if(ENABLE_QT) + set_yuzu_qt_components() + find_package(Qt6 REQUIRED COMPONENTS ${YUZU_QT_COMPONENTS}) + set(QT_MAJOR_VERSION 6) + # Qt6 sets cxx_std_17 and we need to undo that + set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "") +endif() + if (UNIX AND NOT APPLE AND NOT ANDROID) find_package(PkgConfig REQUIRED) pkg_check_modules(LIBVA libva) @@ -708,14 +713,6 @@ if (NOT (YUZU_USE_BUNDLED_FFMPEG OR YUZU_USE_EXTERNAL_FFMPEG)) set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS "https://github.com/FFmpeg/FFmpeg") endif() -if(ENABLE_QT) - set_yuzu_qt_components() - find_package(Qt6 REQUIRED COMPONENTS ${YUZU_QT_COMPONENTS}) - set(QT_MAJOR_VERSION 6) - # Qt6 sets cxx_std_17 and we need to undo that - set_target_properties(Qt6::Platform PROPERTIES INTERFACE_COMPILE_FEATURES "") -endif() - if (WIN32 AND YUZU_CRASH_DUMPS) set(BREAKPAD_VER "breakpad-c89f9dd") download_bundled_external("breakpad/" ${BREAKPAD_VER} "breakpad-win" BREAKPAD_PREFIX "c89f9dd") diff --git a/src/frontend_common/update_checker.cpp b/src/frontend_common/update_checker.cpp index 230f26dea2..9a8143c788 100644 --- a/src/frontend_common/update_checker.cpp +++ b/src/frontend_common/update_checker.cpp @@ -10,10 +10,6 @@ #include "common/scm_rev.h" #include -#ifndef CPPHTTPLIB_OPENSSL_SUPPORT -#define CPPHTTPLIB_OPENSSL_SUPPORT -#endif - #include #ifdef YUZU_BUNDLED_OPENSSL diff --git a/src/qt_common/CMakeLists.txt b/src/qt_common/CMakeLists.txt index e80fde24e0..39dd1a7460 100644 --- a/src/qt_common/CMakeLists.txt +++ b/src/qt_common/CMakeLists.txt @@ -36,7 +36,11 @@ if (USE_DISCORD_PRESENCE) discord/discord_impl.cpp discord/discord_impl.h ) - target_link_libraries(qt_common PUBLIC DiscordRPC::discord-rpc Qt6::Network) + target_link_libraries(qt_common PUBLIC DiscordRPC::discord-rpc httplib::httplib) + if (YUZU_USE_BUNDLED_OPENSSL) + target_link_libraries(qt_common PUBLIC OpenSSL::SSL) + target_compile_definitions(qt_common PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) + endif() target_compile_definitions(qt_common PUBLIC USE_DISCORD_PRESENCE) endif() diff --git a/src/qt_common/discord/discord_impl.cpp b/src/qt_common/discord/discord_impl.cpp index 217da77097..d9af73f8da 100644 --- a/src/qt_common/discord/discord_impl.cpp +++ b/src/qt_common/discord/discord_impl.cpp @@ -8,17 +8,23 @@ #include #include -#include -#include +#include +#include #include #include +#include #include "common/common_types.h" #include "common/string_util.h" #include "core/core.h" #include "core/loader/loader.h" -#include "qt_common/discord/discord_impl.h" + +#include "discord_impl.h" + +#ifdef YUZU_BUNDLED_OPENSSL +#include +#endif namespace DiscordRPC { @@ -44,6 +50,7 @@ std::string DiscordImpl::GetGameString(const std::string& title) { // Replace spaces with dashes std::replace(icon_name.begin(), icon_name.end(), ' ', '-'); + boost::replace_all(icon_name, "é", "e"); // Remove non-alphanumeric characters but keep dashes std::erase_if(icon_name, [](char c) { return !std::isalnum(c) && c != '-'; }); @@ -81,6 +88,8 @@ void DiscordImpl::UpdateGameStatus(bool use_default) { presence.details = "Currently in game"; presence.startTimestamp = start_time; Discord_UpdatePresence(&presence); + + qDebug() << "game status updated"; } void DiscordImpl::Update() { @@ -97,15 +106,22 @@ void DiscordImpl::Update() { "https://raw.githubusercontent.com/eden-emulator/boxart/refs/heads/master/img/{}.png", icon_name); - QNetworkAccessManager manager; - QNetworkRequest request; - request.setUrl(QUrl(QString::fromStdString(game_url))); - request.setTransferTimeout(3000); - QNetworkReply* reply = manager.head(request); - QEventLoop request_event_loop; - reply->connect(reply, &QNetworkReply::finished, &request_event_loop, &QEventLoop::quit); - request_event_loop.exec(); - UpdateGameStatus(reply->error()); + httplib::SSLClient client(game_url); + client.set_connection_timeout(3); + client.set_read_timeout(3); + client.set_follow_location(true); + +#ifdef YUZU_BUNDLED_OPENSSL + client.load_ca_cert_store(kCert, sizeof(kCert)); +#endif + + httplib::Request request{ + .method = "HEAD", + .path = game_url, + }; + + auto res = client.send(request); + UpdateGameStatus(res && res->status == 200); return; }