From 494ce0b5ff9e63c5c83b1fdde52583120def998a Mon Sep 17 00:00:00 2001 From: Vitor Kiguchi Date: Thu, 20 Aug 2020 04:46:35 -0300 Subject: [PATCH 1/3] Move webservice settings to own file --- src/citra/config.cpp | 9 ++++---- src/citra_qt/configuration/config.cpp | 17 +++++++------- src/citra_qt/configuration/configure_web.cpp | 17 +++++++------- src/citra_qt/main.cpp | 5 ++-- src/citra_qt/multiplayer/direct_connect.cpp | 7 +++--- src/citra_qt/multiplayer/host_room.cpp | 17 +++++++------- src/citra_qt/multiplayer/lobby.cpp | 15 ++++++------ src/core/announce_multiplayer_session.cpp | 14 ++++++------ src/core/settings.h | 6 ----- src/core/telemetry_session.cpp | 17 +++++++------- src/dedicated_room/citra-room.cpp | 24 ++++++++------------ src/network/CMakeLists.txt | 2 ++ src/network/network_settings.cpp | 11 +++++++++ src/network/network_settings.h | 20 ++++++++++++++++ 14 files changed, 105 insertions(+), 76 deletions(-) create mode 100644 src/network/network_settings.cpp create mode 100644 src/network/network_settings.h diff --git a/src/citra/config.cpp b/src/citra/config.cpp index 5037c1b41..bcb97372b 100644 --- a/src/citra/config.cpp +++ b/src/citra/config.cpp @@ -18,6 +18,7 @@ #include "core/settings.h" #include "input_common/main.h" #include "input_common/udp/client.h" +#include "network/network_settings.h" Config::Config() { // TODO: Don't hardcode the path; let the frontend decide where to put the config files. @@ -275,12 +276,12 @@ void Config::ReadValues() { } // Web Service - Settings::values.enable_telemetry = + NetSettings::values.enable_telemetry = sdl2_config->GetBoolean("WebService", "enable_telemetry", true); - Settings::values.web_api_url = + NetSettings::values.web_api_url = sdl2_config->GetString("WebService", "web_api_url", "https://api.citra-emu.org"); - Settings::values.citra_username = sdl2_config->GetString("WebService", "citra_username", ""); - Settings::values.citra_token = sdl2_config->GetString("WebService", "citra_token", ""); + NetSettings::values.citra_username = sdl2_config->GetString("WebService", "citra_username", ""); + NetSettings::values.citra_token = sdl2_config->GetString("WebService", "citra_token", ""); // Video Dumping Settings::values.output_format = diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index f318b2825..f48609849 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -15,6 +15,7 @@ #include "input_common/main.h" #include "input_common/udp/client.h" #include "network/network.h" +#include "network/network_settings.h" Config::Config() { // TODO: Don't hardcode the path; let the frontend decide where to put the config files. @@ -702,15 +703,15 @@ void Config::ReadUpdaterValues() { void Config::ReadWebServiceValues() { qt_config->beginGroup(QStringLiteral("WebService")); - Settings::values.enable_telemetry = + NetSettings::values.enable_telemetry = ReadSetting(QStringLiteral("enable_telemetry"), true).toBool(); - Settings::values.web_api_url = + NetSettings::values.web_api_url = ReadSetting(QStringLiteral("web_api_url"), QStringLiteral("https://api.citra-emu.org")) .toString() .toStdString(); - Settings::values.citra_username = + NetSettings::values.citra_username = ReadSetting(QStringLiteral("citra_username")).toString().toStdString(); - Settings::values.citra_token = + NetSettings::values.citra_token = ReadSetting(QStringLiteral("citra_token")).toString().toStdString(); qt_config->endGroup(); @@ -1160,14 +1161,14 @@ void Config::SaveUpdaterValues() { void Config::SaveWebServiceValues() { qt_config->beginGroup(QStringLiteral("WebService")); - WriteSetting(QStringLiteral("enable_telemetry"), Settings::values.enable_telemetry, true); + WriteSetting(QStringLiteral("enable_telemetry"), NetSettings::values.enable_telemetry, true); WriteSetting(QStringLiteral("web_api_url"), - QString::fromStdString(Settings::values.web_api_url), + QString::fromStdString(NetSettings::values.web_api_url), QStringLiteral("https://api.citra-emu.org")); WriteSetting(QStringLiteral("citra_username"), - QString::fromStdString(Settings::values.citra_username)); + QString::fromStdString(NetSettings::values.citra_username)); WriteSetting(QStringLiteral("citra_token"), - QString::fromStdString(Settings::values.citra_token)); + QString::fromStdString(NetSettings::values.citra_token)); qt_config->endGroup(); } diff --git a/src/citra_qt/configuration/configure_web.cpp b/src/citra_qt/configuration/configure_web.cpp index cc7ca675f..e97a22720 100644 --- a/src/citra_qt/configuration/configure_web.cpp +++ b/src/citra_qt/configuration/configure_web.cpp @@ -7,8 +7,8 @@ #include #include "citra_qt/configuration/configure_web.h" #include "citra_qt/uisettings.h" -#include "core/settings.h" #include "core/telemetry_session.h" +#include "network/network_settings.h" #include "ui_configure_web.h" static constexpr char token_delimiter{':'}; @@ -70,16 +70,16 @@ void ConfigureWeb::SetConfiguration() { tr("What is my token?")); - ui->toggle_telemetry->setChecked(Settings::values.enable_telemetry); + ui->toggle_telemetry->setChecked(NetSettings::values.enable_telemetry); - if (Settings::values.citra_username.empty()) { + if (NetSettings::values.citra_username.empty()) { ui->username->setText(tr("Unspecified")); } else { - ui->username->setText(QString::fromStdString(Settings::values.citra_username)); + ui->username->setText(QString::fromStdString(NetSettings::values.citra_username)); } ui->edit_token->setText(QString::fromStdString( - GenerateDisplayToken(Settings::values.citra_username, Settings::values.citra_token))); + GenerateDisplayToken(NetSettings::values.citra_username, NetSettings::values.citra_token))); // Connect after setting the values, to avoid calling OnLoginChanged now connect(ui->edit_token, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged); @@ -91,12 +91,13 @@ void ConfigureWeb::SetConfiguration() { } void ConfigureWeb::ApplyConfiguration() { - Settings::values.enable_telemetry = ui->toggle_telemetry->isChecked(); + NetSettings::values.enable_telemetry = ui->toggle_telemetry->isChecked(); UISettings::values.enable_discord_presence = ui->toggle_discordrpc->isChecked(); if (user_verified) { - Settings::values.citra_username = + NetSettings::values.citra_username = UsernameFromDisplayToken(ui->edit_token->text().toStdString()); - Settings::values.citra_token = TokenFromDisplayToken(ui->edit_token->text().toStdString()); + NetSettings::values.citra_token = + TokenFromDisplayToken(ui->edit_token->text().toStdString()); } else { QMessageBox::warning( this, tr("Token not verified"), diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 607cd71b2..1c14da3d3 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -85,6 +85,7 @@ #include "core/savestate.h" #include "core/settings.h" #include "game_list_p.h" +#include "network/network_settings.h" #include "ui_main.h" #include "video_core/renderer_base.h" #include "video_core/video_core.h" @@ -130,7 +131,7 @@ void GMainWindow::ShowTelemetryCallout() { "data is collected to help improve Citra. " "

