@@ -68,27 +68,21 @@ public BitmapImage Thumbnail
6868 get => thumbnail ;
6969 set => SetProperty ( ref thumbnail , value ) ;
7070 }
71- public bool IsLibrary => Item is LibraryLocationItem ;
72- public bool IsUserCreatedLibrary => IsLibrary && ! LibraryManager . IsDefaultLibrary ( Item . Path ) ;
7371 public LocationItem Item { get ; private set ; }
7472 public string Path { get ; set ; }
7573 public ICommand SelectCommand { get ; set ; }
7674 public string Text { get ; set ; }
7775 public bool IsPinned { get ; set ; }
7876
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 )
8578 {
8679 if ( ! string . IsNullOrWhiteSpace ( text ) )
8780 {
8881 Text = text ;
8982 AutomationProperties = Text ;
90- IsPinned = isPinned ;
9183 }
84+ IsPinned = isPinned ;
85+ Item = item ;
9286 }
9387
9488 public async Task LoadCardThumbnailAsync ( )
@@ -177,46 +171,44 @@ private async void ModifyItem(object? sender, ModifyQuickAccessEventArgs? e)
177171 if ( e is null )
178172 return ;
179173
180- if ( e . Add )
174+ await DispatcherQueue . EnqueueAsync ( async ( ) =>
181175 {
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 )
188179 {
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+ } ) ;
199196 }
200197
201198 private async void QuickAccessWidget_Loaded ( object sender , RoutedEventArgs e )
202199 {
203200 Loaded -= QuickAccessWidget_Loaded ;
204201
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 ( ) ;
210203
211- int idx = 0 ;
212- foreach ( var item in locationItems )
204+ foreach ( var itemToAdd in itemsToAdd )
213205 {
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 )
215208 {
216209 Path = item . Path ,
217210 SelectCommand = QuickAccessCardCommand
218211 } ) ;
219- idx ++ ;
220212 }
221213
222214 App . QuickAccessManager . UpdateQuickAccessWidget += ModifyItem ;
@@ -228,7 +220,7 @@ private async void QuickAccessWidget_Loaded(object sender, RoutedEventArgs e)
228220 private void QuickAccessWidget_Unloaded ( object sender , RoutedEventArgs e )
229221 {
230222 Unloaded -= QuickAccessWidget_Unloaded ;
231- App . QuickAccessManager . UpdateQuickAccessWidget + = ModifyItem ;
223+ App . QuickAccessManager . UpdateQuickAccessWidget - = ModifyItem ;
232224 }
233225
234226 private void MenuFlyout_Opening ( object sender , object e )
@@ -301,13 +293,16 @@ private async void PinToFavorites_Click(object sender, RoutedEventArgs e)
301293 var item = ( ( MenuFlyoutItem ) sender ) . DataContext as FolderCardItem ;
302294 await QuickAccessService . PinToSidebar ( item . Path ) ;
303295 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 )
308300 {
309- Pin = false
310- } ) ;
301+ ModifyItem ( this , new ModifyQuickAccessEventArgs ( new [ ] { recentItem . FilePath } , true )
302+ {
303+ Pin = false
304+ } ) ;
305+ }
311306 }
312307
313308 private void UnpinFromFavorites_Click ( object sender , RoutedEventArgs e )
@@ -322,11 +317,6 @@ private Task OpenCard(FolderCardItem item)
322317 {
323318 return Task . CompletedTask ;
324319 }
325- if ( item . Item is LibraryLocationItem lli && lli . IsEmpty )
326- {
327- // TODO: show message?
328- return Task . CompletedTask ;
329- }
330320
331321 var ctrlPressed = Microsoft . UI . Input . InputKeyboardSource . GetKeyStateForCurrentThread ( VirtualKey . Control ) . HasFlag ( CoreVirtualKeyStates . Down ) ;
332322 if ( ctrlPressed )
0 commit comments