Skip to content

Commit

Permalink
Add support for command line args
Browse files Browse the repository at this point in the history
  • Loading branch information
aidy-jenkins committed Jun 5, 2022
1 parent ec48432 commit 8c963a8
Showing 1 changed file with 59 additions and 2 deletions.
61 changes: 59 additions & 2 deletions WebVideoGamepad.NET/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,76 @@ internal static class Program
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
static void Main(string[] args)
{
var parsed = ParseArgs(args);

Gecko.Xpcom.Initialize("Firefox");

if (!File.Exists(ConfigFilename))
throw new Exception("Failed to find config");

var configContent = File.ReadAllText(ConfigFilename);
Config.Instance = System.Text.Json.JsonSerializer.Deserialize<Config>(configContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
Config.Instance = JsonSerializer.Deserialize<Config>(configContent, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });

Config.Instance.App.Url = parsed.Url ?? Config.Instance.App.Url;
Config.Instance.App.UserAgent = parsed.UserAgent ?? Config.Instance.App.UserAgent;
Config.Instance.Frame.Fullscreen = parsed.Fullscreen ?? Config.Instance.Frame.Fullscreen;

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

class CommandArgs
{
public string Url { get; set; }
public string UserAgent { get; set; }
public bool? Fullscreen { get; set; }
}

static CommandArgs ParseArgs(string[] args)
{
var parsed = new CommandArgs();

if (!args.Any())
return parsed;

var indexedArgs = args.Select((arg, index) => (Name: arg, Index: index)).Where(arg => arg.Name.StartsWith("-"));

var argDictionary = indexedArgs
.Where(arg => !arg.Name.StartsWith("--"))
.ToDictionary(arg => arg.Name, arg => ReadValue(args[arg.Index + 1]), StringComparer.OrdinalIgnoreCase);

foreach (var arg in indexedArgs.Where(arg => arg.Name.StartsWith("--")))
argDictionary.Add(arg.Name, "true");

parsed.Url = GetValueOrDefault(argDictionary, "-url");
parsed.UserAgent = GetValueOrDefault(argDictionary, "-useragent");
var fullscreen = GetValueOrDefault(argDictionary, "--fullscreen");
if (!string.IsNullOrEmpty(fullscreen))
parsed.Fullscreen = Convert.ToBoolean(fullscreen);

return parsed;
}

private static string ReadValue(string arg)
{
if (arg.StartsWith("\""))
arg = arg.Substring(1);

if (arg.EndsWith("\""))
arg = arg.Substring(0, arg.Length - 2);

return arg;
}

private static TValue GetValueOrDefault<TKey, TValue>(Dictionary<TKey, TValue> dictionary, TKey key)
{
if (!dictionary.TryGetValue(key, out var value))
return default;

return value;
}
}
}

0 comments on commit 8c963a8

Please sign in to comment.