Would you like to share your usage data with us?"); if (QMessageBox::question(this, tr("Telemetry"), telemetry_message) != QMessageBox::Yes) { - Settings::values.enable_telemetry = false; + NetSettings::values.enable_telemetry = false; Settings::Apply(); } } @@ -1623,7 +1624,7 @@ void GMainWindow::OnLoadComplete() { } void GMainWindow::OnMenuReportCompatibility() { - if (!Settings::values.citra_token.empty() && !Settings::values.citra_username.empty()) { + if (!NetSettings::values.citra_token.empty() && !NetSettings::values.citra_username.empty()) { CompatDB compatdb{this}; compatdb.exec(); } else { diff --git a/src/citra_qt/multiplayer/direct_connect.cpp b/src/citra_qt/multiplayer/direct_connect.cpp index 2ce935f23..feaea69c9 100644 --- a/src/citra_qt/multiplayer/direct_connect.cpp +++ b/src/citra_qt/multiplayer/direct_connect.cpp @@ -16,8 +16,8 @@ #include "citra_qt/multiplayer/validation.h" #include "citra_qt/uisettings.h" #include "core/hle/service/cfg/cfg.h" -#include "core/settings.h" #include "network/network.h" +#include "network/network_settings.h" #include "ui_direct_connect.h" enum class ConnectionType : u8 { TraversalServer, IP }; @@ -34,9 +34,9 @@ DirectConnectWindow::DirectConnectWindow(QWidget* parent) ui->nickname->setValidator(validation.GetNickname()); ui->nickname->setText(UISettings::values.nickname); - if (ui->nickname->text().isEmpty() && !Settings::values.citra_username.empty()) { + if (ui->nickname->text().isEmpty() && !NetSettings::values.citra_username.empty()) { // Use Citra Web Service user name as nickname by default - ui->nickname->setText(QString::fromStdString(Settings::values.citra_username)); + ui->nickname->setText(QString::fromStdString(NetSettings::values.citra_username)); } ui->ip->setValidator(validation.GetIP()); ui->ip->setText(UISettings::values.ip); @@ -92,7 +92,6 @@ void DirectConnectWindow::Connect() { UISettings::values.port = (ui->port->isModified() && !ui->port->text().isEmpty()) ? ui->port->text() : UISettings::values.port; - Settings::Apply(); // attempt to connect in a different thread QFuture f = QtConcurrent::run([&] { diff --git a/src/citra_qt/multiplayer/host_room.cpp b/src/citra_qt/multiplayer/host_room.cpp index 49eb5480d..b2905c7db 100644 --- a/src/citra_qt/multiplayer/host_room.cpp +++ b/src/citra_qt/multiplayer/host_room.cpp @@ -21,7 +21,7 @@ #include "common/logging/log.h" #include "core/announce_multiplayer_session.h" #include "core/hle/service/cfg/cfg.h" -#include "core/settings.h" +#include "network/network_settings.h" #include "ui_host_room.h" #ifdef ENABLE_WEB_SERVICE #include "web_service/verify_user_jwt.h" @@ -53,9 +53,9 @@ HostRoomWindow::HostRoomWindow(QWidget* parent, QStandardItemModel* list, // Restore the settings: ui->username->setText(UISettings::values.room_nickname); - if (ui->username->text().isEmpty() && !Settings::values.citra_username.empty()) { + if (ui->username->text().isEmpty() && !NetSettings::values.citra_username.empty()) { // Use Citra Web Service user name as nickname by default - ui->username->setText(QString::fromStdString(Settings::values.citra_username)); + ui->username->setText(QString::fromStdString(NetSettings::values.citra_username)); } ui->room_name->setText(UISettings::values.room_name); ui->port->setText(UISettings::values.room_port); @@ -92,7 +92,8 @@ std::unique_ptr HostRoomWindow::CreateVerifyBacken std::unique_ptr verify_backend; if (use_validation) { #ifdef ENABLE_WEB_SERVICE - verify_backend = std::make_unique(Settings::values.web_api_url); + verify_backend = + std::make_unique(NetSettings::values.web_api_url); #else verify_backend = std::make_unique(); #endif @@ -144,7 +145,7 @@ void HostRoomWindow::Host() { bool created = room->Create(ui->room_name->text().toStdString(), ui->room_description->toPlainText().toStdString(), "", port, password, ui->max_player->value(), - Settings::values.citra_username, game_name.toStdString(), + NetSettings::values.citra_username, game_name.toStdString(), game_id, CreateVerifyBackend(is_public), ban_list); if (!created) { NetworkMessage::ErrorManager::ShowError( @@ -182,8 +183,9 @@ void HostRoomWindow::Host() { std::string token; #ifdef ENABLE_WEB_SERVICE if (is_public) { - WebService::Client client(Settings::values.web_api_url, Settings::values.citra_username, - Settings::values.citra_token); + WebService::Client client(NetSettings::values.web_api_url, + NetSettings::values.citra_username, + NetSettings::values.citra_token); if (auto room = Network::GetRoom().lock()) { token = client.GetExternalJWT(room->GetVerifyUID()).returned_data; } @@ -210,7 +212,6 @@ void HostRoomWindow::Host() { ? ui->port->text() : QString::number(Network::DefaultRoomPort); UISettings::values.room_description = ui->room_description->toPlainText(); - Settings::Apply(); ui->host->setEnabled(true); close(); } diff --git a/src/citra_qt/multiplayer/lobby.cpp b/src/citra_qt/multiplayer/lobby.cpp index d4d946da5..40c0c1f39 100644 --- a/src/citra_qt/multiplayer/lobby.cpp +++ b/src/citra_qt/multiplayer/lobby.cpp @@ -16,8 +16,8 @@ #include "citra_qt/uisettings.h" #include "common/logging/log.h" #include "core/hle/service/cfg/cfg.h" -#include "core/settings.h" #include "network/network.h" +#include "network/network_settings.h" #include "ui_lobby.h" #ifdef ENABLE_WEB_SERVICE #include "web_service/web_backend.h" @@ -58,9 +58,9 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list, ui->nickname->setValidator(validation.GetNickname()); ui->nickname->setText(UISettings::values.nickname); - if (ui->nickname->text().isEmpty() && !Settings::values.citra_username.empty()) { + if (ui->nickname->text().isEmpty() && !NetSettings::values.citra_username.empty()) { // Use Citra Web Service user name as nickname by default - ui->nickname->setText(QString::fromStdString(Settings::values.citra_username)); + ui->nickname->setText(QString::fromStdString(NetSettings::values.citra_username)); } // UI Buttons @@ -155,9 +155,11 @@ void Lobby::OnJoinRoom(const QModelIndex& source) { QFuture f = QtConcurrent::run([nickname, ip, port, password, verify_UID] { std::string token; #ifdef ENABLE_WEB_SERVICE - if (!Settings::values.citra_username.empty() && !Settings::values.citra_token.empty()) { - WebService::Client client(Settings::values.web_api_url, Settings::values.citra_username, - Settings::values.citra_token); + if (!NetSettings::values.citra_username.empty() && + !NetSettings::values.citra_token.empty()) { + WebService::Client client(NetSettings::values.web_api_url, + NetSettings::values.citra_username, + NetSettings::values.citra_token); token = client.GetExternalJWT(verify_UID).returned_data; if (token.empty()) { LOG_ERROR(WebService, "Could not get external JWT, verification may fail"); @@ -179,7 +181,6 @@ void Lobby::OnJoinRoom(const QModelIndex& source) { UISettings::values.nickname = ui->nickname->text(); UISettings::values.ip = proxy->data(connection_index, LobbyItemHost::HostIPRole).toString(); UISettings::values.port = proxy->data(connection_index, LobbyItemHost::HostPortRole).toString(); - Settings::Apply(); } void Lobby::ResetModel() { diff --git a/src/core/announce_multiplayer_session.cpp b/src/core/announce_multiplayer_session.cpp index 38acb4bac..9ae373192 100644 --- a/src/core/announce_multiplayer_session.cpp +++ b/src/core/announce_multiplayer_session.cpp @@ -8,8 +8,8 @@ #include "announce_multiplayer_session.h" #include "common/announce_multiplayer_room.h" #include "common/assert.h" -#include "core/settings.h" #include "network/network.h" +#include "network/network_settings.h" #ifdef ENABLE_WEB_SERVICE #include "web_service/announce_room_json.h" @@ -22,9 +22,9 @@ static constexpr std::chrono::seconds announce_time_interval(15); AnnounceMultiplayerSession::AnnounceMultiplayerSession() { #ifdef ENABLE_WEB_SERVICE - backend = std::make_unique(Settings::values.web_api_url, - Settings::values.citra_username, - Settings::values.citra_token); + backend = std::make_unique(NetSettings::values.web_api_url, + NetSettings::values.citra_username, + NetSettings::values.citra_token); #else backend = std::make_unique(); #endif @@ -155,9 +155,9 @@ void AnnounceMultiplayerSession::UpdateCredentials() { ASSERT_MSG(!IsRunning(), "Credentials can only be updated when session is not running"); #ifdef ENABLE_WEB_SERVICE - backend = std::make_unique(Settings::values.web_api_url, - Settings::values.citra_username, - Settings::values.citra_token); + backend = std::make_unique(NetSettings::values.web_api_url, + NetSettings::values.citra_username, + NetSettings::values.citra_token); #endif } diff --git a/src/core/settings.h b/src/core/settings.h index e7339275c..98614deae 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -230,12 +230,6 @@ struct Values { std::string log_filter; std::unordered_map lle_modules; - // WebService - bool enable_telemetry; - std::string web_api_url; - std::string citra_username; - std::string citra_token; - // Video Dumping std::string output_format; std::string format_options; diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index 13c58e2f7..c9f7c6841 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -12,6 +12,7 @@ #include "core/core.h" #include "core/settings.h" #include "core/telemetry_session.h" +#include "network/network_settings.h" #ifdef ENABLE_WEB_SERVICE #include "web_service/telemetry_json.h" @@ -70,7 +71,7 @@ u64 RegenerateTelemetryId() { bool VerifyLogin(const std::string& username, const std::string& token) { #ifdef ENABLE_WEB_SERVICE - return WebService::VerifyLogin(Settings::values.web_api_url, username, token); + return WebService::VerifyLogin(NetSettings::values.web_api_url, username, token); #else return false; #endif @@ -86,16 +87,16 @@ TelemetrySession::~TelemetrySession() { AddField(Telemetry::FieldType::Session, "Shutdown_Time", shutdown_time); #ifdef ENABLE_WEB_SERVICE - auto backend = std::make_unique(Settings::values.web_api_url, - Settings::values.citra_username, - Settings::values.citra_token); + auto backend = std::make_unique(NetSettings::values.web_api_url, + NetSettings::values.citra_username, + NetSettings::values.citra_token); #else auto backend = std::make_unique(); #endif // Complete the session, submitting to the web service backend if necessary field_collection.Accept(*backend); - if (Settings::values.enable_telemetry) { + if (NetSettings::values.enable_telemetry) { backend->Complete(); } } @@ -154,9 +155,9 @@ void TelemetrySession::AddInitialInfo(Loader::AppLoader& app_loader) { bool TelemetrySession::SubmitTestcase() { #ifdef ENABLE_WEB_SERVICE - auto backend = std::make_unique(Settings::values.web_api_url, - Settings::values.citra_username, - Settings::values.citra_token); + auto backend = std::make_unique(NetSettings::values.web_api_url, + NetSettings::values.citra_username, + NetSettings::values.citra_token); field_collection.Accept(*backend); return backend->SubmitTestcase(); #else diff --git a/src/dedicated_room/citra-room.cpp b/src/dedicated_room/citra-room.cpp index a498b13c2..801249206 100644 --- a/src/dedicated_room/citra-room.cpp +++ b/src/dedicated_room/citra-room.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #ifdef _WIN32 // windows.h needs to be included before shellapi.h @@ -28,9 +27,8 @@ #include "common/scm_rev.h" #include "common/string_util.h" #include "core/announce_multiplayer_session.h" -#include "core/core.h" -#include "core/settings.h" #include "network/network.h" +#include "network/network_settings.h" #include "network/room.h" #include "network/verify_user.h" @@ -170,9 +168,6 @@ int main(int argc, char** argv) { int option_index = 0; char* endarg; - // This is just to be able to link against core - gladLoadGL(); - std::string room_name; std::string room_description; std::string password; @@ -300,15 +295,15 @@ int main(int argc, char** argv) { if (announce) { if (username.empty()) { std::cout << "Hosting a public room\n\n"; - Settings::values.web_api_url = web_api_url; - Settings::values.citra_username = UsernameFromDisplayToken(token); - username = Settings::values.citra_username; - Settings::values.citra_token = TokenFromDisplayToken(token); + NetSettings::values.web_api_url = web_api_url; + NetSettings::values.citra_username = UsernameFromDisplayToken(token); + username = NetSettings::values.citra_username; + NetSettings::values.citra_token = TokenFromDisplayToken(token); } else { std::cout << "Hosting a public room\n\n"; - Settings::values.web_api_url = web_api_url; - Settings::values.citra_username = username; - Settings::values.citra_token = token; + NetSettings::values.web_api_url = web_api_url; + NetSettings::values.citra_username = username; + NetSettings::values.citra_token = token; } } if (!announce && enable_citra_mods) { @@ -327,7 +322,8 @@ int main(int argc, char** argv) { std::unique_ptr verify_backend; if (announce) { #ifdef ENABLE_WEB_SERVICE - verify_backend = std::make_unique(Settings::values.web_api_url); + verify_backend = + std::make_unique(NetSettings::values.web_api_url); #else std::cout << "Citra Web Services is not available with this build: validation is disabled.\n\n"; diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 1e0eb4bc9..cf920d8bc 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -1,6 +1,8 @@ add_library(network STATIC network.cpp network.h + network_settings.cpp + network_settings.h packet.cpp packet.h room.cpp diff --git a/src/network/network_settings.cpp b/src/network/network_settings.cpp new file mode 100644 index 000000000..62aefcc04 --- /dev/null +++ b/src/network/network_settings.cpp @@ -0,0 +1,11 @@ +// Copyright 2020 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "network/network_settings.h" + +namespace NetSettings { + +Values values = {}; + +} diff --git a/src/network/network_settings.h b/src/network/network_settings.h new file mode 100644 index 000000000..eed1d56b4 --- /dev/null +++ b/src/network/network_settings.h @@ -0,0 +1,20 @@ +// Copyright 2020 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include "common/logging/log.h" + +namespace NetSettings { + +struct Values { + // WebService + bool enable_telemetry; + std::string web_api_url; + std::string citra_username; + std::string citra_token; +} extern values; + +} // namespace NetSettings -- 2.36.1