From f16751e2f33bf8634342d2c0d8ba175d5ed3ea5b Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Thu, 15 Oct 2026 17:00:22 +0700 Subject: [PATCH 1/2] fix(browser): reveal Files workspace on explicit Browse Files action --- MainWindow.IedBrowser.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/MainWindow.IedBrowser.cs b/MainWindow.IedBrowser.cs index 511bfcb54..e94cffacf 100644 --- a/MainWindow.IedBrowser.cs +++ b/MainWindow.IedBrowser.cs @@ -166,6 +166,20 @@ private void IedBrowserBrowseFiles_Click(object sender, RoutedEventArgs e) IedBrowserDetailStatus.Text = "Connect this IED to browse remote files."; return; } + // The toolbar action must reveal the Files workspace before + // starting its read; otherwise a successful directory response is + // invisible while the operator stays on SG/Data Model. + var filesPage = _iedBrowserTree.FindVisible("category/files"); + if (filesPage is not null) + { + _iedBrowserSyncingSelection = true; + try { IedBrowserTreeGrid.SelectedItem = filesPage; } + finally { _iedBrowserSyncingSelection = false; } + _iedBrowserNavigation.SelectFromTree(filesPage); + RenderIedBrowserSelection(filesPage, + device.LiveDiscoveryModel ?? device.SclWorkspace?.DesignModel, + device.IsConnected); + } _iedBrowserFilesLoaded = false; _ = BrowseIedBrowserFilesAsync(device); } From 2001a359a1cb0e93e80fd4272308257b62545b78 Mon Sep 17 00:00:00 2001 From: Ari Sulistiono Date: Thu, 15 Oct 2026 17:00:46 +0700 Subject: [PATCH 2/2] test(browser): guard Browse Files page navigation before MMS directory scan --- tests/ARSAS.Tests/M2IedBrowserFilesTests.cs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/ARSAS.Tests/M2IedBrowserFilesTests.cs b/tests/ARSAS.Tests/M2IedBrowserFilesTests.cs index e4ecbaafa..9ed517c6a 100644 --- a/tests/ARSAS.Tests/M2IedBrowserFilesTests.cs +++ b/tests/ARSAS.Tests/M2IedBrowserFilesTests.cs @@ -176,6 +176,27 @@ public void FreshTransfer_GatesOnEveryLocalPathAndByteCount() finally { Directory.Delete(root, recursive: true); } } + [Fact] + public void BrowseFilesToolbar_RevealsExistingFilesPageBeforeDirectoryRead() + { + var source = File.ReadAllText(Find("MainWindow.IedBrowser.cs")); + var start = source.IndexOf("private void IedBrowserBrowseFiles_Click", + StringComparison.Ordinal); + var end = source.IndexOf("private void IedBrowserRefresh_Click", + start, StringComparison.Ordinal); + Assert.True(start >= 0 && end > start); + var handler = source[start..end]; + var navigate = handler.IndexOf("FindVisible(\"category/files\")", + StringComparison.Ordinal); + var read = handler.IndexOf("BrowseIedBrowserFilesAsync(device)", + StringComparison.Ordinal); + Assert.True(navigate >= 0 && read > navigate); + Assert.Contains("RenderIedBrowserSelection(filesPage", handler, + StringComparison.Ordinal); + Assert.Contains("_iedBrowserSyncingSelection = true", handler, + StringComparison.Ordinal); + } + [Fact] public void NativeFilesGrid_ExposesThreeColumns_AndBoundedActions() {