98
98
kArgStartUpAgeName ,
99
99
kArgPvdFile ,
100
100
kArgSkipIntroMovies ,
101
- kArgRenderer
101
+ kArgRenderer ,
102
+ kArgUsername
102
103
};
103
104
104
105
static const plCmdArgDef s_cmdLineArgs[] = {
@@ -111,6 +112,7 @@ static const plCmdArgDef s_cmdLineArgs[] = {
111
112
{ kCmdArgFlagged | kCmdTypeString , " PvdFile" , kArgPvdFile },
112
113
{ kCmdArgFlagged | kCmdTypeBool , " SkipIntroMovies" , kArgSkipIntroMovies },
113
114
{ kCmdArgFlagged | kCmdTypeString , " Renderer" , kArgRenderer },
115
+ { kCmdArgFlagged | kCmdTypeString , " Username" , kArgUsername },
114
116
};
115
117
116
118
//
@@ -241,7 +243,7 @@ static size_t CurlCallback(void *buffer, size_t size, size_t nmemb, void *param)
241
243
return size * nmemb;
242
244
}
243
245
244
- static bool ConsoleLoginScreen ()
246
+ static bool ConsoleLoginScreen (const ST::string& cliUsername )
245
247
{
246
248
std::thread statusThread = std::thread ([]() {
247
249
ST::string statusUrl = GetServerStatusUrl ();
@@ -272,19 +274,22 @@ static bool ConsoleLoginScreen()
272
274
statusFlag.Wait ();
273
275
statusThread.join ();
274
276
275
- fprintf (stdout, " [Use Ctrl+D to cancel] \n Username or Email: " ) ;
276
- fflush (stdout);
277
-
278
- char username[ kMaxAccountNameLength ] ;
277
+ ST::string username = cliUsername ;
278
+ if (cliUsername. empty ()) {
279
+ fprintf (stdout, " [Use Ctrl+D to cancel] \n Username or Email: " );
280
+ fflush (stdout) ;
279
281
280
- if (fscanf (stdin, " %s" , username) != 1 ) {
281
- return false ;
282
+ char tmpUsername[kMaxAccountNameLength ];
283
+ if (fscanf (stdin, " %s" , tmpUsername) != 1 ) {
284
+ return false ;
285
+ }
286
+ username = tmpUsername;
282
287
}
283
288
284
289
pfPasswordStore* store = pfPasswordStore::Instance ();
285
290
ST::string password = store->GetPassword (username);
286
291
287
- if (!password.empty ()) {
292
+ if (!password.empty () && cliUsername. empty () ) {
288
293
fprintf (stdout, " Use saved password? [y/n] " );
289
294
fflush (stdout);
290
295
char c;
@@ -610,6 +615,7 @@ int main(int argc, const char** argv)
610
615
cmdParser.Parse (args);
611
616
612
617
bool doIntroDialogs = true ;
618
+ ST::string cliUsername;
613
619
#ifndef PLASMA_EXTERNAL_RELEASE
614
620
if (cmdParser.IsSpecified (kArgSkipLoginDialog ))
615
621
doIntroDialogs = false ;
@@ -628,6 +634,8 @@ int main(int argc, const char** argv)
628
634
plPXSimulation::SetDefaultDebuggerEndpoint (cmdParser.GetString (kArgPvdFile ));
629
635
if (cmdParser.IsSpecified (kArgRenderer ))
630
636
gClient .SetRequestedRenderingBackend (ParseRendererArgument (cmdParser.GetString (kArgRenderer )));
637
+ if (cmdParser.IsSpecified (kArgUsername ))
638
+ cliUsername = cmdParser.GetString (kArgUsername );
631
639
#endif
632
640
633
641
plFileName serverIni = " server.ini" ;
@@ -680,7 +688,7 @@ int main(int argc, const char** argv)
680
688
curl_global_init (CURL_GLOBAL_ALL);
681
689
682
690
// Login stuff
683
- if (!ConsoleLoginScreen ()) {
691
+ if (!ConsoleLoginScreen (cliUsername )) {
684
692
gClient .ShutdownStart ();
685
693
gClient .ShutdownEnd ();
686
694
NetCommShutdown ();
0 commit comments