From 370a6612ab541e4fe6238d4e2f882c6fec56c74f Mon Sep 17 00:00:00 2001 From: Yaki Khadafi Date: Mon, 12 Sep 2016 16:38:29 +0300 Subject: [PATCH] - consider filter when extracting files --- CASCConsole/Program.cs | 6 ++---- CASCExplorer/CASCViewHelper.cs | 4 ++-- CASCExplorer/MainForm.cs | 2 +- CascLib/CASCEntry.cs | 12 ++++++++++-- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/CASCConsole/Program.cs b/CASCConsole/Program.cs index 3f490a9e..007e74c2 100644 --- a/CASCConsole/Program.cs +++ b/CASCConsole/Program.cs @@ -95,12 +95,10 @@ static void Main(string[] args) if (mode == "pattern") { - Wildcard wildcard = new Wildcard(pattern, true, RegexOptions.IgnoreCase); - foreach (var file in CASCFolder.GetFiles(root.Entries.Select(kv => kv.Value))) + foreach (var file in CASCFolder.GetFiles(root.Entries.Select(kv => kv.Value), filter: pattern)) { - if (wildcard.IsMatch(file.FullName)) - ExtractFile(cascHandler, file.FullName, dest); + ExtractFile(cascHandler, file.FullName, dest); } } else if (mode == "listfile") diff --git a/CASCExplorer/CASCViewHelper.cs b/CASCExplorer/CASCViewHelper.cs index 4134f0d3..352cebe0 100644 --- a/CASCExplorer/CASCViewHelper.cs +++ b/CASCExplorer/CASCViewHelper.cs @@ -45,7 +45,7 @@ class CASCViewHelper public bool AnalyzeSoundFiles { get; set; } = true; public bool AddFileDataIdToSoundFiles { get; set; } = true; - public void ExtractFiles(NoFlickerListView filesList) + public void ExtractFiles(NoFlickerListView filesList, string filter) { if (_currentFolder == null) return; @@ -56,7 +56,7 @@ public void ExtractFiles(NoFlickerListView filesList) if (extractProgress == null) extractProgress = new ExtractProgress(); - var files = CASCFolder.GetFiles(_displayedEntries, filesList.SelectedIndices.Cast()).ToList(); + var files = CASCFolder.GetFiles(_displayedEntries, filesList.SelectedIndices.Cast(), true, filter).ToList(); extractProgress.SetExtractData(_casc, files); extractProgress.ShowDialog(); } diff --git a/CASCExplorer/MainForm.cs b/CASCExplorer/MainForm.cs index 847e374e..cdb0a59b 100644 --- a/CASCExplorer/MainForm.cs +++ b/CASCExplorer/MainForm.cs @@ -230,7 +230,7 @@ private bool NavigateFolder() private void extractToolStripMenuItem_Click(object sender, EventArgs e) { - viewHelper.ExtractFiles(fileList); + viewHelper.ExtractFiles(fileList, filterToolStripTextBox.Text); } private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) diff --git a/CascLib/CASCEntry.cs b/CascLib/CASCEntry.cs index 18dfdc1f..4237275c 100644 --- a/CascLib/CASCEntry.cs +++ b/CascLib/CASCEntry.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text.RegularExpressions; namespace CASCLib { @@ -34,14 +35,19 @@ public ICASCEntry GetEntry(string name) return entry; } - public static IEnumerable GetFiles(IEnumerable entries, IEnumerable selection = null, bool recursive = true) + public static IEnumerable GetFiles(IEnumerable entries, IEnumerable selection = null, bool recursive = true, string filter = "") { + var wildcard = filter != string.Empty && filter != "*" ? new Wildcard(filter, false, RegexOptions.IgnoreCase) : null; + var entries2 = selection != null ? selection.Select(index => entries.ElementAt(index)) : entries; foreach (var entry in entries2) { if (entry is CASCFile file1) { + if (wildcard != null && !wildcard.IsMatch(file1.Name)) + continue; + yield return file1; } else @@ -50,8 +56,10 @@ public static IEnumerable GetFiles(IEnumerable entries, IE { var folder = entry as CASCFolder; - foreach (var file in GetFiles(folder.Entries.Select(kv => kv.Value))) + foreach (var file in GetFiles(folder.Entries.Select(kv => kv.Value), filter: filter)) { + if (wildcard != null && !wildcard.IsMatch(file.Name)) + continue; yield return file; } }