From c51c2b81d8b8ea7c5df663d42c708b413162f4bc Mon Sep 17 00:00:00 2001 From: Razmoth <32140579+Razmoth@users.noreply.github.com> Date: Thu, 28 Dec 2023 18:54:36 +0400 Subject: [PATCH] - [GUI] fix bug with `AssetBrowser` (fixes #42, #47). --- AssetStudio.GUI/AssetBrowser.cs | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/AssetStudio.GUI/AssetBrowser.cs b/AssetStudio.GUI/AssetBrowser.cs index 8eb298f..1faa1e8 100644 --- a/AssetStudio.GUI/AssetBrowser.cs +++ b/AssetStudio.GUI/AssetBrowser.cs @@ -13,18 +13,18 @@ namespace AssetStudio.GUI partial class AssetBrowser : Form { private readonly MainForm _parent; + private readonly List _assetEntries; + private readonly List _columnNames; private SortOrder _sortOrder; private DataGridViewColumn _sortedColumn; - private List _assetEntries; - private List _columnNames; - + public AssetBrowser(MainForm form) { InitializeComponent(); _parent = form; - _assetEntries = new List(); _columnNames = new List(); + _assetEntries = new List(); } private async void loadAssetMap_Click(object sender, EventArgs e) @@ -62,7 +62,7 @@ namespace AssetStudio.GUI } private void loadSelected_Click(object sender, EventArgs e) { - var files = assetDataGridView.SelectedRows.Cast().Select(x => _assetEntries[x.Index]).Select(x => x.Source).ToHashSet(); + var files = assetDataGridView.SelectedRows.Cast().Select(x => _assetEntries[x.Index]?.Source).ToHashSet(); var missingFiles = files.Where(x => !File.Exists(x)); foreach (var file in missingFiles) { @@ -92,13 +92,23 @@ namespace AssetStudio.GUI Logger.Error($"Invalid argument at index {i + 1}"); continue; } + var (name, regex) = (arguments[0], arguments[1]); if (!_columnNames.Contains(name, StringComparer.OrdinalIgnoreCase)) { Logger.Error($"Unknonw argument {name}"); continue; } - filters[name] = new Regex(regex, RegexOptions.IgnoreCase); + + try + { + filters[name] = new Regex(regex, RegexOptions.IgnoreCase); + } + catch (Exception) + { + Logger.Error($"Invalid regex {regex} at argument {name}"); + continue; + } } _assetEntries.Clear(); @@ -111,7 +121,7 @@ namespace AssetStudio.GUI } private void AssetDataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { - if (e.RowIndex <= _assetEntries.Count) + if (_assetEntries.Count != 0 && e.RowIndex <= _assetEntries.Count) { var assetEntry = _assetEntries[e.RowIndex]; e.Value = e.ColumnIndex switch @@ -159,14 +169,15 @@ namespace AssetStudio.GUI 1 => x => x.Container, 2 => x => x.Source, 3 => x => x.PathID, - 4 => x => x.Type, + 4 => x => x.Type.ToString(), _ => x => "" }; - _assetEntries.Clear(); - _assetEntries.AddRange(direction == ListSortDirection.Ascending ? _assetEntries.OrderBy(keySelector).ToList() : _assetEntries.OrderByDescending(keySelector).ToList()); + var sorted = direction == ListSortDirection.Ascending ? _assetEntries.OrderBy(keySelector).ToList() : _assetEntries.OrderByDescending(keySelector).ToList(); + + _assetEntries.Clear(); + _assetEntries.AddRange(sorted); - assetDataGridView.CurrentCell = assetDataGridView[0, 0]; assetDataGridView.Rows.Clear(); assetDataGridView.RowCount = _assetEntries.Count; assetDataGridView.Refresh();