/// <summary> /// Adds the item to the navigation page /// </summary> /// <param name="item">Item to remove</param> public async void AddItem(string item) { // add to `FavoriteItems` and `favoritesList` must be atomic await addSyncSemaphore.WaitAsync(); try { if (!string.IsNullOrEmpty(item) && !FavoriteItems.Contains(item)) { FavoriteItems.Add(item); await AddItemToSidebarAsync(item); Save(); if (item == CommonPaths.RecycleBinPath) { UserSettingsService.AppearanceSettingsService.PinRecycleBinToSidebar = true; } } } finally { addSyncSemaphore.Release(); } }
/// <summary> /// Removes the item from the navigation page /// </summary> /// <param name="item">Item to remove</param> public void RemoveItem(string item) { if (FavoriteItems.Contains(item)) { FavoriteItems.Remove(item); RemoveStaleSidebarItems(); Save(); if (item == CommonPaths.RecycleBinPath) { UserSettingsService.AppearanceSettingsService.PinRecycleBinToSidebar = false; } } }
/// <summary> /// Removes stale items in the navigation sidebar /// </summary> public void RemoveStaleSidebarItems() { // Remove unpinned items from favoriteList foreach (var childItem in Favorites) { if (childItem is LocationItem item) { if (!item.IsDefaultLocation && !FavoriteItems.Contains(item.Path)) { lock (favoriteList) { favoriteList.Remove(item); } controller.DataChanged?.Invoke(SectionType.Favorites, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item)); } } } // Remove unpinned items from sidebar controller.DataChanged?.Invoke(SectionType.Favorites, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); }