Skip to content

Commit 4162d19

Browse files
committed
Do not block while loading sidebar icons
1 parent 73a7c4c commit 4162d19

File tree

5 files changed

+32
-14
lines changed

5 files changed

+32
-14
lines changed

Files/DataModels/SidebarPinnedModel.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,14 +113,18 @@ public async Task ShowHideRecycleBinItemAsync(bool show)
113113
{
114114
Text = ApplicationData.Current.LocalSettings.Values.Get("RecycleBin_Title", "Recycle Bin"),
115115
IsDefaultLocation = true,
116-
Icon = await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() => UIHelpers.GetIconResource(Constants.ImageRes.RecycleBin)),
116+
Icon = await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() => new BitmapImage()),
117117
Path = CommonPaths.RecycleBinPath
118118
};
119119
// Add recycle bin to sidebar, title is read from LocalSettings (provided by the fulltrust process)
120120
// TODO: the very first time the app is launched localized name not available
121121
if (!favoriteSection.ChildItems.Any(x => x.Path == CommonPaths.RecycleBinPath))
122122
{
123-
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() => favoriteSection.ChildItems.Add(recycleBinItem));
123+
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() =>
124+
{
125+
favoriteSection.ChildItems.Add(recycleBinItem);
126+
UIHelpers.LoadIconResource(recycleBinItem.Icon, Constants.ImageRes.RecycleBin);
127+
});
124128
}
125129
}
126130
else
@@ -337,7 +341,7 @@ public async Task AddAllItemsToSidebar()
337341
Text = "SidebarFavorites".GetLocalized(),
338342
Section = SectionType.Favorites,
339343
SelectsOnInvoked = false,
340-
Icon = await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() => UIHelpers.GetIconResource(Constants.Shell32.QuickAccess)),
344+
Icon = await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() => new BitmapImage()),
341345
Font = MainViewModel.FontName,
342346
ChildItems = new ObservableCollection<INavigationControlItem>()
343347
};
@@ -352,7 +356,11 @@ public async Task AddAllItemsToSidebar()
352356
SidebarControl.SideBarItems.BeginBulkOperation();
353357
var index = 0; // First section
354358
SidebarControl.SideBarItems.Insert(index, favoriteSection);
355-
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() => SidebarControl.SideBarItems.EndBulkOperation());
359+
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() =>
360+
{
361+
SidebarControl.SideBarItems.EndBulkOperation();
362+
UIHelpers.LoadIconResource(favoriteSection.Icon, Constants.Shell32.QuickAccess);
363+
});
356364
}
357365
}
358366
finally

Files/Filesystem/Drives.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using Windows.Storage;
2222
using Windows.Storage.FileProperties;
2323
using Windows.UI.Core;
24+
using Windows.UI.Xaml.Media.Imaging;
2425
using DriveType = Files.DataModels.NavigationControlItems.DriveType;
2526

2627
namespace Files.Filesystem
@@ -141,14 +142,15 @@ await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPrio
141142
Text = "SidebarDrives".GetLocalized(),
142143
Section = SectionType.Drives,
143144
SelectsOnInvoked = false,
144-
Icon = await UIHelpers.GetIconResource(Constants.ImageRes.ThisPC),
145+
Icon = new BitmapImage(),
145146
ChildItems = new ObservableCollection<INavigationControlItem>()
146147
};
147148
var index = (SidebarControl.SideBarItems.Any(item => item.Section == SectionType.Favorites) ? 1 : 0) +
148149
(SidebarControl.SideBarItems.Any(item => item.Section == SectionType.Library) ? 1 : 0); // After libraries section
149150
SidebarControl.SideBarItems.BeginBulkOperation();
150151
SidebarControl.SideBarItems.Insert(Math.Min(index, SidebarControl.SideBarItems.Count), section);
151152
SidebarControl.SideBarItems.EndBulkOperation();
153+
UIHelpers.LoadIconResource(section.Icon, Constants.ImageRes.ThisPC);
152154
}
153155

154156
// Sync drives to sidebar

Files/Filesystem/LibraryManager.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using System.Threading.Tasks;
1818
using Windows.ApplicationModel.Core;
1919
using Windows.UI.Core;
20+
using Windows.UI.Xaml.Media.Imaging;
2021

