about summary refs log tree commit diff
path: root/ModerationClient/Services/CommandLineConfiguration.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ModerationClient/Services/CommandLineConfiguration.cs')
-rw-r--r--ModerationClient/Services/CommandLineConfiguration.cs52
1 files changed, 52 insertions, 0 deletions
diff --git a/ModerationClient/Services/CommandLineConfiguration.cs b/ModerationClient/Services/CommandLineConfiguration.cs
new file mode 100644
index 0000000..4debd5c
--- /dev/null
+++ b/ModerationClient/Services/CommandLineConfiguration.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.IO;
+using ArcaneLibs;
+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));
+        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);
+                    break;
+                case "--temporary":
+                    IsTemporary = true;
+                    logger.LogInformation("Using temporary profile");
+                    break;
+                case "--profile-dir":
+                    ProfileDirectory = args[++i];
+                    break;
+                case "--scale":
+                    Scale = float.Parse(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);
+    }
+
+    public string Profile { get; private set; } = "default";
+    public bool IsTemporary { get; private set; }
+
+    public string ProfileDirectory { get; private set; }
+    public float Scale { get; private set; } = 1f;
+}
\ No newline at end of file