From e83cb040495bbf9959c8199ebb0b359e546ab5fb Mon Sep 17 00:00:00 2001 From: tuximail <49699523+tuximail@users.noreply.github.com> Date: Sat, 24 Oct 2020 15:46:50 +0200 Subject: [PATCH] Improve GUI CLI for streaming (#346) --- gui/include/streamsession.h | 3 +- gui/src/main.cpp | 72 +++++++++++++++++++++++++------------ gui/src/mainwindow.cpp | 2 +- gui/src/streamsession.cpp | 3 +- gui/src/streamwindow.cpp | 2 ++ 5 files changed, 57 insertions(+), 25 deletions(-) diff --git a/gui/include/streamsession.h b/gui/include/streamsession.h index 0790b48..831ed6b 100644 --- a/gui/include/streamsession.h +++ b/gui/include/streamsession.h @@ -58,8 +58,9 @@ struct StreamSessionConnectInfo QByteArray morning; ChiakiConnectVideoProfile video_profile; unsigned int audio_buffer_size; + bool fullscreen; - StreamSessionConnectInfo(Settings *settings, QString host, QByteArray regist_key, QByteArray morning); + StreamSessionConnectInfo(Settings *settings, QString host, QByteArray regist_key, QByteArray morning, bool fullscreen); }; class StreamSession : public QObject diff --git a/gui/src/main.cpp b/gui/src/main.cpp index f612b3d..4ec7871 100644 --- a/gui/src/main.cpp +++ b/gui/src/main.cpp @@ -84,11 +84,14 @@ int real_main(int argc, char *argv[]) QStringList cmds; cmds.append("stream"); + cmds.append("list"); #ifdef CHIAKI_ENABLE_CLI cmds.append(cli_commands.keys()); #endif parser.addPositionalArgument("command", cmds.join(", ")); + parser.addPositionalArgument("nickname", "Needed for stream command to get credentials for connecting. " + "Use 'list' to get the nickname."); parser.addPositionalArgument("host", "Address to connect to (when using the stream command)"); QCommandLineOption regist_key_option("registkey", "", "registkey"); @@ -97,44 +100,69 @@ int real_main(int argc, char *argv[]) QCommandLineOption morning_option("morning", "", "morning"); parser.addOption(morning_option); + QCommandLineOption fullscreen_option("fullscreen", "Start window in fullscreen (only for use with stream command)"); + parser.addOption(fullscreen_option); + parser.process(app); QStringList args = parser.positionalArguments(); if(args.length() == 0) return RunMain(app, &settings); + if(args[0] == "list") + { + for(const auto &host : settings.GetRegisteredHosts()) + printf("Host: %s \n", host.GetPS4Nickname().toLocal8Bit().constData()); + return 0; + } if(args[0] == "stream") { if(args.length() < 2) parser.showHelp(1); - QString host = args[1]; + //QString host = args[sizeof(args) -1]; //the ip is always the last param for stream + QString host = args[args.size()-1]; + QByteArray morning; + QByteArray regist_key; - if(parser.value(regist_key_option).isEmpty() || parser.value(morning_option).isEmpty()) - parser.showHelp(1); - - QByteArray regist_key = parser.value(regist_key_option).toUtf8(); - if(regist_key.length() > sizeof(ChiakiConnectInfo::regist_key)) + if(parser.value(regist_key_option).isEmpty() && parser.value(morning_option).isEmpty()) { - printf("Given regist key is too long (expected size <=%llu, got %d)\n", - (unsigned long long)sizeof(ChiakiConnectInfo::regist_key), - regist_key.length()); - return 1; + if(args.length() < 3) + parser.showHelp(1); + for(const auto &temphost : settings.GetRegisteredHosts()) + { + if(temphost.GetPS4Nickname() == args[1]) + { + morning = temphost.GetRPKey(); + regist_key = temphost.GetRPRegistKey(); + break; + } + printf("No configuration found for '%s'\n", args[1].toLocal8Bit().constData()); + return 1; + } } - regist_key += QByteArray(sizeof(ChiakiConnectInfo::regist_key) - regist_key.length(), 0); - - QByteArray morning = QByteArray::fromBase64(parser.value(morning_option).toUtf8()); - if(morning.length() != sizeof(ChiakiConnectInfo::morning)) + else { - printf("Given morning has invalid size (expected %llu, got %d)\n", - (unsigned long long)sizeof(ChiakiConnectInfo::morning), - morning.length()); - printf("Given morning has invalid size (expected %llu)", (unsigned long long)sizeof(ChiakiConnectInfo::morning)); - return 1; + regist_key = parser.value(regist_key_option).toUtf8(); + if(regist_key.length() > sizeof(ChiakiConnectInfo::regist_key)) + { + printf("Given regist key is too long (expected size <=%llu, got %d)\n", + (unsigned long long)sizeof(ChiakiConnectInfo::regist_key), + regist_key.length()); + return 1; + } + regist_key += QByteArray(sizeof(ChiakiConnectInfo::regist_key) - regist_key.length(), 0); + morning = QByteArray::fromBase64(parser.value(morning_option).toUtf8()); + if(morning.length() != sizeof(ChiakiConnectInfo::morning)) + { + printf("Given morning has invalid size (expected %llu, got %d)\n", + (unsigned long long)sizeof(ChiakiConnectInfo::morning), + morning.length()); + printf("Given morning has invalid size (expected %llu)", (unsigned long long)sizeof(ChiakiConnectInfo::morning)); + return 1; + } } - - StreamSessionConnectInfo connect_info(&settings, host, regist_key, morning); - + StreamSessionConnectInfo connect_info(&settings, host, regist_key, morning, parser.isSet(fullscreen_option)); return RunStream(app, connect_info); } #ifdef CHIAKI_ENABLE_CLI diff --git a/gui/src/mainwindow.cpp b/gui/src/mainwindow.cpp index c5fcc48..4148cea 100644 --- a/gui/src/mainwindow.cpp +++ b/gui/src/mainwindow.cpp @@ -263,7 +263,7 @@ void MainWindow::ServerItemWidgetTriggered() } QString host = server.GetHostAddr(); - StreamSessionConnectInfo info(settings, host, server.registered_host.GetRPRegistKey(), server.registered_host.GetRPKey()); + StreamSessionConnectInfo info(settings, host, server.registered_host.GetRPRegistKey(), server.registered_host.GetRPKey(), false); new StreamWindow(info); } else diff --git a/gui/src/streamsession.cpp b/gui/src/streamsession.cpp index ef3a62d..6ac6237 100644 --- a/gui/src/streamsession.cpp +++ b/gui/src/streamsession.cpp @@ -29,7 +29,7 @@ #define SETSU_UPDATE_INTERVAL_MS 4 -StreamSessionConnectInfo::StreamSessionConnectInfo(Settings *settings, QString host, QByteArray regist_key, QByteArray morning) +StreamSessionConnectInfo::StreamSessionConnectInfo(Settings *settings, QString host, QByteArray regist_key, QByteArray morning, bool fullscreen) : settings(settings) { key_map = settings->GetControllerMappingForDecoding(); @@ -41,6 +41,7 @@ StreamSessionConnectInfo::StreamSessionConnectInfo(Settings *settings, QString h this->regist_key = regist_key; this->morning = morning; audio_buffer_size = settings->GetAudioBufferSize(); + this->fullscreen = fullscreen; } static void AudioSettingsCb(uint32_t channels, uint32_t rate, void *user); diff --git a/gui/src/streamwindow.cpp b/gui/src/streamwindow.cpp index 678d40c..e73b798 100644 --- a/gui/src/streamwindow.cpp +++ b/gui/src/streamwindow.cpp @@ -38,6 +38,8 @@ StreamWindow::StreamWindow(const StreamSessionConnectInfo &connect_info, QWidget try { + if(connect_info.fullscreen) + showFullScreen(); Init(); } catch(const Exception &e)