diff --git a/Penumbra/Importer/TexToolsImport.cs b/Penumbra/Importer/TexToolsImport.cs index b34bb372..175e5bcb 100644 --- a/Penumbra/Importer/TexToolsImport.cs +++ b/Penumbra/Importer/TexToolsImport.cs @@ -4,7 +4,7 @@ using System.IO; using System.Linq; using System.Text; using Dalamud.Plugin; -using Ionic.Zip; +using ICSharpCode.SharpZipLib.Zip; using Lumina.Data; using Newtonsoft.Json; using Penumbra.Importer.Models; @@ -39,9 +39,11 @@ namespace Penumbra.Importer { PluginLog.Log( " -> Importing V1 ModPack" ); - using var extractedModPack = ZipFile.Read( modPackFile.OpenRead() ); + using var zfs = modPackFile.OpenRead(); + using var extractedModPack = new ZipFile( zfs ); - var modListRaw = GetStringFromZipEntry( extractedModPack[ "TTMPL.mpl" ], Encoding.UTF8 ).Split( + var mpl = extractedModPack.GetEntry( "TTMPL.mpl" ); + var modListRaw = GetStringFromZipEntry( extractedModPack, mpl, Encoding.UTF8 ).Split( new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None ); @@ -57,25 +59,31 @@ namespace Penumbra.Importer }; // Open the mod data file from the modpack as a SqPackStream - var modData = GetSqPackStreamFromZipEntry( extractedModPack[ "TTMPD.mpd" ] ); + var mpd = extractedModPack.GetEntry( "TTMPD.mpd" ); + var modData = GetSqPackStreamFromZipEntry( extractedModPack, mpd ); - var newModFolder = new DirectoryInfo( Path.Combine( _outDirectory.FullName, - Path.GetFileNameWithoutExtension( modPackFile.Name ) ) ); + var newModFolder = new DirectoryInfo( + Path.Combine( _outDirectory.FullName, + Path.GetFileNameWithoutExtension( modPackFile.Name ) + ) + ); newModFolder.Create(); - File.WriteAllText( Path.Combine( newModFolder.FullName, "meta.json" ), - JsonConvert.SerializeObject( modMeta ) ); + File.WriteAllText( + Path.Combine( newModFolder.FullName, "meta.json" ), + JsonConvert.SerializeObject( modMeta ) + ); ExtractSimpleModList( newModFolder, modList, modData ); } private void ImportV2ModPack( FileInfo modPackFile ) { - using var extractedModPack = ZipFile.Read( modPackFile.OpenRead() ); + using var zfs = modPackFile.OpenRead(); + using var extractedModPack = new ZipFile( zfs ); - var modList = - JsonConvert.DeserializeObject< SimpleModPack >( GetStringFromZipEntry( extractedModPack[ "TTMPL.mpl" ], - Encoding.UTF8 ) ); + var mpl = extractedModPack.GetEntry( "TTMPL.mpl" ); + var modList = JsonConvert.DeserializeObject< SimpleModPack >( GetStringFromZipEntry( extractedModPack, mpl, Encoding.UTF8 ) ); if( modList.TTMPVersion.EndsWith( "s" ) ) { @@ -93,9 +101,8 @@ namespace Penumbra.Importer { PluginLog.Log( " -> Importing Simple V2 ModPack" ); - var modList = - JsonConvert.DeserializeObject< SimpleModPack >( GetStringFromZipEntry( extractedModPack[ "TTMPL.mpl" ], - Encoding.UTF8 ) ); + var mpl = extractedModPack.GetEntry( "TTMPL.mpl" ); + var modList = JsonConvert.DeserializeObject< SimpleModPack >( GetStringFromZipEntry( extractedModPack, mpl, Encoding.UTF8 ) ); // Create a new ModMeta from the TTMP modlist info var modMeta = new ModMeta @@ -108,7 +115,8 @@ namespace Penumbra.Importer }; // Open the mod data file from the modpack as a SqPackStream - var modData = GetSqPackStreamFromZipEntry( extractedModPack[ "TTMPD.mpd" ] ); + var mpd = extractedModPack.GetEntry( "TTMPD.mpd" ); + var modData = GetSqPackStreamFromZipEntry( extractedModPack, mpd ); var newModFolder = new DirectoryInfo( Path.Combine( _outDirectory.FullName, Path.GetFileNameWithoutExtension( modList.Name ) ) ); @@ -124,9 +132,8 @@ namespace Penumbra.Importer { PluginLog.Log( " -> Importing Extended V2 ModPack" ); - var modList = - JsonConvert.DeserializeObject< ExtendedModPack >( GetStringFromZipEntry( extractedModPack[ "TTMPL.mpl" ], - Encoding.UTF8 ) ); + var mpl = extractedModPack.GetEntry( "TTMPL.mpl" ); + var modList = JsonConvert.DeserializeObject< ExtendedModPack >( GetStringFromZipEntry( extractedModPack, mpl, Encoding.UTF8 ) ); // Create a new ModMeta from the TTMP modlist info var modMeta = new ModMeta @@ -139,14 +146,20 @@ namespace Penumbra.Importer }; // Open the mod data file from the modpack as a SqPackStream - var modData = GetSqPackStreamFromZipEntry( extractedModPack[ "TTMPD.mpd" ] ); + var mpd = extractedModPack.GetEntry( "TTMPD.mpd" ); + var modData = GetSqPackStreamFromZipEntry( extractedModPack, mpd ); - var newModFolder = new DirectoryInfo( Path.Combine( _outDirectory.FullName, - Path.GetFileNameWithoutExtension( modList.Name ) ) ); + var newModFolder = new DirectoryInfo( + Path.Combine( _outDirectory.FullName, + Path.GetFileNameWithoutExtension( modList.Name ) + ) + ); newModFolder.Create(); - File.WriteAllText( Path.Combine( newModFolder.FullName, "meta.json" ), - JsonConvert.SerializeObject( modMeta ) ); + File.WriteAllText( + Path.Combine( newModFolder.FullName, "meta.json" ), + JsonConvert.SerializeObject( modMeta ) + ); if( modList.SimpleModsList != null ) ExtractSimpleModList( newModFolder, modList.SimpleModsList, modData ); @@ -203,21 +216,22 @@ namespace Penumbra.Importer } } - private static MemoryStream GetStreamFromZipEntry( ZipEntry entry ) + private static MemoryStream GetStreamFromZipEntry( ZipFile file, ZipEntry entry ) { var stream = new MemoryStream(); - entry.Extract( stream ); + using var s = file.GetInputStream( entry ); + s.CopyTo( stream ); return stream; } - private static string GetStringFromZipEntry( ZipEntry entry, Encoding encoding ) + private static string GetStringFromZipEntry( ZipFile file, ZipEntry entry, Encoding encoding ) { - return encoding.GetString( GetStreamFromZipEntry( entry ).ToArray() ); + return encoding.GetString( GetStreamFromZipEntry( file, entry ).ToArray() ); } - private static SqPackStream GetSqPackStreamFromZipEntry( ZipEntry entry ) + private static SqPackStream GetSqPackStreamFromZipEntry( ZipFile file, ZipEntry entry ) { - return new SqPackStream( GetStreamFromZipEntry( entry ) ); + return new( GetStreamFromZipEntry( file, entry ) ); } } } \ No newline at end of file diff --git a/Penumbra/Penumbra.csproj b/Penumbra/Penumbra.csproj index f2071cdb..5d64ff8a 100644 --- a/Penumbra/Penumbra.csproj +++ b/Penumbra/Penumbra.csproj @@ -56,9 +56,9 @@ - +