From 5d97f77dc3f4e17ad70d5097febc5b04072bde36 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Tue, 20 Apr 2021 22:13:56 +0200 Subject: [PATCH] Make meta parsing more robust. --- Penumbra/Importer/TexToolsMeta.cs | 12 +++++++++--- Penumbra/MetaData/ImcExtensions.cs | 17 ++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Penumbra/Importer/TexToolsMeta.cs b/Penumbra/Importer/TexToolsMeta.cs index 3c581d8d..eb897b93 100644 --- a/Penumbra/Importer/TexToolsMeta.cs +++ b/Penumbra/Importer/TexToolsMeta.cs @@ -140,10 +140,16 @@ namespace Penumbra.Importer private void AddIfNotDefault( MetaManipulation manipulation ) { - if( !Service< MetaDefaults >.Get().CheckAgainstDefault( manipulation ) ) + try { - Service< MetaDefaults >.Get().CheckAgainstDefault( manipulation ); - Manipulations.Add( manipulation ); + if( !Service< MetaDefaults >.Get().CheckAgainstDefault( manipulation ) ) + { + Manipulations.Add( manipulation ); + } + } + catch( Exception e ) + { + PluginLog.Debug("Skipped {Type}-manipulation:\n{e:l}", manipulation.Type, e ); } } diff --git a/Penumbra/MetaData/ImcExtensions.cs b/Penumbra/MetaData/ImcExtensions.cs index bfc54a85..e73406e6 100644 --- a/Penumbra/MetaData/ImcExtensions.cs +++ b/Penumbra/MetaData/ImcExtensions.cs @@ -9,6 +9,13 @@ using Penumbra.Mods; namespace Penumbra.MetaData { + public class InvalidImcVariantException : ArgumentOutOfRangeException + { + public InvalidImcVariantException() + : base("Trying to manipulate invalid variant.") + { } + } + public static class ImcExtensions { public static bool Equal( this ImcFile.ImageChangeData lhs, ImcFile.ImageChangeData rhs ) @@ -84,14 +91,10 @@ namespace Penumbra.MetaData if( imc.Variant > parts[ idx ].Variants.Length ) { - PluginLog.Debug( "Trying to manipulate invalid variant {Variant} of {NumVariants} in file {FileName}.", imc.Variant, - parts[ idx ].Variants.Length, file.FilePath.Path ); - return ref parts[ idx ].Variants[ parts[ idx ].Variants.Length - 1 ]; - } - else - { - return ref parts[ idx ].Variants[ imc.Variant - 1 ]; + throw new InvalidImcVariantException(); } + + return ref parts[ idx ].Variants[ imc.Variant - 1 ]; } public static ImcFile Clone( this ImcFile file )