mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-19 21:13:12 -07:00
Improve GUI CLI for streaming (#346)
This commit is contained in:
parent
03c82ea515
commit
e83cb04049
5 changed files with 57 additions and 25 deletions
|
@ -58,8 +58,9 @@ struct StreamSessionConnectInfo
|
||||||
QByteArray morning;
|
QByteArray morning;
|
||||||
ChiakiConnectVideoProfile video_profile;
|
ChiakiConnectVideoProfile video_profile;
|
||||||
unsigned int audio_buffer_size;
|
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
|
class StreamSession : public QObject
|
||||||
|
|
|
@ -84,11 +84,14 @@ int real_main(int argc, char *argv[])
|
||||||
|
|
||||||
QStringList cmds;
|
QStringList cmds;
|
||||||
cmds.append("stream");
|
cmds.append("stream");
|
||||||
|
cmds.append("list");
|
||||||
#ifdef CHIAKI_ENABLE_CLI
|
#ifdef CHIAKI_ENABLE_CLI
|
||||||
cmds.append(cli_commands.keys());
|
cmds.append(cli_commands.keys());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
parser.addPositionalArgument("command", cmds.join(", "));
|
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)");
|
parser.addPositionalArgument("host", "Address to connect to (when using the stream command)");
|
||||||
|
|
||||||
QCommandLineOption regist_key_option("registkey", "", "registkey");
|
QCommandLineOption regist_key_option("registkey", "", "registkey");
|
||||||
|
@ -97,23 +100,50 @@ int real_main(int argc, char *argv[])
|
||||||
QCommandLineOption morning_option("morning", "", "morning");
|
QCommandLineOption morning_option("morning", "", "morning");
|
||||||
parser.addOption(morning_option);
|
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);
|
parser.process(app);
|
||||||
QStringList args = parser.positionalArguments();
|
QStringList args = parser.positionalArguments();
|
||||||
|
|
||||||
if(args.length() == 0)
|
if(args.length() == 0)
|
||||||
return RunMain(app, &settings);
|
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[0] == "stream")
|
||||||
{
|
{
|
||||||
if(args.length() < 2)
|
if(args.length() < 2)
|
||||||
parser.showHelp(1);
|
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())
|
if(parser.value(regist_key_option).isEmpty() && parser.value(morning_option).isEmpty())
|
||||||
|
{
|
||||||
|
if(args.length() < 3)
|
||||||
parser.showHelp(1);
|
parser.showHelp(1);
|
||||||
|
for(const auto &temphost : settings.GetRegisteredHosts())
|
||||||
QByteArray regist_key = parser.value(regist_key_option).toUtf8();
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
regist_key = parser.value(regist_key_option).toUtf8();
|
||||||
if(regist_key.length() > sizeof(ChiakiConnectInfo::regist_key))
|
if(regist_key.length() > sizeof(ChiakiConnectInfo::regist_key))
|
||||||
{
|
{
|
||||||
printf("Given regist key is too long (expected size <=%llu, got %d)\n",
|
printf("Given regist key is too long (expected size <=%llu, got %d)\n",
|
||||||
|
@ -122,8 +152,7 @@ int real_main(int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
regist_key += QByteArray(sizeof(ChiakiConnectInfo::regist_key) - regist_key.length(), 0);
|
regist_key += QByteArray(sizeof(ChiakiConnectInfo::regist_key) - regist_key.length(), 0);
|
||||||
|
morning = QByteArray::fromBase64(parser.value(morning_option).toUtf8());
|
||||||
QByteArray morning = QByteArray::fromBase64(parser.value(morning_option).toUtf8());
|
|
||||||
if(morning.length() != sizeof(ChiakiConnectInfo::morning))
|
if(morning.length() != sizeof(ChiakiConnectInfo::morning))
|
||||||
{
|
{
|
||||||
printf("Given morning has invalid size (expected %llu, got %d)\n",
|
printf("Given morning has invalid size (expected %llu, got %d)\n",
|
||||||
|
@ -132,9 +161,8 @@ int real_main(int argc, char *argv[])
|
||||||
printf("Given morning has invalid size (expected %llu)", (unsigned long long)sizeof(ChiakiConnectInfo::morning));
|
printf("Given morning has invalid size (expected %llu)", (unsigned long long)sizeof(ChiakiConnectInfo::morning));
|
||||||
return 1;
|
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);
|
return RunStream(app, connect_info);
|
||||||
}
|
}
|
||||||
#ifdef CHIAKI_ENABLE_CLI
|
#ifdef CHIAKI_ENABLE_CLI
|
||||||
|
|
|
@ -263,7 +263,7 @@ void MainWindow::ServerItemWidgetTriggered()
|
||||||
}
|
}
|
||||||
|
|
||||||
QString host = server.GetHostAddr();
|
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);
|
new StreamWindow(info);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
#define SETSU_UPDATE_INTERVAL_MS 4
|
#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)
|
: settings(settings)
|
||||||
{
|
{
|
||||||
key_map = settings->GetControllerMappingForDecoding();
|
key_map = settings->GetControllerMappingForDecoding();
|
||||||
|
@ -41,6 +41,7 @@ StreamSessionConnectInfo::StreamSessionConnectInfo(Settings *settings, QString h
|
||||||
this->regist_key = regist_key;
|
this->regist_key = regist_key;
|
||||||
this->morning = morning;
|
this->morning = morning;
|
||||||
audio_buffer_size = settings->GetAudioBufferSize();
|
audio_buffer_size = settings->GetAudioBufferSize();
|
||||||
|
this->fullscreen = fullscreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AudioSettingsCb(uint32_t channels, uint32_t rate, void *user);
|
static void AudioSettingsCb(uint32_t channels, uint32_t rate, void *user);
|
||||||
|
|
|
@ -38,6 +38,8 @@ StreamWindow::StreamWindow(const StreamSessionConnectInfo &connect_info, QWidget
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if(connect_info.fullscreen)
|
||||||
|
showFullScreen();
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
catch(const Exception &e)
|
catch(const Exception &e)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue