diff --git a/Source/Core/DolphinQt/CMakeLists.txt b/Source/Core/DolphinQt/CMakeLists.txt index 8c95ec3b30..a1abc9a2bd 100644 --- a/Source/Core/DolphinQt/CMakeLists.txt +++ b/Source/Core/DolphinQt/CMakeLists.txt @@ -63,6 +63,8 @@ add_executable(dolphin-emu Config/ControllerInterface/DualShockUDPClientWidget.h Config/ControllerInterface/ControllerInterfaceWindow.cpp Config/ControllerInterface/ControllerInterfaceWindow.h + Config/ControllerInterface/ServerStringValidator.cpp + Config/ControllerInterface/ServerStringValidator.h Config/ControllersWindow.cpp Config/ControllersWindow.h Config/FilesystemWidget.cpp diff --git a/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientAddServerDialog.cpp b/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientAddServerDialog.cpp index ff510165db..f3e9a2f530 100644 --- a/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientAddServerDialog.cpp +++ b/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientAddServerDialog.cpp @@ -14,9 +14,11 @@ #include #include #include +#include #include #include "Common/Config/Config.h" +#include "DolphinQt/Config/ControllerInterface/ServerStringValidator.h" #include "InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h" DualShockUDPClientAddServerDialog::DualShockUDPClientAddServerDialog(QWidget* parent) @@ -35,9 +37,11 @@ void DualShockUDPClientAddServerDialog::CreateWidgets() m_description = new QLineEdit(); m_description->setPlaceholderText(tr("BetterJoy, DS4Windows, etc")); + m_description->setValidator(new ServerStringValidator(m_description)); m_server_address = new QLineEdit(QString::fromStdString(ciface::DualShockUDPClient::DEFAULT_SERVER_ADDRESS)); + m_server_address->setValidator(new ServerStringValidator(m_server_address)); m_server_port = new QSpinBox(); m_server_port->setMaximum(65535); diff --git a/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp b/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp index eac6cea219..4c7f41c5e4 100644 --- a/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp +++ b/Source/Core/DolphinQt/Config/ControllerInterface/DualShockUDPClientWidget.cpp @@ -75,6 +75,22 @@ void DualShockUDPClientWidget::RefreshServerList() { m_server_list->clear(); + const auto server_address_setting = + Config::Get(ciface::DualShockUDPClient::Settings::SERVER_ADDRESS); + const auto server_port_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVER_PORT); + + // Update our servers setting if the user is using old configuration + if (!server_address_setting.empty() && server_port_setting != 0) + { + const auto& servers_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVERS); + Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVERS, + servers_setting + fmt::format("{}:{}:{};", "DS4", + server_address_setting, + server_port_setting)); + Config::SetBase(ciface::DualShockUDPClient::Settings::SERVER_ADDRESS, ""); + Config::SetBase(ciface::DualShockUDPClient::Settings::SERVER_PORT, 0); + } + const auto& servers_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVERS); const auto server_details = SplitString(servers_setting, ';'); for (const std::string& server_detail : server_details) diff --git a/Source/Core/DolphinQt/Config/ControllerInterface/ServerStringValidator.cpp b/Source/Core/DolphinQt/Config/ControllerInterface/ServerStringValidator.cpp new file mode 100644 index 0000000000..1ab0935b53 --- /dev/null +++ b/Source/Core/DolphinQt/Config/ControllerInterface/ServerStringValidator.cpp @@ -0,0 +1,23 @@ +// Copyright 2020 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include "DolphinQt/Config/ControllerInterface/ServerStringValidator.h" + +ServerStringValidator::ServerStringValidator(QObject* parent) : QValidator(parent) +{ +} + +QValidator::State ServerStringValidator::validate(QString& input, int& pos) const +{ + if (input.isEmpty()) + return Invalid; + + if (input.contains(QStringLiteral(":"))) + return Invalid; + + if (input.contains(QStringLiteral(";"))) + return Invalid; + + return Acceptable; +} diff --git a/Source/Core/DolphinQt/Config/ControllerInterface/ServerStringValidator.h b/Source/Core/DolphinQt/Config/ControllerInterface/ServerStringValidator.h new file mode 100644 index 0000000000..034abfc41a --- /dev/null +++ b/Source/Core/DolphinQt/Config/ControllerInterface/ServerStringValidator.h @@ -0,0 +1,16 @@ +// Copyright 2020 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include + +class ServerStringValidator : public QValidator +{ + Q_OBJECT +public: + explicit ServerStringValidator(QObject* parent); + + State validate(QString& input, int& pos) const override; +}; diff --git a/Source/Core/DolphinQt/DolphinQt.vcxproj b/Source/Core/DolphinQt/DolphinQt.vcxproj index 0720ff8e8a..dd6dfb420c 100644 --- a/Source/Core/DolphinQt/DolphinQt.vcxproj +++ b/Source/Core/DolphinQt/DolphinQt.vcxproj @@ -127,6 +127,7 @@ + @@ -216,6 +217,7 @@ + @@ -330,6 +332,7 @@ + diff --git a/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp b/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp index 837be2c3df..371db4219c 100644 --- a/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp +++ b/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.cpp @@ -30,6 +30,9 @@ namespace ciface::DualShockUDPClient { namespace Settings { +const Config::Info SERVER_ADDRESS{ + {Config::System::DualShockUDPClient, "Server", "IPAddress"}, ""}; +const Config::Info SERVER_PORT{{Config::System::DualShockUDPClient, "Server", "Port"}, 0}; const Config::Info SERVERS{{Config::System::DualShockUDPClient, "Server", "Entries"}, ""}; const Config::Info SERVERS_ENABLED{{Config::System::DualShockUDPClient, "Server", "Enabled"}, @@ -361,6 +364,21 @@ static void ConfigChanged() void Init() { + // The following is added for backwards compatibility + const auto server_address_setting = Config::Get(Settings::SERVER_ADDRESS); + const auto server_port_setting = Config::Get(Settings::SERVER_PORT); + + if (!server_address_setting.empty() && server_port_setting != 0) + { + const auto& servers_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVERS); + Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVERS, + servers_setting + fmt::format("{}:{}:{};", "DS4", + server_address_setting, + server_port_setting)); + Config::SetBase(Settings::SERVER_ADDRESS, ""); + Config::SetBase(Settings::SERVER_PORT, 0); + } + Config::AddConfigChangedCallback(ConfigChanged); } diff --git a/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h b/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h index e7a9057569..2442634783 100644 --- a/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h +++ b/Source/Core/InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h @@ -13,6 +13,10 @@ constexpr u16 DEFAULT_SERVER_PORT = 26760; namespace Settings { +// These two kept for backwards compatibility +extern const Config::Info SERVER_ADDRESS; +extern const Config::Info SERVER_PORT; + extern const Config::Info SERVERS; extern const Config::Info SERVERS_ENABLED; } // namespace Settings