Add completions to launchauth command

This commit is contained in:
PJB3005
2026-01-20 01:14:56 +01:00
parent 14b17aff6d
commit ce96331ec4

View File

@@ -1,6 +1,9 @@
#if TOOLS
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Data.Sqlite;
using Robust.Client.Utility;
using Robust.Shared.Console;
@@ -20,15 +23,7 @@ namespace Robust.Client.Console.Commands
{
var wantName = args.Length > 0 ? args[0] : null;
var basePath = UserDataDir.GetRootUserDataDir(_gameController);
var launcherDirName = Environment.GetEnvironmentVariable("SS14_LAUNCHER_APPDATA_NAME") ?? "launcher";
var dbPath = Path.Combine(basePath, launcherDirName, "settings.db");
#if USE_SYSTEM_SQLITE
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());
#endif
using var con = new SqliteConnection($"Data Source={dbPath};Mode=ReadOnly");
con.Open();
using var con = GetDb();
using var cmd = con.CreateCommand();
cmd.CommandText = "SELECT UserId, UserName, Token FROM Login WHERE Expires > datetime('NOW')";
@@ -57,6 +52,51 @@ namespace Robust.Client.Console.Commands
shell.WriteLine($"Logged into account {userName}");
}
public override async ValueTask<CompletionResult> GetCompletionAsync(
IConsoleShell shell,
string[] args,
string argStr,
CancellationToken cancel)
{
if (args.Length != 1)
return CompletionResult.Empty;
return await Task.Run(() =>
{
using var con = GetDb();
using var cmd = con.CreateCommand();
cmd.CommandText = "SELECT UserName FROM Login WHERE Expires > datetime('NOW')";
var options = new List<CompletionOption>();
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
var name = reader.GetString(0);
options.Add(new CompletionOption(name));
}
return CompletionResult.FromOptions(options);
},
cancel);
}
private SqliteConnection GetDb()
{
var basePath = UserDataDir.GetRootUserDataDir(_gameController);
var launcherDirName = Environment.GetEnvironmentVariable("SS14_LAUNCHER_APPDATA_NAME") ?? "launcher";
var dbPath = Path.Combine(basePath, launcherDirName, "settings.db");
#if USE_SYSTEM_SQLITE
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());
#endif
var con = new SqliteConnection($"Data Source={dbPath};Mode=ReadOnly");
con.Open();
return con;
}
}
}