- add settings handling

master
Simon G 5 years ago
parent e7ecc6903f
commit f3e1decd82
  1. 8
      Mystify/App.axaml.cs
  2. 4
      Mystify/Installers/MainInstaller.cs
  3. 16
      Mystify/MainModel.cs
  4. 11
      Mystify/Settings/Interfaces/ISettings.cs
  5. 15
      Mystify/Settings/Interfaces/ISettingsManager.cs
  6. 49
      Mystify/Settings/SettingsManager.cs
  7. 16
      Mystify/Settings/Xml/XmlSettings.cs

@ -14,6 +14,7 @@ using Lib.Logging.Loggers.Interfaces;
using Lib.NotifyIcon;
using Lib.ProcessManaging.Interfaces;
using LightweightIocContainer.Interfaces;
using Mystify.Settings.Interfaces;
using Mystify.ViewModels;
using Mystify.Views;
using ReactiveUI;
@ -28,6 +29,8 @@ namespace Mystify
private IProcessManager? _processManager;
private INotifyIcon? _notifyIcon;
private ISettingsManager? _settingsManager;
private MainModel? _mainModel;
private MainWindow? _mainWindow;
private MainWindowViewModel? _mainWindowViewModel;
@ -52,6 +55,8 @@ namespace Mystify
_processManager = _kernel.Resolve<IProcessManager>();
_processManager.Initialize();
_settingsManager = _kernel.Resolve<ISettingsManager>();
_mainModel = _kernel.Resolve<MainModel>();
_mainWindow = new MainWindow();
@ -92,8 +97,11 @@ namespace Mystify
private async void OnExit(object? sender, ControlledApplicationLifetimeExitEventArgs args) //TODO: return Task?
{
_settingsManager?.Save();
_mainWindow?.Close();
_mainModel?.Dispose();
_notifyIcon?.Remove();
_processManager?.Dispose();

@ -2,8 +2,11 @@
// Created: 2021-04-09
// Copyright(c) 2021 SimonG. All Rights Reserved.
using LightweightIocContainer;
using LightweightIocContainer.Interfaces;
using LightweightIocContainer.Interfaces.Installers;
using Mystify.Settings;
using Mystify.Settings.Interfaces;
namespace Mystify.Installers
{
@ -12,6 +15,7 @@ namespace Mystify.Installers
public void Install(IIocContainer container)
{
container.Register<MainModel>();
container.Register<ISettingsManager, SettingsManager>(Lifestyle.Singleton);
}
}
}

@ -8,6 +8,7 @@ using Lib.Audio.Factories;
using Lib.Audio.Interfaces;
using Lib.Driver.Factories;
using Lib.Driver.Interfaces;
using Mystify.Settings.Interfaces;
namespace Mystify
{
@ -16,16 +17,27 @@ namespace Mystify
private readonly IDriverLoader _driverLoader;
private readonly IDeviceFactory _deviceFactory;
private readonly IControllableCollectorFactory _controllableCollectorFactory;
private readonly ISettings _settings;
private IDevice? _device;
private IControllableCollector? _controllableCollector;
public MainModel(IDriverLoaderFactory driverLoaderFactory, IDeviceFactory deviceFactory, IControllableCollectorFactory controllableCollectorFactory, IControllableFactory controllableFactory)
public MainModel(IDriverLoaderFactory driverLoaderFactory,
ISettingsManager settingsManager,
IDeviceFactory deviceFactory,
IControllableCollectorFactory controllableCollectorFactory,
IControllableFactory controllableFactory)
{
_driverLoader = driverLoaderFactory.Create();
_deviceFactory = deviceFactory;
_controllableCollectorFactory = controllableCollectorFactory;
ControllableFactory = controllableFactory;
_settings = settingsManager.Settings;
if (!string.IsNullOrEmpty(_settings.LastDriverPath))
LoadDriverAndDevice(_settings.LastDriverPath);
}
public string? DeviceName => _device?.Name;
@ -42,6 +54,8 @@ namespace Mystify
if (driver == null)
throw new Exception("Driver could not be loaded.");
_settings.LastDriverPath = driverPath;
_controllableCollector = _controllableCollectorFactory.Create();
_device = _deviceFactory.Create(driver, _controllableCollector);

@ -0,0 +1,11 @@
// Author: Gockner, Simon
// Created: 2021-04-26
// Copyright(c) 2021 SimonG. All Rights Reserved.
namespace Mystify.Settings.Interfaces
{
public interface ISettings
{
string? LastDriverPath { get; set; }
}
}

@ -0,0 +1,15 @@
// Author: Gockner, Simon
// Created: 2021-04-26
// Copyright(c) 2021 SimonG. All Rights Reserved.
using System;
namespace Mystify.Settings.Interfaces
{
public interface ISettingsManager
{
ISettings Settings { get; }
void Save();
}
}

@ -0,0 +1,49 @@
// Author: Gockner, Simon
// Created: 2021-04-26
// Copyright(c) 2021 SimonG. All Rights Reserved.
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using Mystify.Settings.Interfaces;
using Mystify.Settings.Xml;
namespace Mystify.Settings
{
public class SettingsManager : ISettingsManager
{
private const string SETTINGS_FILE_EXTENSION = "mys";
private readonly string _settingsFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mystify", $"Settings.{SETTINGS_FILE_EXTENSION}");
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()
{
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();
}
}
}

@ -0,0 +1,16 @@
// Author: Gockner, Simon
// Created: 2021-04-26
// Copyright(c) 2021 SimonG. All Rights Reserved.
using System.Xml.Serialization;
using Mystify.Settings.Interfaces;
namespace Mystify.Settings.Xml
{
[XmlRoot("MystifySettings")]
public class XmlSettings : ISettings
{
[XmlElement]
public string? LastDriverPath { get; set; }
}
}
Loading…
Cancel
Save