2122
namespace Files.Filesystem
2223
{
@@ -201,13 +202,14 @@ await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPrio
201202
Text = "SidebarLibraries".GetLocalized(),
202203
Section = SectionType.Library,
203204
SelectsOnInvoked = false,
204-
Icon = await UIHelpers.GetIconResource(Constants.ImageRes.Libraries),
205+
Icon = new BitmapImage(),
205206
ChildItems = new ObservableCollection<INavigationControlItem>()
206207
};
207208
var index = (SidebarControl.SideBarItems.Any(item => item.Section == SectionType.Favorites) ? 1 : 0); // After favorites section
208209
SidebarControl.SideBarItems.BeginBulkOperation();
209210
SidebarControl.SideBarItems.Insert(Math.Min(index, SidebarControl.SideBarItems.Count), librarySection);
210211
SidebarControl.SideBarItems.EndBulkOperation();
212+
UIHelpers.LoadIconResource(section.Icon, Constants.ImageRes.Libraries);
211213
}
212214
}
213215
finally

Files/Filesystem/NetworkDrivesManager.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using Windows.ApplicationModel.Core;
1717
using Windows.Foundation.Collections;
1818
using Windows.UI.Core;
19+
using Windows.UI.Xaml.Media.Imaging;
1920

2021
namespace Files.Filesystem
2122
{
@@ -129,7 +130,7 @@ await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPrio
129130
Text = "SidebarNetworkDrives".GetLocalized(),
130131
Section = SectionType.Network,
131132
SelectsOnInvoked = false,
132-
Icon = await UIHelpers.GetIconResource(Constants.ImageRes.NetworkDrives),
133+
Icon = new BitmapImage(),
133134
ChildItems = new ObservableCollection<INavigationControlItem>()
134135
};
135136
var index = (SidebarControl.SideBarItems.Any(item => item.Section == SectionType.Favorites) ? 1 : 0) +
@@ -139,6 +140,7 @@ await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPrio
139140
SidebarControl.SideBarItems.BeginBulkOperation();
140141
SidebarControl.SideBarItems.Insert(Math.Min(index, SidebarControl.SideBarItems.Count), section);
141142
SidebarControl.SideBarItems.EndBulkOperation();
143+
UIHelpers.LoadIconResource(section.Icon, Constants.ImageRes.NetworkDrives);
142144
}
143145

144146
if (section != null)

Files/Helpers/UIHelpers.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Newtonsoft.Json;
33
using System;
44
using System.Collections.Generic;
5+
using System.IO;
56
using System.Linq;
67
using System.Threading.Tasks;
78
using Windows.ApplicationModel.AppService;
@@ -82,14 +83,17 @@ public static async Task<IconFileInfo> GetIconResourceInfo(int index)
8283
return null;
8384
}
8485

85-
public static async Task<BitmapImage> GetIconResource(int index)
86+
public static async void LoadIconResource(BitmapImage image, int index)
8687
{
87-
var iconInfo = await GetIconResourceInfo(index);
88-
if (iconInfo != null)
88+
await Common.Extensions.IgnoreExceptions(async () =>
8989
{
90-
return await iconInfo.IconDataBytes.ToBitmapAsync();
91-
}
92-
return null;
90+
var iconInfo = await GetIconResourceInfo(index);
91+
if (iconInfo?.IconDataBytes is byte[] data)
92+
{
93+
using var ms = new MemoryStream(data);
94+
await image.SetSourceAsync(ms.AsRandomAccessStream());
95+
}
96+
}, App.Logger);
9397
}
9498

9599
private static async Task<IEnumerable<IconFileInfo>> LoadSidebarIconResources()
@@ -100,7 +104,7 @@ private static async Task<IEnumerable<IconFileInfo>> LoadSidebarIconResources()
100104
Constants.ImageRes.NetworkDrives,
101105
Constants.ImageRes.Libraries,
102106
Constants.ImageRes.ThisPC,
103-
Constants.ImageRes.CloudDrives,
107+
//Constants.ImageRes.CloudDrives,
104108
Constants.ImageRes.Folder
105109
}, 32);
106110

0 commit comments

Comments
 (0)