Skip to content

Commit 3c35ce0

Browse files
committed
- consider filter when extracting files
1 parent 8156514 commit 3c35ce0

4 files changed

Lines changed: 28 additions & 22 deletions

File tree

CASCConsole/Program.cs

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,24 +52,19 @@ static void Main(string[] args)
5252
Console.WriteLine(" LocaleFlags: {0}", locale);
5353
Console.WriteLine(" ContentFlags: {0}", content);
5454

55-
Wildcard wildcard = new Wildcard(pattern, true, RegexOptions.IgnoreCase);
56-
57-
foreach (var file in CASCFolder.GetFiles(root.Entries.Select(kv => kv.Value)))
55+
foreach (var file in CASCFolder.GetFiles(root.Entries.Select(kv => kv.Value), filter: pattern))
5856
{
59-
if (wildcard.IsMatch(file.FullName))
57+
Console.Write("Extracting '{0}'...", file.FullName);
58+
59+
try
60+
{
61+
cascHandler.SaveFileTo(file.FullName, dest);
62+
Console.WriteLine(" Ok!");
63+
}
64+
catch (Exception exc)
6065
{
61-
Console.Write("Extracting '{0}'...", file.FullName);
62-
63-
try
64-
{
65-
cascHandler.SaveFileTo(file.FullName, dest);
66-
Console.WriteLine(" Ok!");
67-
}
68-
catch (Exception exc)
69-
{
70-
Console.WriteLine(" Error!");
71-
Logger.WriteLine(exc.Message);
72-
}
66+
Console.WriteLine(" Error!");
67+
Logger.WriteLine(exc.Message);
7368
}
7469
}
7570

CASCExplorer/CASCViewHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class CASCViewHelper
4141

4242
public List<ICASCEntry> DisplayedEntries => _displayedEntries;
4343

44-
public void ExtractFiles(NoFlickerListView filesList)
44+
public void ExtractFiles(NoFlickerListView filesList, string filter)
4545
{
4646
if (_currentFolder == null)
4747
return;
@@ -52,7 +52,7 @@ public void ExtractFiles(NoFlickerListView filesList)
5252
if (extractProgress == null)
5353
extractProgress = new ExtractProgress();
5454

55-
var files = CASCFolder.GetFiles(_displayedEntries, filesList.SelectedIndices.Cast<int>()).ToList();
55+
var files = CASCFolder.GetFiles(_displayedEntries, filesList.SelectedIndices.Cast<int>(), true, filter).ToList();
5656
extractProgress.SetExtractData(_casc, files);
5757
extractProgress.ShowDialog();
5858
}

CASCExplorer/MainForm.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ private bool NavigateFolder()
216216

217217
private void extractToolStripMenuItem_Click(object sender, EventArgs e)
218218
{
219-
viewHelper.ExtractFiles(fileList);
219+
viewHelper.ExtractFiles(fileList, filterToolStripTextBox.Text);
220220
}
221221

222222
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)

CascLib/CASCEntry.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Linq;
5+
using System.Text.RegularExpressions;
56

67
namespace CASCExplorer
78
{
@@ -41,8 +42,10 @@ public ICASCEntry GetEntry(string name)
4142
return entry;
4243
}
4344

44-
public static IEnumerable<CASCFile> GetFiles(IEnumerable<ICASCEntry> entries, IEnumerable<int> selection = null, bool recursive = true)
45+
public static IEnumerable<CASCFile> GetFiles(IEnumerable<ICASCEntry> entries, IEnumerable<int> selection = null, bool recursive = true, string filter = "")
4546
{
47+
var wildcard = filter != string.Empty && filter != "*" ? new Wildcard(filter, false, RegexOptions.IgnoreCase) : null;
48+
4649
if (selection != null)
4750
{
4851
foreach (int index in selection)
@@ -51,6 +54,8 @@ public static IEnumerable<CASCFile> GetFiles(IEnumerable<ICASCEntry> entries, IE
5154

5255
if (entry is CASCFile)
5356
{
57+
if (wildcard != null && !wildcard.IsMatch(entry.Name))
58+
continue;
5459
yield return entry as CASCFile;
5560
}
5661
else
@@ -59,8 +64,10 @@ public static IEnumerable<CASCFile> GetFiles(IEnumerable<ICASCEntry> entries, IE
5964
{
6065
var folder = entry as CASCFolder;
6166

62-
foreach (var file in GetFiles(folder.Entries.Select(kv => kv.Value)))
67+
foreach (var file in GetFiles(folder.Entries.Select(kv => kv.Value), filter: filter))
6368
{
69+
if (wildcard != null && !wildcard.IsMatch(file.Name))
70+
continue;
6471
yield return file;
6572
}
6673
}
@@ -73,6 +80,8 @@ public static IEnumerable<CASCFile> GetFiles(IEnumerable<ICASCEntry> entries, IE
7380
{
7481
if (entry is CASCFile)
7582
{
83+
if (wildcard != null && !wildcard.IsMatch(entry.Name))
84+
continue;
7685
yield return entry as CASCFile;
7786
}
7887
else
@@ -81,8 +90,10 @@ public static IEnumerable<CASCFile> GetFiles(IEnumerable<ICASCEntry> entries, IE
8190
{
8291
var folder = entry as CASCFolder;
8392

84-
foreach (var file in GetFiles(folder.Entries.Select(kv => kv.Value)))
93+
foreach (var file in GetFiles(folder.Entries.Select(kv => kv.Value), filter: filter))
8594
{
95+
if (wildcard != null && !wildcard.IsMatch(file.Name))
96+
continue;
8697
yield return file;
8798
}
8899
}

0 commit comments

Comments
 (0)