summaryrefslogtreecommitdiff
path: root/grapher/Models/Serialized
diff options
context:
space:
mode:
Diffstat (limited to 'grapher/Models/Serialized')
-rw-r--r--grapher/Models/Serialized/RawAccelSettings.cs27
-rw-r--r--grapher/Models/Serialized/SettingsManager.cs51
2 files changed, 54 insertions, 24 deletions
diff --git a/grapher/Models/Serialized/RawAccelSettings.cs b/grapher/Models/Serialized/RawAccelSettings.cs
index 3f5aebc..570a6c8 100644
--- a/grapher/Models/Serialized/RawAccelSettings.cs
+++ b/grapher/Models/Serialized/RawAccelSettings.cs
@@ -1,6 +1,8 @@
using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
using System;
using System.IO;
+using System.Linq;
namespace grapher.Models.Serialized
{
@@ -13,9 +15,8 @@ namespace grapher.Models.Serialized
public static readonly string DefaultSettingsFile = Path.Combine(ExecutingDirectory, Constants.DefaultSettingsFileName);
public static readonly JsonSerializerSettings SerializerSettings = new JsonSerializerSettings
{
- MissingMemberHandling = MissingMemberHandling.Error,
+ MissingMemberHandling = MissingMemberHandling.Ignore,
};
-
#endregion Fields
#region Constructors
@@ -33,9 +34,10 @@ namespace grapher.Models.Serialized
#endregion Constructors
#region Properties
-
+ [JsonProperty(Required = Required.Always)]
public GUISettings GUISettings { get; set; }
+ [JsonProperty(DriverSettings.Key, Required = Required.Always)]
public DriverSettings AccelerationSettings { get; set; }
#endregion Properties
@@ -51,15 +53,17 @@ namespace grapher.Models.Serialized
{
try
{
- return JsonConvert.DeserializeObject<RawAccelSettings>(File.ReadAllText(file), SerializerSettings);
+ var settings = JsonConvert.DeserializeObject<RawAccelSettings>(File.ReadAllText(file), SerializerSettings);
+ if (settings is null) throw new JsonException($"{file} contains invalid JSON");
+ return settings;
}
catch (FileNotFoundException e)
{
throw new FileNotFoundException($"Settings file does not exist at {file}", e);
}
- catch (JsonSerializationException e)
+ catch (JsonException e)
{
- throw new JsonSerializationException($"Settings file at {file} does not contain valid Raw Accel Settings.", e);
+ throw new JsonException($"Settings file at {file} does not contain valid Raw Accel Settings.", e);
}
}
@@ -80,7 +84,16 @@ namespace grapher.Models.Serialized
public void Save(string file)
{
- File.WriteAllText(file, JsonConvert.SerializeObject(this, Formatting.Indented));
+ JObject thisJO = JObject.FromObject(this);
+ AddComments(thisJO);
+ File.WriteAllText(file, thisJO.ToString(Formatting.Indented));
+ }
+
+ private void AddComments(JObject thisJO)
+ {
+ string modes = string.Join(" | ", Enum.GetNames(typeof(AccelMode)));
+ ((JObject)thisJO[DriverSettings.Key])
+ .AddFirst(new JProperty("### Mode Types ###", modes));
}
#endregion Methods
diff --git a/grapher/Models/Serialized/SettingsManager.cs b/grapher/Models/Serialized/SettingsManager.cs
index 26160f5..93cf42b 100644
--- a/grapher/Models/Serialized/SettingsManager.cs
+++ b/grapher/Models/Serialized/SettingsManager.cs
@@ -47,28 +47,31 @@ namespace grapher.Models.Serialized
#region Methods
- public void UpdateActiveSettings(DriverSettings settings)
+ public SettingsErrors TryUpdateActiveSettings(DriverSettings settings)
{
- ActiveAccel.UpdateFromSettings(settings);
- SendToDriver(settings);
+ var errors = TryUpdateAccel(settings);
- RawAccelSettings.AccelerationSettings = settings;
- RawAccelSettings.GUISettings = new GUISettings
+ if (errors.Empty())
{
- AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked,
- DPI = (int)DpiField.Data,
- PollRate = (int)PollRateField.Data,
- ShowLastMouseMove = ShowLastMouseMoveMenuItem.Checked,
- ShowVelocityAndGain = ShowVelocityAndGainMoveMenuItem.Checked,
- };
+ RawAccelSettings.AccelerationSettings = settings;
+ RawAccelSettings.GUISettings = new GUISettings
+ {
+ AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked,
+ DPI = (int)DpiField.Data,
+ PollRate = (int)PollRateField.Data,
+ ShowLastMouseMove = ShowLastMouseMoveMenuItem.Checked,
+ ShowVelocityAndGain = ShowVelocityAndGainMoveMenuItem.Checked,
+ };
- RawAccelSettings.Save();
+ RawAccelSettings.Save();
+ }
+
+ return errors;
}
public void UpdateActiveAccelFromFileSettings(DriverSettings settings)
- {
- ActiveAccel.UpdateFromSettings(settings);
- SendToDriver(settings);
+ {
+ TryUpdateAccel(settings);
DpiField.SetToEntered(RawAccelSettings.GUISettings.DPI);
PollRateField.SetToEntered(RawAccelSettings.GUISettings.PollRate);
@@ -77,9 +80,23 @@ namespace grapher.Models.Serialized
ShowVelocityAndGainMoveMenuItem.Checked = RawAccelSettings.GUISettings.ShowVelocityAndGain;
}
+ public SettingsErrors TryUpdateAccel(DriverSettings settings)
+ {
+ var errors = SendToDriverSafe(settings);
+ if (errors.Empty()) ActiveAccel.UpdateFromSettings(settings);
+ return errors;
+ }
+
public static void SendToDriver(DriverSettings settings)
{
- new Thread(() => DriverInterop.SetActiveSettings(settings)).Start();
+ new Thread(() => DriverInterop.Write(settings)).Start();
+ }
+
+ public static SettingsErrors SendToDriverSafe(DriverSettings settings)
+ {
+ var errors = DriverInterop.GetSettingsErrors(settings);
+ if (errors.Empty()) SendToDriver(settings);
+ return errors;
}
public void Startup()
@@ -95,7 +112,7 @@ namespace grapher.Models.Serialized
}
return;
}
- catch (JsonSerializationException e)
+ catch (JsonException e)
{
Console.WriteLine($"bad settings: {e}");
}