diff --git a/gui/include/host.h b/gui/include/host.h index 87c4d0f..7d143f4 100644 --- a/gui/include/host.h +++ b/gui/include/host.h @@ -96,6 +96,8 @@ class ManualHost bool GetRegistered() const { return registered; } HostMAC GetMAC() const { return registered_mac; } + void Register(const RegisteredHost ®istered_host) { this->registered = true; this->registered_mac = registered_host.GetPS4MAC(); } + void SaveToSettings(QSettings *settings) const; static ManualHost LoadFromSettings(QSettings *settings); }; diff --git a/gui/include/registdialog.h b/gui/include/registdialog.h index f34e646..fea4578 100644 --- a/gui/include/registdialog.h +++ b/gui/include/registdialog.h @@ -45,6 +45,8 @@ class RegistDialog : public QDialog QDialogButtonBox *button_box; QPushButton *register_button; + RegisteredHost registered_host; + private slots: void ValidateInput(); @@ -52,6 +54,8 @@ class RegistDialog : public QDialog explicit RegistDialog(Settings *settings, const QString &host = QString(), QWidget *parent = nullptr); ~RegistDialog(); + RegisteredHost GetRegisteredHost() { return registered_host; } + public slots: void accept() override; }; @@ -71,6 +75,8 @@ class RegistExecuteDialog: public QDialog QPlainTextEdit *log_edit; QDialogButtonBox *button_box; + RegisteredHost registered_host; + void Finished(); private slots: @@ -81,6 +87,8 @@ class RegistExecuteDialog: public QDialog public: explicit RegistExecuteDialog(Settings *settings, const ChiakiRegistInfo ®ist_info, QWidget *parent = nullptr); ~RegistExecuteDialog(); + + RegisteredHost GetRegisteredHost() { return registered_host; } }; Q_DECLARE_METATYPE(ChiakiRegistEventType) diff --git a/gui/src/mainwindow.cpp b/gui/src/mainwindow.cpp index 9e207b4..a672be2 100644 --- a/gui/src/mainwindow.cpp +++ b/gui/src/mainwindow.cpp @@ -202,13 +202,14 @@ void MainWindow::SendWakeup(const DisplayServer *server) void MainWindow::ServerItemWidgetTriggered() { - auto server = DisplayServerFromSender(); - if(!server) + auto s = DisplayServerFromSender(); + if(!s) return; + auto server = *s; - if(server->registered) + if(server.registered) { - if(server->discovered && server->discovery_host.state == CHIAKI_DISCOVERY_HOST_STATE_STANDBY) + if(server.discovered && server.discovery_host.state == CHIAKI_DISCOVERY_HOST_STATE_STANDBY) { int r = QMessageBox::question(this, tr("Start Stream"), @@ -216,21 +217,27 @@ void MainWindow::ServerItemWidgetTriggered() QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); if(r == QMessageBox::Yes) { - SendWakeup(server); + SendWakeup(&server); return; } else if(r == QMessageBox::Cancel) return; } - QString host = server->GetHostAddr(); - StreamSessionConnectInfo info(settings, host, server->registered_host.GetRPRegistKey(), server->registered_host.GetRPKey()); + QString host = server.GetHostAddr(); + StreamSessionConnectInfo info(settings, host, server.registered_host.GetRPRegistKey(), server.registered_host.GetRPKey()); new StreamWindow(info); } else { - RegistDialog regist_dialog(settings, server->GetHostAddr(), this); - regist_dialog.exec(); + RegistDialog regist_dialog(settings, server.GetHostAddr(), this); + int r = regist_dialog.exec(); + if(r == QDialog::Accepted && !server.discovered) // success + { + ManualHost manual_host = server.manual_host; + manual_host.Register(regist_dialog.GetRegisteredHost()); + settings->SetManualHost(manual_host); + } } } diff --git a/gui/src/registdialog.cpp b/gui/src/registdialog.cpp index 9009f97..d1fddff 100644 --- a/gui/src/registdialog.cpp +++ b/gui/src/registdialog.cpp @@ -101,7 +101,10 @@ void RegistDialog::accept() RegistExecuteDialog execute_dialog(settings, info, this); int r = execute_dialog.exec(); if(r == QDialog::Accepted) - close(); + { + this->registered_host = execute_dialog.GetRegisteredHost(); + QDialog::accept(); + } } static void RegistExecuteDialogLogCb(ChiakiLogLevel level, const char *msg, void *user); @@ -155,6 +158,7 @@ void RegistExecuteDialog::Finished() void RegistExecuteDialog::Success(RegisteredHost host) { CHIAKI_LOGI(&log, "Successfully registered %s", host.GetPS4Nickname().toLocal8Bit().constData()); + this->registered_host = host; if(settings->GetRegisteredHostRegistered(host.GetPS4MAC())) {