forked from KSP-CKAN/CKAN-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Win32Registry.cs
94 lines (77 loc) · 2.97 KB
/
Win32Registry.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
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.Collections.Generic;
using System.Linq;
namespace CKAN
{
public interface IWin32Registry
{
string AutoStartInstance { get; set; }
void SetRegistryToInstances(SortedList<string, KSP> instances, string auto_start_instance);
IEnumerable<Tuple<string, string>> GetInstances();
}
public class Win32Registry : IWin32Registry
{
private static readonly string CKAN_KEY = @"HKEY_CURRENT_USER\Software\CKAN";
public Win32Registry()
{
ConstructKey();
}
private int InstanceCount
{
get { return GetRegistryValue(@"KSPInstanceCount", 0); }
}
public string AutoStartInstance
{
get { return GetRegistryValue(@"KSPAutoStartInstance", ""); }
set { SetAutoStartInstance(value??String.Empty); }
}
private Tuple<string, string> GetInstance(int i)
{
return new Tuple<string, string>(GetRegistryValue("KSPInstanceName_" + i, ""),
GetRegistryValue("KSPInstancePath_" + i, ""));
}
public void SetRegistryToInstances(SortedList<string, KSP> instances, string auto_start_instance)
{
SetAutoStartInstance(auto_start_instance ?? "");
SetNumberOfInstances(instances.Count);
foreach (var instance in instances.Select((instance,i)=>
new {number=i,name=instance.Key,path=instance.Value}))
{
SetInstanceKeysTo(instance.number, instance.name, instance.path);
}
}
public IEnumerable<Tuple<string, string>> GetInstances()
{
return Enumerable.Range(0, InstanceCount).Select(GetInstance).ToList();
}
private void ConstructKey()
{
var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\CKAN");
if (key == null)
{
Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\CKAN");
}
}
private void SetAutoStartInstance(string instance_name)
{
SetRegistryValue(@"KSPAutoStartInstance", instance_name ?? String.Empty);
}
private void SetNumberOfInstances(int count)
{
SetRegistryValue(@"KSPInstanceCount", count);
}
private void SetInstanceKeysTo(int instance_number, string name, KSP ksp)
{
SetRegistryValue(@"KSPInstanceName_" + instance_number, name);
SetRegistryValue(@"KSPInstancePath_" + instance_number, ksp.GameDir());
}
private void SetRegistryValue<T>(string key, T value)
{
Microsoft.Win32.Registry.SetValue(CKAN_KEY, key, value);
}
private T GetRegistryValue<T>(string key, T default_value)
{
return (T)Microsoft.Win32.Registry.GetValue(CKAN_KEY, key, default_value);
}
}
}