From 6649e82f2811f1c0f61f5615f81754c874c92d16 Mon Sep 17 00:00:00 2001 From: Filippo Ferrario <102259289+ferrariofilippo@users.noreply.github.com> Date: Tue, 16 Jan 2024 22:51:58 +0100 Subject: [PATCH] Fix: Fixed issue where folders sizes weren't calculated when opening Properties from the sidebar (#14480) --- src/Files.App/Data/Models/ItemViewModel.cs | 15 ++++++++++++--- .../ViewModels/UserControls/SidebarViewModel.cs | 14 ++++++++++++-- src/Files.App/Views/HomePage.xaml.cs | 12 +++++++++++- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/Files.App/Data/Models/ItemViewModel.cs b/src/Files.App/Data/Models/ItemViewModel.cs index 01be652b85d0..430d8df79e4b 100644 --- a/src/Files.App/Data/Models/ItemViewModel.cs +++ b/src/Files.App/Data/Models/ItemViewModel.cs @@ -1642,8 +1642,17 @@ await Task.Run(async () => }); rootFolder ??= await FilesystemTasks.Wrap(() => StorageFileExtensions.DangerousGetFolderFromPathAsync(path)); - if (rootFolder?.DisplayName is not null) - currentFolder.ItemNameRaw = rootFolder.DisplayName; + if (rootFolder is not null) + { + if (rootFolder.DisplayName is not null) + currentFolder.ItemNameRaw = rootFolder.DisplayName; + + if (!string.Equals(path, Constants.UserEnvironmentPaths.RecycleBinPath, StringComparison.OrdinalIgnoreCase)) + { + var syncStatus = await CheckCloudDriveSyncStatusAsync(rootFolder); + currentFolder.SyncStatusUI = CloudDriveSyncStatusUI.FromCloudDriveSyncStatus(syncStatus); + } + } return 0; } @@ -1691,7 +1700,7 @@ private void CheckForSolutionFile() .FirstOrDefault()?.ItemPath; } - private async Task CheckCloudDriveSyncStatusAsync(IStorageItem item) + public async Task CheckCloudDriveSyncStatusAsync(IStorageItem item) { int? syncStatus = null; if (item is BaseStorageFile file && file.Properties is not null) diff --git a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs index 162e7444f939..620dc9ff1df4 100644 --- a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs @@ -891,7 +891,7 @@ private async Task ReorderItemsAsync() private void OpenProperties(CommandBarFlyout menu) { EventHandler flyoutClosed = null!; - flyoutClosed = (s, e) => + flyoutClosed = async (s, e) => { menu.Closed -= flyoutClosed; if (rightClickedItem is DriveItem) @@ -900,7 +900,7 @@ private void OpenProperties(CommandBarFlyout menu) FilePropertiesHelpers.OpenPropertiesWindow(new LibraryItem(library), PaneHolder.ActivePane); else if (rightClickedItem is LocationItem locationItem) { - ListedItem listedItem = new ListedItem(null!) + var listedItem = new ListedItem(null!) { ItemPath = locationItem.Path, ItemNameRaw = locationItem.Text, @@ -908,6 +908,16 @@ private void OpenProperties(CommandBarFlyout menu) ItemType = "Folder".GetLocalizedResource(), }; + if (!string.Equals(locationItem.Path, Constants.UserEnvironmentPaths.RecycleBinPath, StringComparison.OrdinalIgnoreCase)) + { + BaseStorageFolder matchingStorageFolder = await PaneHolder.ActivePane.FilesystemViewModel.GetFolderFromPathAsync(locationItem.Path); + if (matchingStorageFolder is not null) + { + var syncStatus = await PaneHolder.ActivePane.FilesystemViewModel.CheckCloudDriveSyncStatusAsync(matchingStorageFolder); + listedItem.SyncStatusUI = CloudDriveSyncStatusUI.FromCloudDriveSyncStatus(syncStatus); + } + } + FilePropertiesHelpers.OpenPropertiesWindow(listedItem, PaneHolder.ActivePane); } }; diff --git a/src/Files.App/Views/HomePage.xaml.cs b/src/Files.App/Views/HomePage.xaml.cs index 9016d366b9ae..593fee5e594c 100644 --- a/src/Files.App/Views/HomePage.xaml.cs +++ b/src/Files.App/Views/HomePage.xaml.cs @@ -245,7 +245,7 @@ private void WidgetCardNewPaneInvoked(object sender, QuickAccessCardInvokedEvent AppInstance.PaneHolder?.OpenPathInNewPane(e.Path); } - private void QuickAccessWidget_CardPropertiesInvoked(object sender, QuickAccessCardEventArgs e) + private async void QuickAccessWidget_CardPropertiesInvoked(object sender, QuickAccessCardEventArgs e) { ListedItem listedItem = new(null!) { @@ -255,6 +255,16 @@ private void QuickAccessWidget_CardPropertiesInvoked(object sender, QuickAccessC ItemType = "Folder".GetLocalizedResource(), }; + if (!string.Equals(e.Item.Path, Constants.UserEnvironmentPaths.RecycleBinPath, StringComparison.OrdinalIgnoreCase)) + { + BaseStorageFolder matchingStorageFolder = await AppInstance.FilesystemViewModel.GetFolderFromPathAsync(e.Item.Path); + if (matchingStorageFolder is not null) + { + var syncStatus = await AppInstance.FilesystemViewModel.CheckCloudDriveSyncStatusAsync(matchingStorageFolder); + listedItem.SyncStatusUI = CloudDriveSyncStatusUI.FromCloudDriveSyncStatus(syncStatus); + } + } + FilePropertiesHelpers.OpenPropertiesWindow(listedItem, AppInstance); }