Further work
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
|