mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Implemented GeneralSettings
This commit is contained in:
parent
fcb4ca3df3
commit
f1214eb3ab
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
|
using Artemis.DAL;
|
||||||
using Artemis.InjectionModules;
|
using Artemis.InjectionModules;
|
||||||
using Artemis.Settings;
|
using Artemis.Settings;
|
||||||
using Artemis.Utilities;
|
using Artemis.Utilities;
|
||||||
@ -21,7 +22,7 @@ namespace Artemis
|
|||||||
public ArtemisBootstrapper()
|
public ArtemisBootstrapper()
|
||||||
{
|
{
|
||||||
// Start logging before anything else
|
// Start logging before anything else
|
||||||
Logging.SetupLogging(General.Default.LogLevel);
|
Logging.SetupLogging(SettingsProvider.Load<GeneralSettings>("GeneralSettings").LogLevel);
|
||||||
|
|
||||||
Initialize();
|
Initialize();
|
||||||
BindSpecialValues();
|
BindSpecialValues();
|
||||||
|
|||||||
@ -1,22 +1,59 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using Artemis.Settings;
|
using Artemis.Settings;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using NLog;
|
||||||
|
|
||||||
namespace Artemis.DAL
|
namespace Artemis.DAL
|
||||||
{
|
{
|
||||||
public static class SettingsProvider
|
public static class SettingsProvider
|
||||||
{
|
{
|
||||||
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
private static readonly string SettingsFolder =
|
||||||
|
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artemis\settings";
|
||||||
|
|
||||||
|
private static readonly List<IArtemisSettings> Settings = new List<IArtemisSettings>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads settings with the given name from the filesystem
|
/// Loads settings with the given name from the filesystem
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="name"></param>
|
/// <param name="name"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static T Load<T>(string name)
|
public static T Load<T>(string name) where T : new()
|
||||||
{
|
{
|
||||||
if (!AreSettings(typeof(T)))
|
if (!AreSettings(typeof(T)))
|
||||||
throw new ArgumentException("Type doesn't implement IArtemisSettings");
|
throw new ArgumentException("Type doesn't implement IArtemisSettings");
|
||||||
|
|
||||||
throw new NotImplementedException();
|
// Attempt to load from memory first
|
||||||
|
var inMemory = Settings.FirstOrDefault(s => s.Name == name);
|
||||||
|
if (inMemory != null)
|
||||||
|
return (T) inMemory;
|
||||||
|
|
||||||
|
CheckSettings();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var loadSettings = (IArtemisSettings) JsonConvert
|
||||||
|
.DeserializeObject<T>(File.ReadAllText(SettingsFolder + $@"\{name}.json"));
|
||||||
|
if (loadSettings == null)
|
||||||
|
SetToDefault(ref loadSettings);
|
||||||
|
|
||||||
|
Settings.Add(loadSettings);
|
||||||
|
return (T) loadSettings;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.Error(e, "Couldn't load settings '{0}.json'", name);
|
||||||
|
|
||||||
|
// Not sure about this, I've seen prettier code
|
||||||
|
var loadSettings = (IArtemisSettings) new T();
|
||||||
|
SetToDefault(ref loadSettings);
|
||||||
|
Settings.Add(loadSettings);
|
||||||
|
return (T) loadSettings;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -25,25 +62,43 @@ namespace Artemis.DAL
|
|||||||
/// <param name="artemisSettings"></param>
|
/// <param name="artemisSettings"></param>
|
||||||
public static void Save(IArtemisSettings artemisSettings)
|
public static void Save(IArtemisSettings artemisSettings)
|
||||||
{
|
{
|
||||||
|
CheckSettings();
|
||||||
|
|
||||||
|
string json;
|
||||||
|
// Should saving fail for whatever reason, catch the exception and log it
|
||||||
|
// But DON'T touch the settings file.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
json = JsonConvert.SerializeObject(artemisSettings, Formatting.Indented);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.Error(e, "Couldn't save settings '{0}.json'", artemisSettings.Name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
File.WriteAllText(SettingsFolder + $@"\{artemisSettings.Name}.json", json);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Restores the settings object to its default values
|
/// Restores the settings object to its default values
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <param name="settings"></param>
|
||||||
/// <returns></returns>
|
public static void SetToDefault(ref IArtemisSettings settings)
|
||||||
public static T GetDefault<T>()
|
|
||||||
{
|
{
|
||||||
if (!AreSettings(typeof(T)))
|
// Loading the object from an empty JSON object makes Json.NET use all the default values
|
||||||
throw new ArgumentException("Type doesn't implement IArtemisSettings");
|
settings = (IArtemisSettings) JsonConvert.DeserializeObject("{}", settings.GetType());
|
||||||
|
}
|
||||||
|
|
||||||
// Loading the object from an empty string makes Json.NET use all the default values
|
private static void CheckSettings()
|
||||||
return JsonConvert.DeserializeObject<T>("");
|
{
|
||||||
|
if (!Directory.Exists(SettingsFolder))
|
||||||
|
Directory.CreateDirectory(SettingsFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool AreSettings(Type t)
|
private static bool AreSettings(Type t)
|
||||||
{
|
{
|
||||||
return t.IsAssignableFrom(typeof(IArtemisSettings));
|
return typeof(IArtemisSettings).IsAssignableFrom(t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,11 +2,11 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Artemis.DAL;
|
||||||
using Artemis.DeviceProviders;
|
using Artemis.DeviceProviders;
|
||||||
using Artemis.Events;
|
using Artemis.Events;
|
||||||
using Artemis.Services;
|
using Artemis.Services;
|
||||||
using Artemis.Settings;
|
using Artemis.Settings;
|
||||||
using Caliburn.Micro;
|
|
||||||
using MahApps.Metro.Controls.Dialogs;
|
using MahApps.Metro.Controls.Dialogs;
|
||||||
using Ninject;
|
using Ninject;
|
||||||
using Ninject.Extensions.Logging;
|
using Ninject.Extensions.Logging;
|
||||||
@ -18,12 +18,13 @@ namespace Artemis.Managers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class DeviceManager
|
public class DeviceManager
|
||||||
{
|
{
|
||||||
|
private readonly GeneralSettings _generalSettings;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
public event EventHandler<KeyboardChangedEventArgs> OnKeyboardChangedEvent;
|
|
||||||
|
|
||||||
public DeviceManager(ILogger logger, List<DeviceProvider> deviceProviders)
|
public DeviceManager(ILogger logger, List<DeviceProvider> deviceProviders)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_generalSettings = SettingsProvider.Load<GeneralSettings>("GeneralSettings");
|
||||||
|
|
||||||
KeyboardProviders = deviceProviders.Where(d => d.Type == DeviceType.Keyboard)
|
KeyboardProviders = deviceProviders.Where(d => d.Type == DeviceType.Keyboard)
|
||||||
.Cast<KeyboardProvider>().ToList();
|
.Cast<KeyboardProvider>().ToList();
|
||||||
@ -46,17 +47,18 @@ namespace Artemis.Managers
|
|||||||
public KeyboardProvider ActiveKeyboard { get; set; }
|
public KeyboardProvider ActiveKeyboard { get; set; }
|
||||||
|
|
||||||
public bool ChangingKeyboard { get; private set; }
|
public bool ChangingKeyboard { get; private set; }
|
||||||
|
public event EventHandler<KeyboardChangedEventArgs> OnKeyboardChangedEvent;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enables the last keyboard according to the settings file
|
/// Enables the last keyboard according to the settings file
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void EnableLastKeyboard()
|
public void EnableLastKeyboard()
|
||||||
{
|
{
|
||||||
_logger.Debug("Getting last keyboard: {0}", General.Default.LastKeyboard);
|
_logger.Debug("Getting last keyboard: {0}", _generalSettings.LastKeyboard);
|
||||||
if (string.IsNullOrEmpty(General.Default.LastKeyboard))
|
if (string.IsNullOrEmpty(_generalSettings.LastKeyboard))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var keyboard = KeyboardProviders.FirstOrDefault(k => k.Name == General.Default.LastKeyboard);
|
var keyboard = KeyboardProviders.FirstOrDefault(k => k.Name == _generalSettings.LastKeyboard);
|
||||||
EnableKeyboard(keyboard);
|
EnableKeyboard(keyboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +71,7 @@ namespace Artemis.Managers
|
|||||||
if (keyboardProvider == null)
|
if (keyboardProvider == null)
|
||||||
throw new ArgumentNullException(nameof(keyboardProvider));
|
throw new ArgumentNullException(nameof(keyboardProvider));
|
||||||
|
|
||||||
if (ChangingKeyboard || ActiveKeyboard?.Name == keyboardProvider.Name)
|
if (ChangingKeyboard || (ActiveKeyboard?.Name == keyboardProvider.Name))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_logger.Debug("Trying to enable keyboard: {0}", keyboardProvider.Name);
|
_logger.Debug("Trying to enable keyboard: {0}", keyboardProvider.Name);
|
||||||
@ -101,8 +103,8 @@ namespace Artemis.Managers
|
|||||||
|
|
||||||
DialogService.ShowErrorMessageBox(keyboardProvider.CantEnableText);
|
DialogService.ShowErrorMessageBox(keyboardProvider.CantEnableText);
|
||||||
ActiveKeyboard = null;
|
ActiveKeyboard = null;
|
||||||
General.Default.LastKeyboard = null;
|
_generalSettings.LastKeyboard = null;
|
||||||
General.Default.Save();
|
_generalSettings.Save();
|
||||||
_logger.Warn("Failed enabling keyboard: {0}", keyboardProvider.Name);
|
_logger.Warn("Failed enabling keyboard: {0}", keyboardProvider.Name);
|
||||||
ChangingKeyboard = false;
|
ChangingKeyboard = false;
|
||||||
return;
|
return;
|
||||||
@ -115,8 +117,8 @@ namespace Artemis.Managers
|
|||||||
await ActiveKeyboard.EnableAsync(dialog);
|
await ActiveKeyboard.EnableAsync(dialog);
|
||||||
EnableUsableDevices();
|
EnableUsableDevices();
|
||||||
|
|
||||||
General.Default.LastKeyboard = ActiveKeyboard.Name;
|
_generalSettings.LastKeyboard = ActiveKeyboard.Name;
|
||||||
General.Default.Save();
|
_generalSettings.Save();
|
||||||
|
|
||||||
RaiseKeyboardChangedEvent(new KeyboardChangedEventArgs(oldKeyboard, ActiveKeyboard));
|
RaiseKeyboardChangedEvent(new KeyboardChangedEventArgs(oldKeyboard, ActiveKeyboard));
|
||||||
_logger.Debug("Enabled keyboard: {0}", keyboardProvider.Name);
|
_logger.Debug("Enabled keyboard: {0}", keyboardProvider.Name);
|
||||||
@ -157,8 +159,8 @@ namespace Artemis.Managers
|
|||||||
|
|
||||||
if (save)
|
if (save)
|
||||||
{
|
{
|
||||||
General.Default.LastKeyboard = null;
|
_generalSettings.LastKeyboard = null;
|
||||||
General.Default.Save();
|
_generalSettings.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
RaiseKeyboardChangedEvent(new KeyboardChangedEventArgs(oldKeyboard, null));
|
RaiseKeyboardChangedEvent(new KeyboardChangedEventArgs(oldKeyboard, null));
|
||||||
|
|||||||
@ -19,11 +19,13 @@ namespace Artemis.Managers
|
|||||||
private EffectModel _activeEffect;
|
private EffectModel _activeEffect;
|
||||||
private LoopManager _waitLoopManager;
|
private LoopManager _waitLoopManager;
|
||||||
private EffectModel _waitEffect;
|
private EffectModel _waitEffect;
|
||||||
|
private readonly GeneralSettings _generalSettings;
|
||||||
|
|
||||||
public EffectManager(ILogger logger, DeviceManager deviceManager)
|
public EffectManager(ILogger logger, DeviceManager deviceManager)
|
||||||
{
|
{
|
||||||
EffectModels = new List<EffectModel>();
|
EffectModels = new List<EffectModel>();
|
||||||
|
|
||||||
|
_generalSettings = DAL.SettingsProvider.Load<GeneralSettings>("GeneralSettings");
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_deviceManager = deviceManager;
|
_deviceManager = deviceManager;
|
||||||
|
|
||||||
@ -71,10 +73,10 @@ namespace Artemis.Managers
|
|||||||
/// <returns>Whether enabling was successful or not.</returns>
|
/// <returns>Whether enabling was successful or not.</returns>
|
||||||
public EffectModel GetLastEffect()
|
public EffectModel GetLastEffect()
|
||||||
{
|
{
|
||||||
_logger.Debug("Getting last effect: {0}", General.Default.LastEffect);
|
_logger.Debug("Getting last effect: {0}", _generalSettings.LastEffect);
|
||||||
return General.Default.LastEffect == null
|
return _generalSettings.LastEffect == null
|
||||||
? null
|
? null
|
||||||
: EffectModels.FirstOrDefault(e => e.Name == General.Default.LastEffect);
|
: EffectModels.FirstOrDefault(e => e.Name == _generalSettings.LastEffect);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -149,8 +151,8 @@ namespace Artemis.Managers
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Non-game effects are stored as the new LastEffect.
|
// Non-game effects are stored as the new LastEffect.
|
||||||
General.Default.LastEffect = ActiveEffect?.Name;
|
_generalSettings.LastEffect = ActiveEffect?.Name;
|
||||||
General.Default.Save();
|
_generalSettings.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DeviceManagerOnOnKeyboardChangedEvent(object sender, KeyboardChangedEventArgs e)
|
private void DeviceManagerOnOnKeyboardChangedEvent(object sender, KeyboardChangedEventArgs e)
|
||||||
@ -180,11 +182,10 @@ namespace Artemis.Managers
|
|||||||
ActiveEffect.Dispose();
|
ActiveEffect.Dispose();
|
||||||
ActiveEffect = null;
|
ActiveEffect = null;
|
||||||
|
|
||||||
General.Default.LastEffect = null;
|
_generalSettings.LastEffect = null;
|
||||||
General.Default.Save();
|
_generalSettings.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_logger.Debug("Cleared active effect");
|
_logger.Debug("Cleared active effect");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Timers;
|
using System.Timers;
|
||||||
|
using Artemis.DAL;
|
||||||
using Artemis.Models;
|
using Artemis.Models;
|
||||||
using Artemis.Modules.Effects.ProfilePreview;
|
using Artemis.Modules.Effects.ProfilePreview;
|
||||||
using Artemis.Settings;
|
using Artemis.Settings;
|
||||||
@ -44,7 +45,7 @@ namespace Artemis.Managers
|
|||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void SetupProfilePreview(object sender, ElapsedEventArgs e)
|
private void SetupProfilePreview(object sender, ElapsedEventArgs e)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(General.Default.LastKeyboard) || _deviceManager.ChangingKeyboard ||
|
if (string.IsNullOrEmpty(SettingsProvider.Load<GeneralSettings>("GeneralSettings").LastKeyboard) || _deviceManager.ChangingKeyboard ||
|
||||||
ProfilePreviewModel == null)
|
ProfilePreviewModel == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@ -33,7 +33,7 @@ namespace Artemis.Modules.Games.RocketLeague
|
|||||||
|
|
||||||
private void SetVersionText()
|
private void SetVersionText()
|
||||||
{
|
{
|
||||||
if (!General.Default.EnablePointersUpdate)
|
if (!DAL.SettingsProvider.Load<GeneralSettings>("GeneralSettings").EnablePointersUpdate)
|
||||||
{
|
{
|
||||||
VersionText = "Note: You disabled pointer updates, this could result in the " +
|
VersionText = "Note: You disabled pointer updates, this could result in the " +
|
||||||
"Rocket League effect not working after a game update.";
|
"Rocket League effect not working after a game update.";
|
||||||
|
|||||||
@ -13,6 +13,12 @@ namespace Artemis.Settings
|
|||||||
{
|
{
|
||||||
public class GeneralSettings : IArtemisSettings
|
public class GeneralSettings : IArtemisSettings
|
||||||
{
|
{
|
||||||
|
public GeneralSettings()
|
||||||
|
{
|
||||||
|
ThemeManager.AddAccent("CorsairYellow", new Uri("pack://application:,,,/Styles/Accents/CorsairYellow.xaml"));
|
||||||
|
ApplyTheme();
|
||||||
|
}
|
||||||
|
|
||||||
[DefaultValue("WindowsProfile")]
|
[DefaultValue("WindowsProfile")]
|
||||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
|
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
|
||||||
public string LastEffect { get; set; }
|
public string LastEffect { get; set; }
|
||||||
|
|||||||
@ -36,7 +36,7 @@ namespace Artemis.Utilities.GameState
|
|||||||
if (Running)
|
if (Running)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Port = General.Default.GamestatePort;
|
Port = DAL.SettingsProvider.Load<GeneralSettings>("GeneralSettings").GamestatePort;
|
||||||
|
|
||||||
_listener = new HttpListener();
|
_listener = new HttpListener();
|
||||||
_listener.Prefixes.Add($"http://localhost:{Port}/");
|
_listener.Prefixes.Add($"http://localhost:{Port}/");
|
||||||
|
|||||||
@ -7,6 +7,7 @@ using Artemis.Settings;
|
|||||||
using Artemis.Utilities.Memory;
|
using Artemis.Utilities.Memory;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Squirrel;
|
using Squirrel;
|
||||||
|
using SettingsProvider = Artemis.DAL.SettingsProvider;
|
||||||
|
|
||||||
namespace Artemis.Utilities
|
namespace Artemis.Utilities
|
||||||
{
|
{
|
||||||
@ -15,7 +16,7 @@ namespace Artemis.Utilities
|
|||||||
public static async void UpdateApp()
|
public static async void UpdateApp()
|
||||||
{
|
{
|
||||||
// Only update if the user allows it
|
// Only update if the user allows it
|
||||||
if (!General.Default.AutoUpdate)
|
if (!SettingsProvider.Load<GeneralSettings>("GeneralSettings").AutoUpdate)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// TODO: Remove prerelease before releasing
|
// TODO: Remove prerelease before releasing
|
||||||
|
|||||||
@ -201,7 +201,8 @@ namespace Artemis.ViewModels.Flyouts
|
|||||||
|
|
||||||
public void ResetSettings()
|
public void ResetSettings()
|
||||||
{
|
{
|
||||||
GeneralSettings = SettingsProvider.GetDefault<GeneralSettings>();
|
IArtemisSettings generalSettings = GeneralSettings;
|
||||||
|
SettingsProvider.SetToDefault(ref generalSettings);
|
||||||
GeneralSettings.Save();
|
GeneralSettings.Save();
|
||||||
NotifyOfPropertyChange(() => GeneralSettings);
|
NotifyOfPropertyChange(() => GeneralSettings);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
using Artemis.DAL;
|
||||||
using Artemis.Events;
|
using Artemis.Events;
|
||||||
using Artemis.Managers;
|
using Artemis.Managers;
|
||||||
using Artemis.Services;
|
using Artemis.Services;
|
||||||
@ -31,8 +32,9 @@ namespace Artemis.ViewModels
|
|||||||
MainManager.EnableProgram();
|
MainManager.EnableProgram();
|
||||||
MainManager.OnEnabledChangedEvent += MainManagerOnOnEnabledChangedEvent;
|
MainManager.OnEnabledChangedEvent += MainManagerOnOnEnabledChangedEvent;
|
||||||
|
|
||||||
Enabled = !General.Default.Suspended;
|
var generalSettings = SettingsProvider.Load<GeneralSettings>("GeneralSettings");
|
||||||
if (General.Default.ShowOnStartup)
|
Enabled = !generalSettings.Suspended;
|
||||||
|
if (generalSettings.ShowOnStartup)
|
||||||
ShowWindow();
|
ShowWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user