Improve GUI CLI for streaming (#346)

This commit is contained in:
tuximail 2020-10-24 15:46:50 +02:00 committed by GitHub
commit e83cb04049
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 57 additions and 25 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -38,6 +38,8 @@ StreamWindow::StreamWindow(const StreamSessionConnectInfo &connect_info, QWidget
try
{
if(connect_info.fullscreen)
showFullScreen();
Init();
}
catch(const Exception &e)