|
|
|
|
@ -4,8 +4,8 @@ |
|
|
|
|
|
|
|
|
|
using System; |
|
|
|
|
using System.IO; |
|
|
|
|
using System.Xml; |
|
|
|
|
using System.Xml.Serialization; |
|
|
|
|
using Lib.Xml; |
|
|
|
|
using Lib.Xml.Interfaces; |
|
|
|
|
using Mystify.Settings.Interfaces; |
|
|
|
|
using Mystify.Settings.Xml; |
|
|
|
|
|
|
|
|
|
@ -16,34 +16,20 @@ namespace Mystify.Settings |
|
|
|
|
private const string SETTINGS_FILE_EXTENSION = "mys"; |
|
|
|
|
private readonly string _settingsFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mystify", $"Settings.{SETTINGS_FILE_EXTENSION}"); |
|
|
|
|
|
|
|
|
|
private readonly IXmlReader<XmlSettings> _xmlReader; |
|
|
|
|
private readonly IXmlWriter<ISettings, XmlSettings> _xmlWriter; |
|
|
|
|
|
|
|
|
|
private ISettings? _settings; |
|
|
|
|
|
|
|
|
|
public ISettings Settings => _settings ??= Load(); |
|
|
|
|
|
|
|
|
|
public void Save() |
|
|
|
|
{ |
|
|
|
|
FileStream file = File.OpenWrite(_settingsFilePath); |
|
|
|
|
|
|
|
|
|
XmlWriter xmlWriter = XmlWriter.Create(file, new XmlWriterSettings {Indent = true}); |
|
|
|
|
XmlSerializer xmlSerializer = new(typeof(XmlSettings)); |
|
|
|
|
|
|
|
|
|
XmlSerializerNamespaces xmlSerializerNamespaces = new(); |
|
|
|
|
xmlSerializerNamespaces.Add("", ""); |
|
|
|
|
|
|
|
|
|
xmlSerializer.Serialize(xmlWriter, Settings, xmlSerializerNamespaces); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private ISettings Load() |
|
|
|
|
public SettingsManager() |
|
|
|
|
{ |
|
|
|
|
if (!File.Exists(_settingsFilePath)) |
|
|
|
|
return new XmlSettings(); |
|
|
|
|
|
|
|
|
|
FileStream file = File.OpenRead(_settingsFilePath); |
|
|
|
|
|
|
|
|
|
XmlReader xmlReader = XmlReader.Create(file); |
|
|
|
|
XmlSerializer xmlSerializer = new(typeof(XmlSettings)); |
|
|
|
|
|
|
|
|
|
return (XmlSettings?) xmlSerializer.Deserialize(xmlReader) ?? new XmlSettings(); |
|
|
|
|
_xmlReader = new XmlReader<XmlSettings>(); |
|
|
|
|
_xmlWriter = new XmlWriter<ISettings, XmlSettings>(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public ISettings Settings => _settings ??= Load(); |
|
|
|
|
|
|
|
|
|
public void Save() => _xmlWriter.Write(Settings, _settingsFilePath); |
|
|
|
|
private ISettings Load() => _xmlReader.Read(_settingsFilePath); |
|
|
|
|
} |
|
|
|
|
} |