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 + }); + } } ///