From 7a66a8c83ac449daf95febd1605608e490e301a7 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 16 Dec 2022 19:08:46 +0000 Subject: [PATCH] Use JSON for settings. --- Aaru.Settings/Settings.cs | 52 ++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/Aaru.Settings/Settings.cs b/Aaru.Settings/Settings.cs index 3e5262b12..0776134fd 100644 --- a/Aaru.Settings/Settings.cs +++ b/Aaru.Settings/Settings.cs @@ -34,6 +34,8 @@ using System; using System.IO; using System.Runtime.InteropServices; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Xml.Serialization; using Aaru.CommonTypes.Interop; using Claunia.PropertyList; @@ -42,6 +44,11 @@ using PlatformID = Aaru.CommonTypes.Interop.PlatformID; namespace Aaru.Settings; +[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + IncludeFields = true)] +[JsonSerializable(typeof(DicSettings))] +public partial class SettingsContext : JsonSerializerContext {} + /// Settings public class DicSettings { @@ -457,20 +464,39 @@ public static class Settings Environment.GetEnvironmentVariable(XDG_CONFIG_HOME) ?? XDG_CONFIG_HOME_RESOLVED); string dicSettingsPath = Path.Combine(xdgConfigPath, "DiscImageChef.xml"); - string settingsPath = Path.Combine(xdgConfigPath, "Aaru.xml"); + string xmlSettingsPath = Path.Combine(xdgConfigPath, "Aaru.xml"); + string settingsPath = Path.Combine(xdgConfigPath, "Aaru.json"); if(File.Exists(oldSettingsPath) && - !File.Exists(settingsPath)) + !File.Exists(xmlSettingsPath)) { if(!Directory.Exists(xdgConfigPath)) Directory.CreateDirectory(xdgConfigPath); - File.Move(oldSettingsPath, settingsPath); + File.Move(oldSettingsPath, xmlSettingsPath); } if(File.Exists(dicSettingsPath) && - !File.Exists(settingsPath)) - File.Move(dicSettingsPath, settingsPath); + !File.Exists(xmlSettingsPath)) + File.Move(dicSettingsPath, xmlSettingsPath); + + if(File.Exists(xmlSettingsPath)) + { + // Should be working due to source generator for json below + #pragma warning disable IL2026 + var xs = new XmlSerializer(Current.GetType()); + #pragma warning restore IL2026 + + prefsSr = new StreamReader(xmlSettingsPath); + + // Should be working due to source generator for json below + #pragma warning disable IL2026 + Current = (DicSettings)xs.Deserialize(prefsSr); + #pragma warning restore IL2026 + + prefsSr.Close(); + File.Delete(xmlSettingsPath); + } if(!File.Exists(settingsPath)) { @@ -480,9 +506,12 @@ public static class Settings return; } - var xs = new XmlSerializer(Current.GetType()); - prefsSr = new StreamReader(settingsPath); - Current = (DicSettings)xs.Deserialize(prefsSr); + var fs = new FileStream(settingsPath, FileMode.Open); + + Current = + JsonSerializer.Deserialize(fs, typeof(DicSettings), SettingsContext.Default) as DicSettings; + + fs.Close(); } break; @@ -640,14 +669,13 @@ public static class Settings Path.Combine(homePath, Environment.GetEnvironmentVariable(XDG_CONFIG_HOME) ?? XDG_CONFIG_HOME_RESOLVED); - string settingsPath = Path.Combine(xdgConfigPath, "Aaru.xml"); + string settingsPath = Path.Combine(xdgConfigPath, "Aaru.json"); if(!Directory.Exists(xdgConfigPath)) Directory.CreateDirectory(xdgConfigPath); - var fs = new FileStream(settingsPath, FileMode.Create); - var xs = new XmlSerializer(Current.GetType()); - xs.Serialize(fs, Current); + var fs = new FileStream(settingsPath, FileMode.Create, FileAccess.ReadWrite); + JsonSerializer.Serialize(fs, Current, Current.GetType(), SettingsContext.Default); fs.Close(); }