3074/Data/Config.cs

79 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Windows;
using Microsoft.Win32;
using Newtonsoft.Json;
namespace tsf_3074.Data
{
public static class Config
{
public static ConfigData Instance => _instance ?? ReadConfig();
private static ConfigData _instance;
private static ConfigData ReadConfig(string path = "config.json")
{
if (File.Exists(path))
{
return _instance = JsonConvert.DeserializeObject<ConfigData>(File.ReadAllText(path));
}
FindDestiny2(out var appPath);
if (appPath == "")
{
MessageBox.Show("You'd better to read the README document.");
Application.Current.Shutdown();
throw new Exception();
}
_instance = new ConfigData
{
Destiny2Path = appPath,
Hotkeys = new Dictionary<string, HotkeyPair>
{
{ "tsf_3074", new HotkeyPair { vk = VirtualKey.VkG, fs = VirtualKey.ModCtrl } },
{ "tsf_3074_ul", new HotkeyPair { vk = VirtualKey.VkH, fs = VirtualKey.ModCtrl } },
{ "tsf_7500", new HotkeyPair { vk = VirtualKey.VkT, fs = VirtualKey.ModCtrl } },
{ "tsf_fg", new HotkeyPair { vk = VirtualKey.VkJ, fs = VirtualKey.ModCtrl } },
{ "tsf_27k", new HotkeyPair { vk = VirtualKey.VkN, fs = VirtualKey.ModAlt } },
{ "tsf_30k", new HotkeyPair { vk = VirtualKey.VkB, fs = VirtualKey.ModAlt } },
}
};
File.WriteAllText(path, JsonConvert.SerializeObject(_instance));
return _instance;
}
public static void SaveConfig(string path = "config.json")
{
File.WriteAllText(path, JsonConvert.SerializeObject(_instance));
}
private static void FindDestiny2(out string appPath)
{
var dialog = new OpenFileDialog
{
Multiselect = false,
Title = "Select Destiny 2 Application",
Filter = "Destiny 2|destiny2.exe"
};
dialog.ShowDialog();
Console.WriteLine(dialog.FileName);
appPath = dialog.FileName;
}
}
public class ConfigData
{
public string Destiny2Path;
public Dictionary<string, HotkeyPair> Hotkeys;
}
public class HotkeyPair
{
public uint vk;
public uint fs;
}
}