diff --git a/JD-XI Editor/JD-XI Editor.csproj b/JD-XI Editor/JD-XI Editor.csproj
index ee7ce16..838c014 100644
--- a/JD-XI Editor/JD-XI Editor.csproj
+++ b/JD-XI Editor/JD-XI Editor.csproj
@@ -226,6 +226,7 @@
+
diff --git a/JD-XI Editor/Serializing/DeserializationResult.cs b/JD-XI Editor/Serializing/DeserializationResult.cs
index 733786e..2c75e00 100644
--- a/JD-XI Editor/Serializing/DeserializationResult.cs
+++ b/JD-XI Editor/Serializing/DeserializationResult.cs
@@ -4,13 +4,13 @@ namespace JD_XI_Editor.Serializing
{
internal class DeserializationResult where T : IPatch
{
- public bool Success { get; }
+ public DeserializationStatus Status { get; }
public T Patch { get; }
- public DeserializationResult(bool success, T patch)
+ public DeserializationResult(DeserializationStatus status, T patch)
{
- Success = success;
+ Status = status;
Patch = patch;
}
}
diff --git a/JD-XI Editor/Serializing/DeserializationStatus.cs b/JD-XI Editor/Serializing/DeserializationStatus.cs
new file mode 100644
index 0000000..cd4f98e
--- /dev/null
+++ b/JD-XI Editor/Serializing/DeserializationStatus.cs
@@ -0,0 +1,9 @@
+namespace JD_XI_Editor.Serializing
+{
+ internal enum DeserializationStatus
+ {
+ Success,
+ NothingLoaded,
+ InvalidFormat
+ }
+}
diff --git a/JD-XI Editor/Serializing/PatchSerializer.cs b/JD-XI Editor/Serializing/PatchSerializer.cs
index f2a70a9..c5be668 100644
--- a/JD-XI Editor/Serializing/PatchSerializer.cs
+++ b/JD-XI Editor/Serializing/PatchSerializer.cs
@@ -2,6 +2,7 @@
using JD_XI_Editor.Serializing.Inspectors;
using Microsoft.Win32;
using System.IO;
+using YamlDotNet.Core;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
@@ -56,11 +57,18 @@ public DeserializationResult Deserialize() where T : IPatch
{
using (var reader = new StreamReader(openFileDialog.FileName))
{
- return new DeserializationResult(true, _deserializer.Deserialize(reader));
+ try
+ {
+ return new DeserializationResult(DeserializationStatus.Success, _deserializer.Deserialize(reader));
+ }
+ catch (YamlException)
+ {
+ return new DeserializationResult(DeserializationStatus.InvalidFormat, default);
+ }
}
}
- return new DeserializationResult(false, default);
+ return new DeserializationResult(DeserializationStatus.NothingLoaded, default);
}
}
}
diff --git a/JD-XI Editor/ViewModels/AnalogSynthTabViewModel.cs b/JD-XI Editor/ViewModels/AnalogSynthTabViewModel.cs
index d1b7fdc..ea30114 100644
--- a/JD-XI Editor/ViewModels/AnalogSynthTabViewModel.cs
+++ b/JD-XI Editor/ViewModels/AnalogSynthTabViewModel.cs
@@ -4,9 +4,11 @@
using JD_XI_Editor.Managers.Events;
using JD_XI_Editor.Models.Enums.Analog;
using JD_XI_Editor.Models.Patches.Analog;
+using JD_XI_Editor.Serializing;
using JD_XI_Editor.ViewModels.Abstract;
using MahApps.Metro.Controls.Dialogs;
using Sanford.Multimedia.Midi;
+using System.Windows.Forms;
namespace JD_XI_Editor.ViewModels
{
@@ -78,9 +80,17 @@ public override void LoadPatch()
{
var result = Serializer.Deserialize();
- if (result.Success)
+ if (result.Status == DeserializationStatus.Success)
{
Patch.CopyFrom(result.Patch);
+ }
+ else if (result.Status == DeserializationStatus.InvalidFormat)
+ {
+ DialogCoordinator.ShowMessageAsync(this, "Error", "File was saved for another patch type or is corrupted", MessageDialogStyle.Affirmative, new MetroDialogSettings
+ {
+ AnimateHide = false,
+ AnimateShow = false
+ });
}
}
diff --git a/JD-XI Editor/ViewModels/Digital/DigitalSynthTabViewModel.cs b/JD-XI Editor/ViewModels/Digital/DigitalSynthTabViewModel.cs
index f7f1258..5ad2543 100644
--- a/JD-XI Editor/ViewModels/Digital/DigitalSynthTabViewModel.cs
+++ b/JD-XI Editor/ViewModels/Digital/DigitalSynthTabViewModel.cs
@@ -6,6 +6,7 @@
using JD_XI_Editor.Managers.Events;
using JD_XI_Editor.Models.Enums.Digital;
using JD_XI_Editor.Models.Patches.Digital;
+using JD_XI_Editor.Serializing;
using JD_XI_Editor.ViewModels.Abstract;
using MahApps.Metro.Controls.Dialogs;
using Sanford.Multimedia.Midi;
@@ -110,10 +111,18 @@ public override void LoadPatch()
{
var result = Serializer.Deserialize();
- if (result.Success)
+ if (result.Status == DeserializationStatus.Success)
{
Patch.CopyFrom(result.Patch);
}
+ else if (result.Status == DeserializationStatus.InvalidFormat)
+ {
+ DialogCoordinator.ShowMessageAsync(this, "Error", "File was saved for another patch type or is corrupted", MessageDialogStyle.Affirmative, new MetroDialogSettings
+ {
+ AnimateHide = false,
+ AnimateShow = false
+ });
+ }
}
///
diff --git a/JD-XI Editor/ViewModels/Drums/DrumKitTabViewModel.cs b/JD-XI Editor/ViewModels/Drums/DrumKitTabViewModel.cs
index d3f0787..8e7cab8 100644
--- a/JD-XI Editor/ViewModels/Drums/DrumKitTabViewModel.cs
+++ b/JD-XI Editor/ViewModels/Drums/DrumKitTabViewModel.cs
@@ -6,6 +6,7 @@
using JD_XI_Editor.Managers.Events;
using JD_XI_Editor.Models.Enums.DrumKit;
using JD_XI_Editor.Models.Patches.DrumKit;
+using JD_XI_Editor.Serializing;
using JD_XI_Editor.ViewModels.Abstract;
using MahApps.Metro.Controls.Dialogs;
using Sanford.Multimedia.Midi;
@@ -89,10 +90,18 @@ public override void LoadPatch()
{
var result = Serializer.Deserialize();
- if (result.Success)
+ if (result.Status == DeserializationStatus.Success)
{
Patch.CopyFrom(result.Patch);
}
+ else if (result.Status == DeserializationStatus.InvalidFormat)
+ {
+ DialogCoordinator.ShowMessageAsync(this, "Error", "File was saved for another patch type or is corrupted", MessageDialogStyle.Affirmative, new MetroDialogSettings
+ {
+ AnimateHide = false,
+ AnimateShow = false
+ });
+ }
}
///
diff --git a/JD-XI Editor/ViewModels/Effects/EffectsTabViewModel.cs b/JD-XI Editor/ViewModels/Effects/EffectsTabViewModel.cs
index 89158c2..eef91c8 100644
--- a/JD-XI Editor/ViewModels/Effects/EffectsTabViewModel.cs
+++ b/JD-XI Editor/ViewModels/Effects/EffectsTabViewModel.cs
@@ -5,6 +5,7 @@
using JD_XI_Editor.Managers.Abstract;
using JD_XI_Editor.Managers.Enums;
using JD_XI_Editor.Managers.Events;
+using JD_XI_Editor.Serializing;
using JD_XI_Editor.ViewModels.Abstract;
using MahApps.Metro.Controls.Dialogs;
using Sanford.Multimedia.Midi;
@@ -125,10 +126,18 @@ public override void LoadPatch()
{
var result = Serializer.Deserialize();
- if (result.Success)
+ if (result.Status == DeserializationStatus.Success)
{
_patch.CopyFrom(result.Patch);
}
+ else if (result.Status == DeserializationStatus.InvalidFormat)
+ {
+ DialogCoordinator.ShowMessageAsync(this, "Error", "File was saved for another patch type or is corrupted", MessageDialogStyle.Affirmative, new MetroDialogSettings
+ {
+ AnimateHide = false,
+ AnimateShow = false
+ });
+ }
}
///
diff --git a/JD-XI Editor/ViewModels/Program/CommonAndVocalFxTabViewModel.cs b/JD-XI Editor/ViewModels/Program/CommonAndVocalFxTabViewModel.cs
index 52811da..b5e1bfd 100644
--- a/JD-XI Editor/ViewModels/Program/CommonAndVocalFxTabViewModel.cs
+++ b/JD-XI Editor/ViewModels/Program/CommonAndVocalFxTabViewModel.cs
@@ -4,6 +4,7 @@
using JD_XI_Editor.Managers.Abstract;
using JD_XI_Editor.Managers.Events;
using JD_XI_Editor.Models.Patches.Program;
+using JD_XI_Editor.Serializing;
using JD_XI_Editor.ViewModels.Abstract;
using MahApps.Metro.Controls.Dialogs;
using Sanford.Multimedia.Midi;
@@ -84,10 +85,18 @@ public override void LoadPatch()
{
var result = Serializer.Deserialize();
- if (result.Success)
+ if (result.Status == DeserializationStatus.Success)
{
Patch.CopyFrom(result.Patch);
}
+ else if (result.Status == DeserializationStatus.InvalidFormat)
+ {
+ DialogCoordinator.ShowMessageAsync(this, "Error", "File was saved for another patch type or is corrupted", MessageDialogStyle.Affirmative, new MetroDialogSettings
+ {
+ AnimateHide = false,
+ AnimateShow = false
+ });
+ }
}
///