Config.cs 6.6 KB

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