From abca0803d1a18ab313b1ce3e1054b2012b39e45a Mon Sep 17 00:00:00 2001 From: Kleidis <167202775+kleidis@users.noreply.github.com> Date: Sun, 17 Nov 2024 17:11:57 +0100 Subject: [PATCH] citra_qt: Allow to set server address on room_create 1 --- src/citra_qt/multiplayer/host_room.cpp | 46 ++++++++++++++--- src/citra_qt/multiplayer/host_room.h | 2 + src/citra_qt/multiplayer/host_room.ui | 69 +++++++++++++++++--------- 3 files changed, 86 insertions(+), 31 deletions(-) diff --git a/src/citra_qt/multiplayer/host_room.cpp b/src/citra_qt/multiplayer/host_room.cpp index 339e7155a..ddc4047d0 100644 --- a/src/citra_qt/multiplayer/host_room.cpp +++ b/src/citra_qt/multiplayer/host_room.cpp @@ -3,12 +3,16 @@ // Refer to the license.txt file included. #include +#include +#include #include +#include #include #include #include #include #include +#include #include #include #include "citra_qt/game_list_p.h" @@ -49,6 +53,7 @@ HostRoomWindow::HostRoomWindow(Core::System& system_, QWidget* parent, QStandard // Connect all the widgets to the appropriate events connect(ui->host, &QPushButton::clicked, this, &HostRoomWindow::Host); + connect(ui->copy_ip_button, &QPushButton::clicked, this, &HostRoomWindow::CopyIPToClipboard); // Restore the settings: ui->username->setText(UISettings::values.room_nickname); @@ -68,6 +73,8 @@ HostRoomWindow::HostRoomWindow(Core::System& system_, QWidget* parent, QStandard ui->game_list->setCurrentIndex(index); } ui->room_description->setText(UISettings::values.room_description); + + SetLocalIPAddress(); } HostRoomWindow::~HostRoomWindow() = default; @@ -130,6 +137,7 @@ void HostRoomWindow::Host() { } } ui->host->setDisabled(true); + std::string ip_address = ui->server_address_box->text().toStdString(); auto game_name = ui->game_list->currentData(Qt::DisplayRole).toString(); auto game_id = ui->game_list->currentData(GameListItemPath::ProgramIdRole).toLongLong(); @@ -141,11 +149,12 @@ void HostRoomWindow::Host() { ban_list = UISettings::values.ban_list; } if (auto room = Network::GetRoom().lock()) { - bool created = room->Create(ui->room_name->text().toStdString(), - ui->room_description->toPlainText().toStdString(), "", - static_cast(port), password, ui->max_player->value(), - NetSettings::values.citra_username, game_name.toStdString(), - game_id, CreateVerifyBackend(is_public), ban_list); + bool created = + room->Create(ui->room_name->text().toStdString(), + ui->room_description->toPlainText().toStdString(), ip_address, + static_cast(port), password, ui->max_player->value(), + NetSettings::values.citra_username, game_name.toStdString(), game_id, + CreateVerifyBackend(is_public), ban_list); if (!created) { NetworkMessage::ErrorManager::ShowError( NetworkMessage::ErrorManager::COULD_NOT_CREATE_ROOM); @@ -193,8 +202,8 @@ void HostRoomWindow::Host() { } #endif member->Join(ui->username->text().toStdString(), Service::CFG::GetConsoleIdHash(system), - "127.0.0.1", static_cast(port), 0, Network::NoPreferredMac, password, - token); + ip_address.c_str(), static_cast(port), 0, Network::NoPreferredMac, + password, token); // Store settings UISettings::values.room_nickname = ui->username->text(); @@ -234,3 +243,26 @@ bool ComboBoxProxyModel::lessThan(const QModelIndex& left, const QModelIndex& ri auto rightData = right.data(GameListItemPath::TitleRole).toString(); return leftData.compare(rightData) < 0; } + +void HostRoomWindow::SetLocalIPAddress() { + QString local_ip; + + foreach (const QHostAddress& address, QNetworkInterface::allAddresses()) { + if (address.protocol() == QAbstractSocket::IPv4Protocol && + address != QHostAddress(QHostAddress::LocalHost)) { + local_ip = address.toString(); + break; + } + } + + if (!local_ip.isEmpty()) { + ui->server_address_box->setText(local_ip); + } else { + ui->server_address_box->setPlaceholderText(tr("Enter Server Address")); + } +} + +void HostRoomWindow::CopyIPToClipboard() { + QClipboard* clipboard = QApplication::clipboard(); + clipboard->setText(ui->server_address_box->text()); +} diff --git a/src/citra_qt/multiplayer/host_room.h b/src/citra_qt/multiplayer/host_room.h index e481bd000..a12ffb6d4 100644 --- a/src/citra_qt/multiplayer/host_room.h +++ b/src/citra_qt/multiplayer/host_room.h @@ -49,6 +49,8 @@ public: private: void Host(); + void SetLocalIPAddress(); + void CopyIPToClipboard(); std::unique_ptr CreateVerifyBackend(bool use_validation) const; std::unique_ptr ui; diff --git a/src/citra_qt/multiplayer/host_room.ui b/src/citra_qt/multiplayer/host_room.ui index 2548d3455..083d086e8 100644 --- a/src/citra_qt/multiplayer/host_room.ui +++ b/src/citra_qt/multiplayer/host_room.ui @@ -7,13 +7,34 @@ 0 0 607 - 211 + 236 Create Room + + + + + + Server Address: + + + + + + + + + + Copy + + + + + @@ -31,38 +52,38 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + Room Name - + 50 - + Preferred Application - + - + Max Players - + 2 @@ -82,9 +103,6 @@ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - @@ -92,6 +110,16 @@ + + + + + + + Password + + + @@ -102,6 +130,13 @@ + + + + Port + + + @@ -112,20 +147,6 @@ - - - - Password - - - - - - - Port - - -