@@ -68,27 +68,21 @@ public BitmapImage Thumbnail
68
68
get => thumbnail ;
69
69
set => SetProperty ( ref thumbnail , value ) ;
70
70
}
71
- public bool IsLibrary => Item is LibraryLocationItem ;
72
- public bool IsUserCreatedLibrary => IsLibrary && ! LibraryManager . IsDefaultLibrary ( Item . Path ) ;
73
71
public LocationItem Item { get ; private set ; }
74
72
public string Path { get ; set ; }
75
73
public ICommand SelectCommand { get ; set ; }
76
74
public string Text { get ; set ; }
77
75
public bool IsPinned { get ; set ; }
78
76
79
- public FolderCardItem ( LocationItem item = null , string text = null , bool isPinned = true ) : this ( text , isPinned )
80
- {
81
- Item = item ;
82
- }
83
-
84
- public FolderCardItem ( string text , bool isPinned )
77
+ public FolderCardItem ( LocationItem item , string text , bool isPinned )
85
78
{
86
79
if ( ! string . IsNullOrWhiteSpace ( text ) )
87
80
{
88
81
Text = text ;
89
82
AutomationProperties = Text ;
90
- IsPinned = isPinned ;
91
83
}
84
+ IsPinned = isPinned ;
85
+ Item = item ;
92
86
}
93
87
94
88
public async Task LoadCardThumbnailAsync ( )
@@ -177,46 +171,44 @@ private async void ModifyItem(object? sender, ModifyQuickAccessEventArgs? e)
177
171
if ( e is null )
178
172
return ;
179
173
180
- if ( e . Add )
174
+ await DispatcherQueue . EnqueueAsync ( async ( ) =>
181
175
{
182
- var locationItems = new List < LocationItem > ( ) ;
183
- foreach ( var item in e . Paths )
184
- locationItems . Add ( await App . QuickAccessManager . Model . CreateLocationItemFromPathAsync ( item ) ) ;
185
-
186
- foreach ( var item in locationItems )
187
- ItemsAdded . Insert ( e . Pin ? ItemsAdded . Count - 4 : ItemsAdded . Count , new FolderCardItem ( Path . GetFileName ( item . Text ) , e . Pin ) // Add just after the Recent Folders
176
+ if ( e . Add )
177
+ {
178
+ foreach ( var itemToAdd in e . Paths )
188
179
{
189
- Path = item . Path ,
190
- SelectCommand = QuickAccessCardCommand
191
- } ) ;
192
-
193
- var cardLoadTasks = ItemsAdded . Select ( cardItem => cardItem . LoadCardThumbnailAsync ( ) ) ;
194
- await Task . WhenAll ( cardLoadTasks ) ;
195
- }
196
- else
197
- foreach ( var itemToRemove in ItemsAdded . Where ( x => e . Paths . Contains ( x . Path ) ) . ToList ( ) )
198
- ItemsAdded . Remove ( itemToRemove ) ;
180
+ var item = await App . QuickAccessManager . Model . CreateLocationItemFromPathAsync ( itemToAdd ) ;
181
+ var lastIndex = ItemsAdded . IndexOf ( ItemsAdded . FirstOrDefault ( x => ! x . IsPinned ) ) ;
182
+ ItemsAdded . Insert ( e . Pin && lastIndex >= 0 ? lastIndex : ItemsAdded . Count , new FolderCardItem ( item , Path . GetFileName ( item . Text ) , e . Pin ) // Add just after the Recent Folders
183
+ {
184
+ Path = item . Path ,
185
+ SelectCommand = QuickAccessCardCommand
186
+ } ) ;
187
+ }
188
+
189
+ var cardLoadTasks = ItemsAdded . Select ( cardItem => cardItem . LoadCardThumbnailAsync ( ) ) ;
190
+ await Task . WhenAll ( cardLoadTasks ) ;
191
+ }
192
+ else
193
+ foreach ( var itemToRemove in ItemsAdded . Where ( x => e . Paths . Contains ( x . Path ) ) . ToList ( ) )
194
+ ItemsAdded . Remove ( itemToRemove ) ;
195
+ } ) ;
199
196
}
200
197
201
198
private async void QuickAccessWidget_Loaded ( object sender , RoutedEventArgs e )
202
199
{
203
200
Loaded -= QuickAccessWidget_Loaded ;
204
201
205
- var itemsToAdd = await QuickAccessService . GetPinnedFoldersAsync ( true ) ;
206
-
207
- var locationItems = new List < LocationItem > ( ) ;
208
- foreach ( var item in itemsToAdd )
209
- locationItems . Add ( await App . QuickAccessManager . Model . CreateLocationItemFromPathAsync ( item ) ) ;
202
+ var itemsToAdd = await QuickAccessService . GetPinnedFoldersAsync ( ) ;
210
203
211
- int idx = 0 ;
212
- foreach ( var item in locationItems )
204
+ foreach ( var itemToAdd in itemsToAdd )
213
205
{
214
- ItemsAdded . Add ( new FolderCardItem ( item , Path . GetFileName ( item . Text ) , idx < locationItems . Count - 4 )
206
+ var item = await App . QuickAccessManager . Model . CreateLocationItemFromPathAsync ( itemToAdd . FilePath ) ;
207
+ ItemsAdded . Add ( new FolderCardItem ( item , Path . GetFileName ( item . Text ) , ( bool ? ) itemToAdd . Properties [ "System.Home.IsPinned" ] ?? false )
215
208
{
216
209
Path = item . Path ,
217
210
SelectCommand = QuickAccessCardCommand
218
211
} ) ;
219
- idx ++ ;
220
212
}
221
213
222
214
App . QuickAccessManager . UpdateQuickAccessWidget += ModifyItem ;
@@ -228,7 +220,7 @@ private async void QuickAccessWidget_Loaded(object sender, RoutedEventArgs e)
228
220
private void QuickAccessWidget_Unloaded ( object sender , RoutedEventArgs e )
229
221
{
230
222
Unloaded -= QuickAccessWidget_Unloaded ;
231
- App . QuickAccessManager . UpdateQuickAccessWidget + = ModifyItem ;
223
+ App . QuickAccessManager . UpdateQuickAccessWidget - = ModifyItem ;
232
224
}
233
225
234
226
private void MenuFlyout_Opening ( object sender , object e )
@@ -301,13 +293,16 @@ private async void PinToFavorites_Click(object sender, RoutedEventArgs e)
301
293
var item = ( ( MenuFlyoutItem ) sender ) . DataContext as FolderCardItem ;
302
294
await QuickAccessService . PinToSidebar ( item . Path ) ;
303
295
ModifyItem ( this , new ModifyQuickAccessEventArgs ( new [ ] { item . Path } , false ) ) ;
304
- var items = await QuickAccessService . GetPinnedFoldersAsync ( true ) ;
305
- items . RemoveRange ( 0 , items . Count - 4 ) ;
306
- var recentItem = items . Where ( x => ! ItemsAdded . Select ( y => y . Path ) . Contains ( x ) ) . FirstOrDefault ( ) ;
307
- ModifyItem ( this , new ModifyQuickAccessEventArgs ( new [ ] { recentItem } , true )
296
+ var items = ( await QuickAccessService . GetPinnedFoldersAsync ( ) )
297
+ . Where ( link => ! ( ( bool ? ) link . Properties [ "System.Home.IsPinned" ] ?? false ) ) ;
298
+ var recentItem = items . Where ( x => ! ItemsAdded . Select ( y => y . Path ) . Contains ( x . FilePath ) ) . FirstOrDefault ( ) ;
299
+ if ( recentItem is not null )
308
300
{
309
- Pin = false
310
- } ) ;
301
+ ModifyItem ( this , new ModifyQuickAccessEventArgs ( new [ ] { recentItem . FilePath } , true )
302
+ {
303
+ Pin = false
304
+ } ) ;
305
+ }
311
306
}
312
307
313
308
private void UnpinFromFavorites_Click ( object sender , RoutedEventArgs e )
@@ -322,11 +317,6 @@ private Task OpenCard(FolderCardItem item)
322
317
{
323
318
return Task . CompletedTask ;
324
319
}
325
- if ( item . Item is LibraryLocationItem lli && lli . IsEmpty )
326
- {
327
- // TODO: show message?
328
- return Task . CompletedTask ;
329
- }
330
320
331
321
var ctrlPressed = Microsoft . UI . Input . InputKeyboardSource . GetKeyStateForCurrentThread ( VirtualKey . Control ) . HasFlag ( CoreVirtualKeyStates . Down ) ;
332
322
if ( ctrlPressed )
0 commit comments