Config.cs 5.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. namespace Ryujinx.Core
  7. {
  8. public static class Config
  9. {
  10. public static bool LoggingEnableInfo { get; private set; }
  11. public static bool LoggingEnableTrace { get; private set; }
  12. public static bool LoggingEnableDebug { get; private set; }
  13. public static bool LoggingEnableWarn { get; private set; }
  14. public static bool LoggingEnableError { get; private set; }
  15. public static bool LoggingEnableFatal { get; private set; }
  16. public static bool LoggingEnableIpc { get; private set; }
  17. public static bool LoggingEnableLogFile { get; private set; }
  18. public static JoyCon FakeJoyCon { get; private set; }
  19. public static void Read()
  20. {
  21. var iniFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
  22. var iniPath = Path.Combine(iniFolder, "Ryujinx.conf");
  23. IniParser Parser = new IniParser(iniPath);
  24. LoggingEnableInfo = Convert.ToBoolean(Parser.Value("Logging_Enable_Info"));
  25. LoggingEnableTrace = Convert.ToBoolean(Parser.Value("Logging_Enable_Trace"));
  26. LoggingEnableDebug = Convert.ToBoolean(Parser.Value("Logging_Enable_Debug"));
  27. LoggingEnableWarn = Convert.ToBoolean(Parser.Value("Logging_Enable_Warn"));
  28. LoggingEnableError = Convert.ToBoolean(Parser.Value("Logging_Enable_Error"));
  29. LoggingEnableFatal = Convert.ToBoolean(Parser.Value("Logging_Enable_Fatal"));
  30. LoggingEnableIpc = Convert.ToBoolean(Parser.Value("Logging_Enable_Ipc"));
  31. LoggingEnableLogFile = Convert.ToBoolean(Parser.Value("Logging_Enable_LogFile"));
  32. FakeJoyCon = new JoyCon
  33. {
  34. Left = new JoyConLeft
  35. {
  36. StickUp = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Up")),
  37. StickDown = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Down")),
  38. StickLeft = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Left")),
  39. StickRight = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Right")),
  40. StickButton = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Button")),
  41. DPadUp = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Up")),
  42. DPadDown = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Down")),
  43. DPadLeft = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Left")),
  44. DPadRight = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Right")),
  45. ButtonMinus = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Button_Minus")),
  46. ButtonL = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Button_L")),
  47. ButtonZL = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Button_ZL"))
  48. },
  49. Right = new JoyConRight
  50. {
  51. StickUp = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Up")),
  52. StickDown = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Down")),
  53. StickLeft = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Left")),
  54. StickRight = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Right")),
  55. StickButton = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Button")),
  56. ButtonA = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_A")),
  57. ButtonB = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_B")),
  58. ButtonX = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_X")),
  59. ButtonY = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_Y")),
  60. ButtonPlus = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_Plus")),
  61. ButtonR = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_R")),
  62. ButtonZR = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_ZR"))
  63. }
  64. };
  65. }
  66. }
  67. // https://stackoverflow.com/a/37772571
  68. public class IniParser
  69. {
  70. private readonly Dictionary<string, string> Values;
  71. public IniParser(string Path)
  72. {
  73. Values = File.ReadLines(Path)
  74. .Where(Line => !string.IsNullOrWhiteSpace(Line) && !Line.StartsWith('#'))
  75. .Select(Line => Line.Split('=', 2))
  76. .ToDictionary(Parts => Parts[0].Trim(), Parts => Parts.Length > 1 ? Parts[1].Trim() : null);
  77. }
  78. /// <summary>
  79. /// Gets the setting value for the requested setting <see cref="Name"/>.
  80. /// </summary>
  81. /// <param name="Name">Setting Name</param>
  82. /// <param name="defaultValue">Default value of the setting</param>
  83. public string Value(string Name, string defaultValue = null)
  84. {
  85. return Values.TryGetValue(Name, out var value) ? value : defaultValue;
  86. }
  87. }
  88. }