diff options
Diffstat (limited to 'Ryujinx.Ui.Common/Configuration')
7 files changed, 43 insertions, 11 deletions
diff --git a/Ryujinx.Ui.Common/Configuration/AudioBackend.cs b/Ryujinx.Ui.Common/Configuration/AudioBackend.cs index 99111ea6..1f9bd0ba 100644 --- a/Ryujinx.Ui.Common/Configuration/AudioBackend.cs +++ b/Ryujinx.Ui.Common/Configuration/AudioBackend.cs @@ -1,5 +1,9 @@ -namespace Ryujinx.Ui.Common.Configuration +using Ryujinx.Common.Utilities; +using System.Text.Json.Serialization; + +namespace Ryujinx.Ui.Common.Configuration { + [JsonConverter(typeof(TypedStringEnumConverter<AudioBackend>))] public enum AudioBackend { Dummy, diff --git a/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs b/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs index e9aec04b..14c03957 100644 --- a/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs +++ b/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs @@ -5,7 +5,7 @@ using Ryujinx.Common.Utilities; using Ryujinx.Ui.Common.Configuration.System; using Ryujinx.Ui.Common.Configuration.Ui; using System.Collections.Generic; -using System.IO; +using System.Text.Json.Nodes; namespace Ryujinx.Ui.Common.Configuration { @@ -321,14 +321,14 @@ namespace Ryujinx.Ui.Common.Configuration /// </summary> /// <remarks>Kept for file format compatibility (to avoid possible failure when parsing configuration on old versions)</remarks> /// TODO: Remove this when those older versions aren't in use anymore. - public List<object> KeyboardConfig { get; set; } + public List<JsonObject> KeyboardConfig { get; set; } /// <summary> /// Legacy controller control bindings /// </summary> /// <remarks>Kept for file format compatibility (to avoid possible failure when parsing configuration on old versions)</remarks> /// TODO: Remove this when those older versions aren't in use anymore. - public List<object> ControllerConfig { get; set; } + public List<JsonObject> ControllerConfig { get; set; } /// <summary> /// Input configurations @@ -354,11 +354,12 @@ namespace Ryujinx.Ui.Common.Configuration /// Loads a configuration file from disk /// </summary> /// <param name="path">The path to the JSON configuration file</param> + /// <param name="configurationFileFormat">Parsed configuration file</param> public static bool TryLoad(string path, out ConfigurationFileFormat configurationFileFormat) { try { - configurationFileFormat = JsonHelper.DeserializeFromFile<ConfigurationFileFormat>(path); + configurationFileFormat = JsonHelper.DeserializeFromFile(path, ConfigurationFileFormatSettings.SerializerContext.ConfigurationFileFormat); return configurationFileFormat.Version != 0; } @@ -376,8 +377,7 @@ namespace Ryujinx.Ui.Common.Configuration /// <param name="path">The path to the JSON configuration file</param> public void SaveConfig(string path) { - using FileStream fileStream = File.Create(path, 4096, FileOptions.WriteThrough); - JsonHelper.Serialize(fileStream, this, true); + JsonHelper.SerializeToFile(path, this, ConfigurationFileFormatSettings.SerializerContext.ConfigurationFileFormat); } } } diff --git a/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormatSettings.cs b/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormatSettings.cs new file mode 100644 index 00000000..6ce2ef01 --- /dev/null +++ b/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormatSettings.cs @@ -0,0 +1,9 @@ +using Ryujinx.Common.Utilities; + +namespace Ryujinx.Ui.Common.Configuration +{ + internal static class ConfigurationFileFormatSettings + { + public static readonly ConfigurationJsonSerializerContext SerializerContext = new(JsonHelper.GetDefaultSerializerOptions()); + } +}
\ No newline at end of file diff --git a/Ryujinx.Ui.Common/Configuration/ConfigurationJsonSerializerContext.cs b/Ryujinx.Ui.Common/Configuration/ConfigurationJsonSerializerContext.cs new file mode 100644 index 00000000..bb8dfb49 --- /dev/null +++ b/Ryujinx.Ui.Common/Configuration/ConfigurationJsonSerializerContext.cs @@ -0,0 +1,10 @@ +using System.Text.Json.Serialization; + +namespace Ryujinx.Ui.Common.Configuration +{ + [JsonSourceGenerationOptions(WriteIndented = true)] + [JsonSerializable(typeof(ConfigurationFileFormat))] + internal partial class ConfigurationJsonSerializerContext : JsonSerializerContext + { + } +}
\ No newline at end of file diff --git a/Ryujinx.Ui.Common/Configuration/ConfigurationState.cs b/Ryujinx.Ui.Common/Configuration/ConfigurationState.cs index bcdd2e70..82a331c1 100644 --- a/Ryujinx.Ui.Common/Configuration/ConfigurationState.cs +++ b/Ryujinx.Ui.Common/Configuration/ConfigurationState.cs @@ -9,6 +9,7 @@ using Ryujinx.Ui.Common.Configuration.Ui; using Ryujinx.Ui.Common.Helper; using System; using System.Collections.Generic; +using System.Text.Json.Nodes; namespace Ryujinx.Ui.Common.Configuration { @@ -631,8 +632,8 @@ namespace Ryujinx.Ui.Common.Configuration EnableKeyboard = Hid.EnableKeyboard, EnableMouse = Hid.EnableMouse, Hotkeys = Hid.Hotkeys, - KeyboardConfig = new List<object>(), - ControllerConfig = new List<object>(), + KeyboardConfig = new List<JsonObject>(), + ControllerConfig = new List<JsonObject>(), InputConfig = Hid.InputConfig, GraphicsBackend = Graphics.GraphicsBackend, PreferredGpu = Graphics.PreferredGpu diff --git a/Ryujinx.Ui.Common/Configuration/System/Language.cs b/Ryujinx.Ui.Common/Configuration/System/Language.cs index 3d2dc991..404f8063 100644 --- a/Ryujinx.Ui.Common/Configuration/System/Language.cs +++ b/Ryujinx.Ui.Common/Configuration/System/Language.cs @@ -1,5 +1,9 @@ -namespace Ryujinx.Ui.Common.Configuration.System +using Ryujinx.Common.Utilities; +using System.Text.Json.Serialization; + +namespace Ryujinx.Ui.Common.Configuration.System { + [JsonConverter(typeof(TypedStringEnumConverter<Language>))] public enum Language { Japanese, diff --git a/Ryujinx.Ui.Common/Configuration/System/Region.cs b/Ryujinx.Ui.Common/Configuration/System/Region.cs index fb51e08e..7dfac638 100644 --- a/Ryujinx.Ui.Common/Configuration/System/Region.cs +++ b/Ryujinx.Ui.Common/Configuration/System/Region.cs @@ -1,5 +1,9 @@ -namespace Ryujinx.Ui.Common.Configuration.System +using Ryujinx.Common.Utilities; +using System.Text.Json.Serialization; + +namespace Ryujinx.Ui.Common.Configuration.System { + [JsonConverter(typeof(TypedStringEnumConverter<Region>))] public enum Region { Japan, |
