From 66dc447ddb71a5e1001c91c34d8479c47944d267 Mon Sep 17 00:00:00 2001 From: morkt Date: Sun, 6 Mar 2016 03:28:58 +0400 Subject: [PATCH] added ZIP settings for archive creation. also ignore directories in entries list. --- ArcFormats/ArcZIP.cs | 23 +++++++++++++++---- ArcFormats/Properties/Settings.Designer.cs | 26 +++++++++++++++++++++- ArcFormats/Properties/Settings.settings | 6 +++++ ArcFormats/app.config | 6 +++++ 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/ArcFormats/ArcZIP.cs b/ArcFormats/ArcZIP.cs index bfef5488..f6c233d8 100644 --- a/ArcFormats/ArcZIP.cs +++ b/ArcFormats/ArcZIP.cs @@ -30,6 +30,8 @@ using System.IO; using System.IO.Compression; using System.Linq; using System.Text; +using GameRes.Formats.Properties; +using GameRes.Formats.Strings; namespace GameRes.Formats.PkWare { @@ -97,7 +99,8 @@ namespace GameRes.Formats.PkWare var zip = new ZipArchive (input, ZipArchiveMode.Read, false, Encodings.cp932); try { - var dir = zip.Entries.Select (z => new ZipEntry (z) as Entry).ToList(); + var dir = zip.Entries.Where (z => !z.FullName.EndsWith ("/")) + .Select (z => new ZipEntry (z) as Entry).ToList(); return new PkZipArchive (file, this, dir, zip); } catch @@ -147,9 +150,18 @@ namespace GameRes.Formats.PkWare public override ResourceOptions GetDefaultOptions () { + Encoding enc; + try + { + enc = Encoding.GetEncoding (Settings.Default.ZIPEncodingCP); + } + catch + { + enc = Encodings.cp932; + } return new ZipOptions { - CompressionLevel = CompressionLevel.Optimal, - FileNameEncoding = Encodings.cp932, + CompressionLevel = Settings.Default.ZIPCompression, + FileNameEncoding = enc, }; } @@ -158,7 +170,8 @@ namespace GameRes.Formats.PkWare public override void Create (Stream output, IEnumerable list, ResourceOptions options, EntryCallback callback) { - var zip_options = (ZipOptions)options; + var zip_options = GetOptions (options); + int callback_count = 0; using (var zip = new ZipArchive (output, ZipArchiveMode.Create, true, zip_options.FileNameEncoding)) { foreach (var entry in list) @@ -167,6 +180,8 @@ namespace GameRes.Formats.PkWare using (var input = File.OpenRead (entry.Name)) using (var zip_file = zip_entry.Open()) { + if (null != callback) + callback (++callback_count, entry, arcStrings.MsgAddingFile); input.CopyTo (zip_file); } } diff --git a/ArcFormats/Properties/Settings.Designer.cs b/ArcFormats/Properties/Settings.Designer.cs index 29d4403a..2bfbf676 100644 --- a/ArcFormats/Properties/Settings.Designer.cs +++ b/ArcFormats/Properties/Settings.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34209 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -477,5 +477,29 @@ namespace GameRes.Formats.Properties { this["YPFScheme"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Optimal")] + public global::System.IO.Compression.CompressionLevel ZIPCompression { + get { + return ((global::System.IO.Compression.CompressionLevel)(this["ZIPCompression"])); + } + set { + this["ZIPCompression"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("932")] + public int ZIPEncodingCP { + get { + return ((int)(this["ZIPEncodingCP"])); + } + set { + this["ZIPEncodingCP"] = value; + } + } } } diff --git a/ArcFormats/Properties/Settings.settings b/ArcFormats/Properties/Settings.settings index 278f5829..87049644 100644 --- a/ArcFormats/Properties/Settings.settings +++ b/ArcFormats/Properties/Settings.settings @@ -116,5 +116,11 @@ + + Optimal + + + 932 + \ No newline at end of file diff --git a/ArcFormats/app.config b/ArcFormats/app.config index 78f2a550..5f06f0cb 100644 --- a/ArcFormats/app.config +++ b/ArcFormats/app.config @@ -118,6 +118,12 @@ + + Optimal + + + 932 +