diff options
Diffstat (limited to 'V3/Data/Internal/OptionsManager.cs')
-rw-r--r-- | V3/Data/Internal/OptionsManager.cs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/V3/Data/Internal/OptionsManager.cs b/V3/Data/Internal/OptionsManager.cs new file mode 100644 index 0000000..d581ba5 --- /dev/null +++ b/V3/Data/Internal/OptionsManager.cs @@ -0,0 +1,65 @@ +using System.IO; +using System.Runtime.Serialization; +using System.Xml.Serialization; +using Ninject; + +namespace V3.Data.Internal +{ + /// <summary> + /// Default implementation of IOptionsManager. + /// </summary> + // ReSharper disable once ClassNeverInstantiated.Global + internal sealed class OptionsManager : IOptionsManager, IInitializable + { + /// <summary> + /// The current options. + /// </summary> + public Options Options { get; private set; } + + private readonly IPathManager mPathManager; + private readonly XmlSerializer mSerializer = new XmlSerializer(typeof(Options)); + + /// <summary> + /// Creates a new OptionsManager. + /// </summary> + public OptionsManager(IPathManager pathManager) + { + mPathManager = pathManager; + } + + public void Initialize() + { + Options = LoadOptions(); + } + + /// <summary> + /// Saves the current options to the hard disk. + /// </summary> + public void SaveOptions() + { + var stream = new FileStream(mPathManager.OptionsFile, FileMode.Create, FileAccess.Write); + mSerializer.Serialize(stream, Options); + stream.Close(); + } + + private Options LoadOptions() + { + if (!File.Exists(mPathManager.OptionsFile)) + return new Options(); + var stream = new FileStream(mPathManager.OptionsFile, FileMode.Open, FileAccess.Read); + try + { + return (Options)mSerializer.Deserialize(stream); + } + catch (SerializationException) + { + // ignore so far + } + finally + { + stream.Close(); + } + return new Options(); + } + } +} |