-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBrowserLauncher.cs
83 lines (73 loc) · 2.37 KB
/
BrowserLauncher.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
namespace BrowserPicker
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;
using BrowserPicker.Settings;
public class BrowserLauncher
{
public BrowserLauncher(IEnumerable<string> args)
{
this.Arguments = BrowserPickerArguments.Parse(args);
}
private BrowserPickerArguments Arguments { get; }
public void Execute()
{
switch (this.Arguments.Mode)
{
case Mode.OpenUri:
{
var settings = BrowserPickerSettings.Load();
BrowserInfo browser = settings.GetBrowser(this.Arguments.Uri);
Launch(browser.Path, $"{browser.Arguments} {this.Arguments.Uri.AbsoluteUri}");
break;
}
case Mode.OpenSettings:
{
Launch(null, BrowserPickerSettings.DefaultSettingFileName);
break;
}
}
}
private static void Launch(string program, string arguments)
{
using (string.IsNullOrEmpty(program) ? Process.Start(arguments) : Process.Start(program, arguments))
{
}
}
private enum Mode
{
None = 0,
OpenUri,
OpenSettings,
}
private class BrowserPickerArguments
{
private BrowserPickerArguments()
{
this.Mode = Mode.OpenUri;
}
public Mode Mode { get; private set; }
public Uri Uri { get; private set; }
public static BrowserPickerArguments Parse(IEnumerable<string> args)
{
var arguments = new BrowserPickerArguments();
foreach (var arg in args.Skip(1))
{
switch (arg.ToLowerInvariant())
{
case "/config":
case "/c":
arguments.Mode = Mode.OpenSettings;
break;
default:
arguments.Uri = new Uri(arg);
break;
}
}
return arguments;
}
}
}
}