Skip to content

Commit cfd9e17

Browse files
committed
Init
1 parent bfc6ee1 commit cfd9e17

File tree

4 files changed

+47
-46
lines changed

4 files changed

+47
-46
lines changed

src/Files.App/Data/Contracts/IWidgetCardItem.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ namespace Files.App.Data.Contracts
77
{
88
public interface IWidgetCardItem<T>
99
{
10+
string? Path { get; }
11+
1012
T Item { get; }
1113

1214
BitmapImage Thumbnail { get; }

src/Files.App/Data/Items/WidgetCardItem.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,5 @@ namespace Files.App.Data.Items
99
public abstract class WidgetCardItem : ObservableObject
1010
{
1111
public virtual string? Path { get; set; }
12-
13-
public virtual object? Item { get; set; }
1412
}
1513
}

src/Files.App/Data/Items/WidgetDriveCardItem.cs

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,45 @@
22
// Licensed under the MIT License.
33

44
using Microsoft.UI.Xaml.Media.Imaging;
5+
using Windows.Win32;
6+
using Windows.Win32.UI.Shell;
57

68
namespace Files.App.Data.Items
79
{
8-
public sealed partial class WidgetDriveCardItem : WidgetCardItem, IWidgetCardItem<DriveItem>, IComparable<WidgetDriveCardItem>
10+
public sealed partial class WidgetDriveCardItem : WidgetCardItem, IWidgetCardItem<IWindowsStorable>, IDisposable
911
{
10-
private byte[] thumbnailData;
12+
// Properties
1113

12-
public new DriveItem Item { get; private set; }
14+
public required new IWindowsStorable Item { get; private set; }
1315

14-
private BitmapImage thumbnail;
15-
public BitmapImage Thumbnail
16-
{
17-
get => thumbnail;
18-
set => SetProperty(ref thumbnail, value);
19-
}
16+
public required string Path { get; set; }
17+
18+
public required string Text { get; set; }
19+
20+
private BitmapImage _Thumbnail;
21+
public BitmapImage Thumbnail { get => _Thumbnail; set => SetProperty(ref _Thumbnail, value); }
22+
23+
// Constructor
2024

21-
public WidgetDriveCardItem(DriveItem item)
25+
public WidgetDriveCardItem()
2226
{
23-
Item = item;
24-
Path = item.Path;
2527
}
2628

2729
public async Task LoadCardThumbnailAsync()
2830
{
29-
var result = await FileThumbnailHelper.GetIconAsync(
30-
Item.Path,
31-
Constants.ShellIconSizes.Large,
32-
true,
33-
IconOptions.ReturnIconOnly | IconOptions.UseCurrentScale);
34-
35-
if (result is null)
36-
{
37-
using var thumbnail = await DriveHelpers.GetThumbnailAsync(Item.Root);
38-
result ??= await thumbnail.ToByteArrayAsync();
39-
}
40-
41-
thumbnailData = result;
42-
43-
var bitmapImage = await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => thumbnailData.ToBitmapAsync(), Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal);
44-
if (bitmapImage is not null)
45-
Thumbnail = bitmapImage;
31+
if (string.IsNullOrEmpty(Path))
32+
return;
33+
34+
Item.TryGetThumbnail((int)(Constants.ShellIconSizes.Large * App.AppModel.AppWindowDPI), SIIGBF.SIIGBF_ICONONLY, out var rawThumbnailData);
35+
if (rawThumbnailData is null)
36+
return;
37+
38+
Thumbnail = await rawThumbnailData.ToBitmapAsync();
4639
}
4740

48-
public int CompareTo(WidgetDriveCardItem? other)
49-
=> Item.Path.CompareTo(other?.Item?.Path);
41+
public void Dispose()
42+
{
43+
throw new NotImplementedException();
44+
}
5045
}
5146
}

src/Files.App/ViewModels/UserControls/Widgets/DrivesWidgetViewModel.cs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,31 +35,31 @@ public sealed partial class DrivesWidgetViewModel : BaseWidgetViewModel, IWidget
3535

3636
public DrivesWidgetViewModel()
3737
{
38-
Drives_CollectionChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
39-
40-
DrivesViewModel.Drives.CollectionChanged += Drives_CollectionChanged;
38+
Items.CollectionChanged += Items_CollectionChanged;
39+
UserSettingsService.OnSettingChangedEvent += UserSettingsService_OnSettingChangedEvent;
4140

4241
PinToSidebarCommand = new AsyncRelayCommand<WidgetCardItem>(ExecutePinToSidebarCommand);
4342
UnpinFromSidebarCommand = new AsyncRelayCommand<WidgetCardItem>(ExecuteUnpinFromSidebarCommand);
4443
EjectDeviceCommand = new RelayCommand<WidgetDriveCardItem>(ExecuteEjectDeviceCommand);
4544
OpenPropertiesCommand = new RelayCommand<WidgetDriveCardItem>(ExecuteOpenPropertiesCommand);
4645
DisconnectNetworkDriveCommand = new RelayCommand<WidgetDriveCardItem>(ExecuteDisconnectNetworkDriveCommand);
47-
48-
UserSettingsService.OnSettingChangedEvent += UserSettingsService_OnSettingChangedEvent;
4946
}
5047

5148
// Methods
5249

53-
private async void UserSettingsService_OnSettingChangedEvent(object? sender, SettingChangedEventArgs e)
50+
public Task RefreshWidgetAsync()
5451
{
55-
if (e.SettingName == nameof(UserSettingsService.FoldersSettingsService.SizeUnitFormat))
56-
await RefreshWidgetAsync();
57-
}
52+
return MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(async () =>
53+
{
54+
foreach (var item in Items)
55+
item.Dispose();
5856

59-
public async Task RefreshWidgetAsync()
60-
{
61-
var updateTasks = Items.Select(item => item.Item.UpdatePropertiesAsync());
62-
await Task.WhenAll(updateTasks);
57+
Items.Clear();
58+
59+
await foreach (IWindowsStorable folder in HomePageContext.HomeFolder.GetLogicalDrivesAsync(default))
60+
{
61+
}
62+
});
6363
}
6464

6565
public async Task NavigateToPath(string path)
@@ -214,6 +214,12 @@ private void ExecuteDisconnectNetworkDriveCommand(WidgetDriveCardItem? item)
214214

215215
// Event methods
216216

217+
private async void UserSettingsService_OnSettingChangedEvent(object? sender, SettingChangedEventArgs e)
218+
{
219+
if (e.SettingName == nameof(UserSettingsService.FoldersSettingsService.SizeUnitFormat))
220+
await RefreshWidgetAsync();
221+
}
222+
217223
private async void Drives_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
218224
{
219225
await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(async () =>

0 commit comments

Comments
 (0)