about summary refs log tree commit diff
path: root/ModerationClient/Services
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2024-08-08 02:57:34 +0200
committerRory& <root@rory.gay>2024-08-08 03:02:10 +0200
commitdf5fe7c86e41235f99a9b0d69519a18581eddd5e (patch)
treed7ae3b2c9b98ffcf4fbe4613091dfc7db7e2c62b /ModerationClient/Services
parentList rooms (diff)
downloadModerationClient-df5fe7c86e41235f99a9b0d69519a18581eddd5e.tar.xz
Further work
Diffstat (limited to 'ModerationClient/Services')
-rw-r--r--ModerationClient/Services/CommandLineConfiguration.cs83
1 files changed, 56 insertions, 27 deletions
diff --git a/ModerationClient/Services/CommandLineConfiguration.cs b/ModerationClient/Services/CommandLineConfiguration.cs

index 4debd5c..63c3691 100644 --- a/ModerationClient/Services/CommandLineConfiguration.cs +++ b/ModerationClient/Services/CommandLineConfiguration.cs
@@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.IO; using ArcaneLibs; @@ -6,47 +7,75 @@ using Microsoft.Extensions.Logging; namespace ModerationClient.Services; -public class CommandLineConfiguration { - public CommandLineConfiguration(ILogger<CommandLineConfiguration> logger) { - var args = Environment.GetCommandLineArgs(); - logger.LogInformation("Command line arguments: " + string.Join(", ", args)); +[SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] +public record CommandLineConfiguration { + private readonly string? _loginData; + + public static CommandLineConfiguration FromProcessArgs() { + // logger.LogInformation("Command line arguments: " + string.Join(", ", Environment.GetCommandLineArgs())); + CommandLineConfiguration cfg = FromSerialised(Environment.GetCommandLineArgs()); + + if (string.IsNullOrWhiteSpace(cfg.ProfileDirectory)) + cfg = cfg with { + ProfileDirectory = cfg.IsTemporary + ? Directory.CreateTempSubdirectory("ModerationClient-tmp").FullName + : Util.ExpandPath($"$HOME/.local/share/ModerationClient/{cfg.Profile}") + }; + + // logger.LogInformation("Profile directory: " + cfg.ProfileDirectory); + Directory.CreateDirectory(cfg.ProfileDirectory); + if (!string.IsNullOrWhiteSpace(cfg.LoginData)) { + File.WriteAllText(Path.Combine(cfg.ProfileDirectory, "login.json"), cfg.LoginData); + } + return cfg; + } + + public string[] Serialise() { + List<string> args = new(); + if (Profile != "default") args.AddRange(["--profile", Profile]); + if (IsTemporary) args.Add("--temporary"); + if (Math.Abs(Scale - 1f) > float.Epsilon) args.AddRange(["--scale", Scale.ToString()]); + if (ProfileDirectory != Util.ExpandPath("$HOME/.local/share/ModerationClient/default")) args.AddRange(["--profile-dir", ProfileDirectory]); + if (!string.IsNullOrWhiteSpace(_loginData)) args.AddRange(["--login-data", _loginData!]); + return args.ToArray(); + } + + public static CommandLineConfiguration FromSerialised(string[] args) { + CommandLineConfiguration cfg = new(); for (var i = 0; i < args.Length; i++) { - logger.LogInformation("Processing argument: " + args[i]); switch (args[i]) { case "--profile": - case "-p": - if (args.Length <= i + 1 || args[i + 1].StartsWith("-")) { - throw new ArgumentException("No profile specified"); - } - - Profile = args[++i]; - logger.LogInformation("Set profile to: " + Profile); + cfg = cfg with { Profile = args[++i] }; break; case "--temporary": - IsTemporary = true; - logger.LogInformation("Using temporary profile"); + cfg = cfg with { IsTemporary = true }; break; case "--profile-dir": - ProfileDirectory = args[++i]; + cfg = cfg with { ProfileDirectory = args[++i] }; break; case "--scale": - Scale = float.Parse(args[++i]); + cfg = cfg with { Scale = float.Parse(args[++i]) }; + break; + case "--login-data": + cfg = cfg with { LoginData = args[++i] }; break; } } - if (string.IsNullOrWhiteSpace(ProfileDirectory)) - ProfileDirectory = IsTemporary - ? Directory.CreateTempSubdirectory("ModerationClient-tmp").FullName - : Util.ExpandPath($"$HOME/.local/share/ModerationClient/{Profile}"); - - logger.LogInformation("Profile directory: " + ProfileDirectory); - Directory.CreateDirectory(ProfileDirectory); + return cfg; } - public string Profile { get; private set; } = "default"; - public bool IsTemporary { get; private set; } + public string Profile { get; init; } = "default"; + public bool IsTemporary { get; init; } - public string ProfileDirectory { get; private set; } - public float Scale { get; private set; } = 1f; + public string ProfileDirectory { get; init; } + public float Scale { get; init; } = 1f; + + public string? LoginData { + get => _loginData; + init { + Console.WriteLine("Setting login data: " + value); + _loginData = value; + } + } } \ No newline at end of file