Save groups after incorporating meta files and do not delete meta files that may still be used for other redirections.

This commit is contained in:
Ottermandias 2022-11-26 11:52:04 +01:00
parent 4435bb035a
commit 95d7bc0023
2 changed files with 30 additions and 12 deletions

View file

@ -80,9 +80,15 @@ public partial class Mod
// Deletes the source files if delete is true. // Deletes the source files if delete is true.
private void IncorporateAllMetaChanges( bool delete ) private void IncorporateAllMetaChanges( bool delete )
{ {
var changes = false;
foreach( var subMod in AllSubMods.OfType< SubMod >() ) foreach( var subMod in AllSubMods.OfType< SubMod >() )
{ {
subMod.IncorporateMetaChanges( ModPath, delete ); changes |= subMod.IncorporateMetaChanges( ModPath, delete );
}
if( changes )
{
SaveAllGroups();
} }
} }
} }

View file

@ -182,8 +182,11 @@ public partial class Mod
// If .meta or .rgsp files are encountered, parse them and incorporate their meta changes into the mod. // If .meta or .rgsp files are encountered, parse them and incorporate their meta changes into the mod.
// If delete is true, the files are deleted afterwards. // If delete is true, the files are deleted afterwards.
public void IncorporateMetaChanges( DirectoryInfo basePath, bool delete ) public bool IncorporateMetaChanges( DirectoryInfo basePath, bool delete )
{ {
var deleteList = new List< string >();
var oldSize = ManipulationData.Count;
var deleteString = delete ? "with deletion." : "without deletion.";
foreach( var (key, file) in Files.ToList() ) foreach( var (key, file) in Files.ToList() )
{ {
var ext1 = key.Extension().AsciiToLower().ToString(); var ext1 = key.Extension().AsciiToLower().ToString();
@ -199,11 +202,8 @@ public partial class Mod
} }
var meta = new TexToolsMeta( File.ReadAllBytes( file.FullName ) ); var meta = new TexToolsMeta( File.ReadAllBytes( file.FullName ) );
if( delete ) Penumbra.Log.Verbose( $"Incorporating {file} as Metadata file of {meta.MetaManipulations.Count} manipulations {deleteString}" );
{ deleteList.Add( file.FullName );
File.Delete( file.FullName );
}
ManipulationData.UnionWith( meta.MetaManipulations ); ManipulationData.UnionWith( meta.MetaManipulations );
} }
else if( ext1 == ".rgsp" || ext2 == ".rgsp" ) else if( ext1 == ".rgsp" || ext2 == ".rgsp" )
@ -215,10 +215,8 @@ public partial class Mod
} }
var rgsp = TexToolsMeta.FromRgspFile( file.FullName, File.ReadAllBytes( file.FullName ) ); var rgsp = TexToolsMeta.FromRgspFile( file.FullName, File.ReadAllBytes( file.FullName ) );
if( delete ) Penumbra.Log.Verbose( $"Incorporating {file} as racial scaling file of {rgsp.MetaManipulations.Count} manipulations {deleteString}" );
{ deleteList.Add( file.FullName );
File.Delete( file.FullName );
}
ManipulationData.UnionWith( rgsp.MetaManipulations ); ManipulationData.UnionWith( rgsp.MetaManipulations );
} }
@ -228,6 +226,20 @@ public partial class Mod
Penumbra.Log.Error( $"Could not incorporate meta changes in mod {basePath} from file {file.FullName}:\n{e}" ); Penumbra.Log.Error( $"Could not incorporate meta changes in mod {basePath} from file {file.FullName}:\n{e}" );
} }
} }
foreach( var file in deleteList )
{
try
{
File.Delete( file );
}
catch( Exception e )
{
Penumbra.Log.Error( $"Could not delete incorporated meta file {file}:\n{e}" );
}
}
return oldSize < ManipulationData.Count;
} }
public void WriteTexToolsMeta( DirectoryInfo basePath, bool test = false ) public void WriteTexToolsMeta( DirectoryInfo basePath, bool test = false )
@ -254,7 +266,7 @@ public partial class Mod
} }
} }
[Conditional("DEBUG")] [Conditional( "DEBUG" )]
private void TestMetaWriting( Dictionary< string, byte[] > files ) private void TestMetaWriting( Dictionary< string, byte[] > files )
{ {
var meta = new HashSet< MetaManipulation >( Manipulations.Count ); var meta = new HashSet< MetaManipulation >( Manipulations.Count );