diff --git a/src/Files.App/Actions/FileSystem/PasteItemToSelectionAction.cs b/src/Files.App/Actions/FileSystem/PasteItemToSelectionAction.cs index 515d7b118260..1c9611c3c053 100644 --- a/src/Files.App/Actions/FileSystem/PasteItemToSelectionAction.cs +++ b/src/Files.App/Actions/FileSystem/PasteItemToSelectionAction.cs @@ -35,7 +35,7 @@ public async Task ExecuteAsync(object? parameter = null) if (context.ShellPage is null) return; - string path = context.SelectedItem is ListedItem selectedItem + string path = context.SelectedItem is StandardStorageItem selectedItem ? selectedItem.ItemPath : context.ShellPage.FilesystemViewModel.WorkingDirectory; diff --git a/src/Files.App/Actions/Navigation/OpenInNewTab/BaseOpenInNewTabAction.cs b/src/Files.App/Actions/Navigation/OpenInNewTab/BaseOpenInNewTabAction.cs index 7f5ca8c797ae..91d616e051e0 100644 --- a/src/Files.App/Actions/Navigation/OpenInNewTab/BaseOpenInNewTabAction.cs +++ b/src/Files.App/Actions/Navigation/OpenInNewTab/BaseOpenInNewTabAction.cs @@ -37,7 +37,7 @@ public BaseOpenInNewTabAction() public virtual async Task ExecuteAsync(object? parameter = null) { - foreach (ListedItem listedItem in ContentPageContext.SelectedItems) + foreach (StandardStorageItem listedItem in ContentPageContext.SelectedItems) { await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(async () => { diff --git a/src/Files.App/Actions/Navigation/OpenInNewWindow/BaseOpenInNewWindowAction.cs b/src/Files.App/Actions/Navigation/OpenInNewWindow/BaseOpenInNewWindowAction.cs index 428447962740..ca76483c2270 100644 --- a/src/Files.App/Actions/Navigation/OpenInNewWindow/BaseOpenInNewWindowAction.cs +++ b/src/Files.App/Actions/Navigation/OpenInNewWindow/BaseOpenInNewWindowAction.cs @@ -45,9 +45,9 @@ public virtual async Task ExecuteAsync(object? parameter = null) if (ContentPageContext.ShellPage?.SlimContentPage?.SelectedItems is null) return; - List items = ContentPageContext.ShellPage.SlimContentPage.SelectedItems; + List items = ContentPageContext.ShellPage.SlimContentPage.SelectedItems; - foreach (ListedItem listedItem in items) + foreach (StandardStorageItem listedItem in items) { var selectedItemPath = (listedItem as ShortcutItem)?.TargetPath ?? listedItem.ItemPath; var folderUri = new Uri($"files-uwp:?folder={@selectedItemPath}"); diff --git a/src/Files.App/Actions/Sidebar/PinFolderToSidebarAction.cs b/src/Files.App/Actions/Sidebar/PinFolderToSidebarAction.cs index dda75fed7bf7..c8608104af68 100644 --- a/src/Files.App/Actions/Sidebar/PinFolderToSidebarAction.cs +++ b/src/Files.App/Actions/Sidebar/PinFolderToSidebarAction.cs @@ -53,7 +53,7 @@ private bool GetIsExecutable() ? context.SelectedItems.All(IsPinnable) : context.Folder is not null && IsPinnable(context.Folder); - bool IsPinnable(ListedItem item) + bool IsPinnable(StandardStorageItem item) { return item.PrimaryItemAttribute is StorageItemTypes.Folder && diff --git a/src/Files.App/Actions/Sidebar/UnpinFolderToSidebarAction.cs b/src/Files.App/Actions/Sidebar/UnpinFolderToSidebarAction.cs index fd738d74983d..a509f3cc5163 100644 --- a/src/Files.App/Actions/Sidebar/UnpinFolderToSidebarAction.cs +++ b/src/Files.App/Actions/Sidebar/UnpinFolderToSidebarAction.cs @@ -50,7 +50,7 @@ private bool GetIsExecutable() ? context.SelectedItems.All(IsPinned) : context.Folder is not null && IsPinned(context.Folder); - bool IsPinned(ListedItem item) + bool IsPinned(StandardStorageItem item) { return pinnedFolders.Contains(item.ItemPath); } diff --git a/src/Files.App/Actions/Start/PinToStartAction.cs b/src/Files.App/Actions/Start/PinToStartAction.cs index 7228ba483bf1..7d07e3c152b9 100644 --- a/src/Files.App/Actions/Start/PinToStartAction.cs +++ b/src/Files.App/Actions/Start/PinToStartAction.cs @@ -35,7 +35,7 @@ public async Task ExecuteAsync(object? parameter = null) { if (context.SelectedItems.Count > 0 && context.ShellPage?.SlimContentPage?.SelectedItems is not null) { - foreach (ListedItem listedItem in context.ShellPage.SlimContentPage.SelectedItems) + foreach (StandardStorageItem listedItem in context.ShellPage.SlimContentPage.SelectedItems) { IStorable storable = listedItem.IsFolder switch { diff --git a/src/Files.App/Actions/Start/UnpinFromStartAction.cs b/src/Files.App/Actions/Start/UnpinFromStartAction.cs index 145412fc32fb..dc757be96000 100644 --- a/src/Files.App/Actions/Start/UnpinFromStartAction.cs +++ b/src/Files.App/Actions/Start/UnpinFromStartAction.cs @@ -31,7 +31,7 @@ public async Task ExecuteAsync(object? parameter = null) { if (context.SelectedItems.Count > 0) { - foreach (ListedItem listedItem in context.ShellPage?.SlimContentPage.SelectedItems) + foreach (StandardStorageItem listedItem in context.ShellPage?.SlimContentPage.SelectedItems) { IStorable storable = listedItem.IsFolder switch { diff --git a/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs b/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs index 73adf23d8db9..c5da3c256a08 100644 --- a/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs +++ b/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs @@ -8,7 +8,7 @@ namespace Files.App.Data.Contexts { internal sealed class ContentPageContext : ObservableObject, IContentPageContext { - private static readonly IReadOnlyList emptyItems = Enumerable.Empty().ToImmutableList(); + private static readonly IReadOnlyList emptyItems = Enumerable.Empty().ToImmutableList(); private readonly IMultiPanesContext context = Ioc.Default.GetRequiredService(); @@ -21,15 +21,15 @@ internal sealed class ContentPageContext : ObservableObject, IContentPageContext private ContentPageTypes pageType = ContentPageTypes.None; public ContentPageTypes PageType => pageType; - public ListedItem? Folder => ShellPage?.FilesystemViewModel?.CurrentFolder; + public StandardStorageItem? Folder => ShellPage?.FilesystemViewModel?.CurrentFolder; public bool HasItem => ShellPage?.ToolbarViewModel?.HasItem ?? false; public bool HasSelection => SelectedItems.Count is not 0; - public ListedItem? SelectedItem => SelectedItems.Count is 1 ? SelectedItems[0] : null; + public StandardStorageItem? SelectedItem => SelectedItems.Count is 1 ? SelectedItems[0] : null; - private IReadOnlyList selectedItems = emptyItems; - public IReadOnlyList SelectedItems => selectedItems; + private IReadOnlyList selectedItems = emptyItems; + public IReadOnlyList SelectedItems => selectedItems; public bool CanRefresh => ShellPage is not null && ShellPage.ToolbarViewModel.CanRefresh; @@ -226,9 +226,9 @@ private void UpdatePageType() private void UpdateSelectedItems() { bool oldHasSelection = HasSelection; - ListedItem? oldSelectedItem = SelectedItem; + StandardStorageItem? oldSelectedItem = SelectedItem; - IReadOnlyList items = ShellPage?.ToolbarViewModel?.SelectedItems?.AsReadOnly() ?? emptyItems; + IReadOnlyList items = ShellPage?.ToolbarViewModel?.SelectedItems?.AsReadOnly() ?? emptyItems; if (SetProperty(ref selectedItems, items, nameof(SelectedItems))) { if (HasSelection != oldHasSelection) diff --git a/src/Files.App/Data/Contexts/ContentPage/IContentPageContext.cs b/src/Files.App/Data/Contexts/ContentPage/IContentPageContext.cs index fee811a60828..5742021f182f 100644 --- a/src/Files.App/Data/Contexts/ContentPage/IContentPageContext.cs +++ b/src/Files.App/Data/Contexts/ContentPage/IContentPageContext.cs @@ -11,13 +11,13 @@ public interface IContentPageContext : INotifyPropertyChanged Type PageLayoutType { get; } - ListedItem? Folder { get; } + StandardStorageItem? Folder { get; } bool HasItem { get; } bool HasSelection { get; } bool CanRefresh { get; } - ListedItem? SelectedItem { get; } - IReadOnlyList SelectedItems { get; } + StandardStorageItem? SelectedItem { get; } + IReadOnlyList SelectedItems { get; } bool CanGoBack { get; } bool CanGoForward { get; } diff --git a/src/Files.App/Data/Contexts/SideBar/ISideBarContext.cs b/src/Files.App/Data/Contexts/SideBar/ISideBarContext.cs index 92f1f3e199c1..2b8f653f6e9a 100644 --- a/src/Files.App/Data/Contexts/SideBar/ISideBarContext.cs +++ b/src/Files.App/Data/Contexts/SideBar/ISideBarContext.cs @@ -11,7 +11,7 @@ public interface ISidebarContext /// /// Gets the last sidebar right clicked item /// - INavigationControlItem? RightClickedItem { get; } + ISidebarItem? RightClickedItem { get; } /// /// Gets the value that indicates whether any item has been right clicked diff --git a/src/Files.App/Data/Contexts/SideBar/SideBarContext.cs b/src/Files.App/Data/Contexts/SideBar/SideBarContext.cs index b8412d9f8e3a..0bc158720bfa 100644 --- a/src/Files.App/Data/Contexts/SideBar/SideBarContext.cs +++ b/src/Files.App/Data/Contexts/SideBar/SideBarContext.cs @@ -13,15 +13,15 @@ internal sealed class SidebarContext : ObservableObject, ISidebarContext ? favoriteModel.IndexOfItem(_RightClickedItem!) : -1; - private INavigationControlItem? _RightClickedItem = null; - public INavigationControlItem? RightClickedItem => _RightClickedItem; + private ISidebarItem? _RightClickedItem = null; + public ISidebarItem? RightClickedItem => _RightClickedItem; public bool IsItemRightClicked => _RightClickedItem is not null; public bool IsPinnedFolderItem => IsItemRightClicked && - _RightClickedItem!.Section is SectionType.Pinned && + _RightClickedItem!.Section is SidebarSectionKind.Pinned && PinnedFolderItemIndex is not -1; public DriveItem? OpenDriveItem @@ -32,7 +32,7 @@ public SidebarContext() SidebarViewModel.RightClickedItemChanged += SidebarControl_RightClickedItemChanged; } - public void SidebarControl_RightClickedItemChanged(object? sender, INavigationControlItem? e) + public void SidebarControl_RightClickedItemChanged(object? sender, ISidebarItem? e) { if (SetProperty(ref _RightClickedItem, e, nameof(RightClickedItem))) { diff --git a/src/Files.App/Data/Contracts/INavigationControlItem.cs b/src/Files.App/Data/Contracts/ISidebarItem.cs similarity index 76% rename from src/Files.App/Data/Contracts/INavigationControlItem.cs rename to src/Files.App/Data/Contracts/ISidebarItem.cs index 80dfb5fd2f5b..d04b74700eec 100644 --- a/src/Files.App/Data/Contracts/INavigationControlItem.cs +++ b/src/Files.App/Data/Contracts/ISidebarItem.cs @@ -5,20 +5,20 @@ namespace Files.App.Data.Contracts { - public interface INavigationControlItem : IComparable, INotifyPropertyChanged, ISidebarItemModel + public interface ISidebarItem : IComparable, INotifyPropertyChanged, ISidebarItemModel { public new string Text { get; } public string Path { get; } - public SectionType Section { get; } + public SidebarSectionKind Section { get; } - public NavigationControlItemType ItemType { get; } + public SidebarItemKind ItemType { get; } public ContextMenuOptions MenuOptions { get; } } - public enum NavigationControlItemType + public enum SidebarItemKind { Drive, LinuxDistro, @@ -26,7 +26,7 @@ public enum NavigationControlItemType FileTag } - public enum SectionType + public enum SidebarSectionKind { Home, Pinned, diff --git a/src/Files.App/Data/Contracts/IStorageArchiveService.cs b/src/Files.App/Data/Contracts/IStorageArchiveService.cs index 97b31b86176b..3fb10527e0f9 100644 --- a/src/Files.App/Data/Contracts/IStorageArchiveService.cs +++ b/src/Files.App/Data/Contracts/IStorageArchiveService.cs @@ -15,14 +15,14 @@ public interface IStorageArchiveService /// /// Items to check if they can be compressed. /// True if can be compressed; otherwise, false. - bool CanCompress(IReadOnlyList items); + bool CanCompress(IReadOnlyList items); /// /// Gets the value that indicates whether specified items can be decompressed. /// /// Items to check if they can be decompressed. /// True if can be decompressed; otherwise, false. - bool CanDecompress(IReadOnlyList items); + bool CanDecompress(IReadOnlyList items); /// /// Compresses the specified items. @@ -45,7 +45,7 @@ public interface IStorageArchiveService /// /// Item names to generate archive file name. /// - string GenerateArchiveNameFromItems(IReadOnlyList items); + string GenerateArchiveNameFromItems(IReadOnlyList items); /// /// Gets the value that indicates whether the archive file is encrypted. diff --git a/src/Files.App/Data/Factories/ContentPageContextFlyoutFactory.cs b/src/Files.App/Data/Factories/ContentPageContextFlyoutFactory.cs index fcfe02824fe2..37559f4ab67c 100644 --- a/src/Files.App/Data/Factories/ContentPageContextFlyoutFactory.cs +++ b/src/Files.App/Data/Factories/ContentPageContextFlyoutFactory.cs @@ -24,19 +24,19 @@ public static class ContentPageContextFlyoutFactory private static readonly ICommandManager Commands = Ioc.Default.GetRequiredService(); private static IStorageArchiveService StorageArchiveService { get; } = Ioc.Default.GetRequiredService(); - public static List GetItemContextCommandsWithoutShellItems(CurrentInstanceViewModel currentInstanceViewModel, List selectedItems, BaseLayoutViewModel commandsViewModel, bool shiftPressed, SelectedItemsPropertiesViewModel? selectedItemsPropertiesViewModel, ItemViewModel? itemViewModel = null) + public static List GetItemContextCommandsWithoutShellItems(CurrentInstanceViewModel currentInstanceViewModel, List selectedItems, BaseLayoutViewModel commandsViewModel, bool shiftPressed, SelectedItemsPropertiesViewModel? selectedItemsPropertiesViewModel, ItemViewModel? itemViewModel = null) { var menuItemsList = GetBaseItemMenuItems(commandsViewModel: commandsViewModel, selectedItems: selectedItems, selectedItemsPropertiesViewModel: selectedItemsPropertiesViewModel, currentInstanceViewModel: currentInstanceViewModel, itemViewModel: itemViewModel); menuItemsList = Filter(items: menuItemsList, shiftPressed: shiftPressed, currentInstanceViewModel: currentInstanceViewModel, selectedItems: selectedItems, removeOverflowMenu: false); return menuItemsList; } - public static Task> GetItemContextShellCommandsAsync(string workingDir, List selectedItems, bool shiftPressed, bool showOpenMenu, CancellationToken cancellationToken) + public static Task> GetItemContextShellCommandsAsync(string workingDir, List selectedItems, bool shiftPressed, bool showOpenMenu, CancellationToken cancellationToken) { return ShellContextFlyoutFactory.GetShellContextmenuAsync(shiftPressed: shiftPressed, showOpenMenu: showOpenMenu, workingDirectory: workingDir, selectedItems: selectedItems, cancellationToken: cancellationToken); } - public static List Filter(List items, List selectedItems, bool shiftPressed, CurrentInstanceViewModel currentInstanceViewModel, bool removeOverflowMenu = true) + public static List Filter(List items, List selectedItems, bool shiftPressed, CurrentInstanceViewModel currentInstanceViewModel, bool removeOverflowMenu = true) { items = items.Where(x => Check(item: x, currentInstanceViewModel: currentInstanceViewModel, selectedItems: selectedItems)).ToList(); items.ForEach(x => x.Items = x.Items?.Where(y => Check(item: y, currentInstanceViewModel: currentInstanceViewModel, selectedItems: selectedItems)).ToList()); @@ -64,7 +64,7 @@ public static List Filter(List selectedItems) + private static bool Check(ContextMenuFlyoutItemViewModel item, CurrentInstanceViewModel currentInstanceViewModel, List selectedItems) { return (item.ShowInRecycleBin || !currentInstanceViewModel.IsPageTypeRecycleBin) && @@ -78,7 +78,7 @@ private static bool Check(ContextMenuFlyoutItemViewModel item, CurrentInstanceVi public static List GetBaseItemMenuItems( BaseLayoutViewModel commandsViewModel, SelectedItemsPropertiesViewModel? selectedItemsPropertiesViewModel, - List selectedItems, + List selectedItems, CurrentInstanceViewModel currentInstanceViewModel, ItemViewModel? itemViewModel = null) { diff --git a/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs b/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs index df4da3b33448..4a6130338f30 100644 --- a/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs +++ b/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs @@ -72,7 +72,7 @@ public static ObservableCollection Initialize PropertiesNavigationViewItems.Add(customizationItem); PropertiesNavigationViewItems.Add(compatibilityItem); - if (item is List listedItems) + if (item is List listedItems) { var firstFileExtension = listedItems.FirstOrDefault()?.FileExtension; var commonFileExt = listedItems.All(x => x.FileExtension == firstFileExtension) ? firstFileExtension : null; @@ -91,7 +91,7 @@ public static ObservableCollection Initialize PropertiesNavigationViewItems.Remove(customizationItem); PropertiesNavigationViewItems.Remove(hashesItem); } - else if (item is ListedItem listedItem) + else if (item is StandardStorageItem listedItem) { var isShortcut = listedItem.IsShortcut; var isLibrary = listedItem.IsLibrary; diff --git a/src/Files.App/Data/Factories/ShellContextFlyoutHelper.cs b/src/Files.App/Data/Factories/ShellContextFlyoutHelper.cs index 38df8e2dc4a2..37f6322b1645 100644 --- a/src/Files.App/Data/Factories/ShellContextFlyoutHelper.cs +++ b/src/Files.App/Data/Factories/ShellContextFlyoutHelper.cs @@ -20,7 +20,7 @@ public static class ShellContextFlyoutFactory { public static IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); - public static async Task> GetShellContextmenuAsync(bool showOpenMenu, bool shiftPressed, string workingDirectory, List? selectedItems, CancellationToken cancellationToken) + public static async Task> GetShellContextmenuAsync(bool showOpenMenu, bool shiftPressed, string workingDirectory, List? selectedItems, CancellationToken cancellationToken) { bool IsItemSelected = selectedItems?.Count > 0; @@ -240,7 +240,7 @@ public static async Task LoadShellMenuItemsAsync( var shiftPressed = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down); var shellMenuItems = await ContentPageContextFlyoutFactory.GetItemContextShellCommandsAsync( workingDir: null, - [new ListedItem(null) { ItemPath = path }], + [new StandardStorageItem() { ItemPath = path }], shiftPressed: shiftPressed, showOpenMenu: false, default); diff --git a/src/Files.App/Data/Items/FileTagItem.cs b/src/Files.App/Data/Items/FileTagItem.cs index e7283c69440a..e923f7b28637 100644 --- a/src/Files.App/Data/Items/FileTagItem.cs +++ b/src/Files.App/Data/Items/FileTagItem.cs @@ -9,7 +9,7 @@ namespace Files.App.Data.Items { - public sealed class FileTagItem : ObservableObject, INavigationControlItem + public sealed class FileTagItem : ObservableObject, ISidebarItem { public string Text { get; set; } @@ -27,14 +27,14 @@ public string Path public string ToolTipText { get; private set; } - public SectionType Section { get; set; } + public SidebarSectionKind Section { get; set; } public ContextMenuOptions MenuOptions { get; set; } - public NavigationControlItemType ItemType - => NavigationControlItemType.FileTag; + public SidebarItemKind ItemType + => SidebarItemKind.FileTag; - public int CompareTo(INavigationControlItem other) + public int CompareTo(ISidebarItem other) => Text.CompareTo(other.Text); public TagViewModel FileTag { get; set; } diff --git a/src/Files.App/Data/Items/LocationItem.cs b/src/Files.App/Data/Items/LocationItem.cs index 6994d3f18a36..84ad29f0d9aa 100644 --- a/src/Files.App/Data/Items/LocationItem.cs +++ b/src/Files.App/Data/Items/LocationItem.cs @@ -8,7 +8,7 @@ namespace Files.App.Data.Items { - public class LocationItem : ObservableObject, INavigationControlItem + public class LocationItem : ObservableObject, ISidebarItem { public BitmapImage icon; public BitmapImage Icon @@ -53,13 +53,13 @@ public string Path } } - public NavigationControlItemType ItemType - => NavigationControlItemType.Location; + public SidebarItemKind ItemType + => SidebarItemKind.Location; public bool IsDefaultLocation { get; set; } - public object? Children => Section == SectionType.Home ? null : ChildItems; - public BulkConcurrentObservableCollection? ChildItems { get; set; } + public object? Children => Section == SidebarSectionKind.Home ? null : ChildItems; + public BulkConcurrentObservableCollection? ChildItems { get; set; } public IconSource? IconSource { get => new ImageIconSource() @@ -81,7 +81,7 @@ public bool IsExpanded public bool IsPinned => App.QuickAccessManager.Model.PinnedFolders.Contains(path); - public SectionType Section { get; set; } + public SidebarSectionKind Section { get; set; } public ContextMenuOptions MenuOptions { get; set; } @@ -101,7 +101,7 @@ public FrameworkElement? ItemDecorator { get { - if (Section == SectionType.Pinned) + if (Section == SidebarSectionKind.Pinned) { return new OpacityIcon() { @@ -112,7 +112,7 @@ public FrameworkElement? ItemDecorator } } - public int CompareTo(INavigationControlItem other) + public int CompareTo(ISidebarItem other) => Text.CompareTo(other.Text); public static T Create() where T : LocationItem, new() diff --git a/src/Files.App/Data/Items/DriveItem.cs b/src/Files.App/Data/Items/SidebarDriveItem.cs similarity index 96% rename from src/Files.App/Data/Items/DriveItem.cs rename to src/Files.App/Data/Items/SidebarDriveItem.cs index e7a764335895..c2b98f6c559d 100644 --- a/src/Files.App/Data/Items/DriveItem.cs +++ b/src/Files.App/Data/Items/SidebarDriveItem.cs @@ -11,7 +11,7 @@ namespace Files.App.Data.Items { - public sealed class DriveItem : ObservableObject, INavigationControlItem, ILocatableFolder + public sealed class DriveItem : ObservableObject, ISidebarItem, ILocatableFolder { private BitmapImage icon; public BitmapImage Icon @@ -37,7 +37,7 @@ public string Path public StorageFolder Root { get; set; } - public NavigationControlItemType ItemType { get; set; } = NavigationControlItemType.Drive; + public SidebarItemKind ItemType { get; set; } = SidebarItemKind.Drive; public Visibility ItemVisibility { get; set; } = Visibility.Visible; @@ -138,7 +138,7 @@ public string SpaceText set => SetProperty(ref spaceText, value); } - public SectionType Section { get; set; } + public SidebarSectionKind Section { get; set; } public ContextMenuOptions MenuOptions { get; set; } @@ -299,7 +299,7 @@ public async Task UpdatePropertiesAsync() } } - public int CompareTo(INavigationControlItem other) + public int CompareTo(ISidebarItem other) { var result = Type.CompareTo((other as DriveItem)?.Type ?? Type); return result == 0 ? Text.CompareTo(other.Text) : result; diff --git a/src/Files.App/Data/Items/SidebarLibraryItem.cs b/src/Files.App/Data/Items/SidebarLibraryItem.cs index d5b445bf55c3..6682a8ebd0bf 100644 --- a/src/Files.App/Data/Items/SidebarLibraryItem.cs +++ b/src/Files.App/Data/Items/SidebarLibraryItem.cs @@ -13,7 +13,7 @@ public sealed class LibraryLocationItem : LocationItem public LibraryLocationItem(ShellLibraryItem shellLibrary) { - Section = SectionType.Library; + Section = SidebarSectionKind.Library; MenuOptions = new ContextMenuOptions { IsLocationItem = true, diff --git a/src/Files.App/Data/Items/StandardFtpItem.cs b/src/Files.App/Data/Items/StandardFtpItem.cs new file mode 100644 index 000000000000..91862e30f8f8 --- /dev/null +++ b/src/Files.App/Data/Items/StandardFtpItem.cs @@ -0,0 +1,52 @@ +// Copyright (c) 2024 Files Community +// Licensed under the MIT License. See the LICENSE. + +using FluentFTP; +using System.IO; +using Windows.Storage; + +namespace Files.App.Data.Items +{ + /// + /// Represents standard item resides in FTP storage on Windows to be shown on UI. + /// + public sealed class StandardFtpItem : StandardStorageItem + { + /// + /// Initializes an instance of class. + /// + /// + /// + public StandardFtpItem(FtpListItem item, string folder) : base() + { + var isFile = item.Type == FtpObjectType.File; + ItemDateCreatedReal = item.RawCreated < DateTime.FromFileTimeUtc(0) ? DateTimeOffset.MinValue : item.RawCreated; + ItemDateModifiedReal = item.RawModified < DateTime.FromFileTimeUtc(0) ? DateTimeOffset.MinValue : item.RawModified; + ItemNameRaw = item.Name; + FileExtension = Path.GetExtension(item.Name); + ItemPath = PathNormalization.Combine(folder, item.Name); + PrimaryItemAttribute = isFile ? StorageItemTypes.File : StorageItemTypes.Folder; + ItemPropertiesInitialized = false; + FileSizeBytes = item.Size; + HasChildren = !isFile; + FileImage = null; + FileSize = isFile ? FileSizeBytes.ToSizeString() : null; + Opacity = 1; + IsHiddenItem = false; + + ItemType = isFile + ? Name.Contains('.', StringComparison.Ordinal) + ? FileExtension.Trim('.') + " " + "File".GetLocalizedResource() + : "File".GetLocalizedResource() + : "Folder".GetLocalizedResource(); + } + + [Obsolete("StorageItem is obsolete Storage Layer. Must not use furthermore.")] + public async Task ToStorageItem() => PrimaryItemAttribute switch + { + StorageItemTypes.File => await new FtpStorageFile(ItemPath, ItemNameRaw, ItemDateCreatedReal).ToStorageFileAsync(), + StorageItemTypes.Folder => new FtpStorageFolder(ItemPath, ItemNameRaw, ItemDateCreatedReal), + _ => throw new InvalidDataException(), + }; + } +} diff --git a/src/Files.App/Data/Items/StandardRecycleBinItem.cs b/src/Files.App/Data/Items/StandardRecycleBinItem.cs new file mode 100644 index 000000000000..3b88bb6fda30 --- /dev/null +++ b/src/Files.App/Data/Items/StandardRecycleBinItem.cs @@ -0,0 +1,54 @@ +// Copyright (c) 2024 Files Community +// Licensed under the MIT License. See the LICENSE. + +namespace Files.App.Data.Items +{ + /// + /// Represents standard item resides in Recycle Bin on Windows to be shown on UI. + /// + public sealed class StandardRecycleBinItem : StandardStorageItem + { + /// + /// Gets or sets originally resided path for this removed item placed in Recycle Bin on Windows. + /// + public string OriginalPath { get; set; } = ""; + + /// + /// Gets humanized string of . + /// + public string DateDeletedHumanized { get; private set; } = ""; + + /// + /// Gets parent path of originally resided path for this removed item placed in Recycle Bin on Windows. + /// + public string OriginalParentFolderPath + => SystemIO.Path.IsPathRooted(OriginalPath) ? SystemIO.Path.GetDirectoryName(OriginalPath) ?? "" : OriginalPath; + + /// + /// Gets parent folder name of originally resided path for this removed item placed in Recycle Bin on Windows. + /// + public string OriginalParentFolderName + => SystemIO.Path.GetFileName(OriginalParentFolderPath); + + private DateTimeOffset _DateDeleted; + /// + /// Gets or sets deleted date. + /// + public DateTimeOffset DateDeleted + { + get => _DateDeleted; + set + { + DateDeletedHumanized = DateTimeFormatter.ToShortLabel(value); + _DateDeleted = value; + } + } + + /// + /// Initializes an instance of class. + /// + public StandardRecycleBinItem() : base() + { + } + } +} diff --git a/src/Files.App/Data/Items/ListedItem.cs b/src/Files.App/Data/Items/StandardStorageItem.cs similarity index 75% rename from src/Files.App/Data/Items/ListedItem.cs rename to src/Files.App/Data/Items/StandardStorageItem.cs index 5486c5f904f6..bcee89796e17 100644 --- a/src/Files.App/Data/Items/ListedItem.cs +++ b/src/Files.App/Data/Items/StandardStorageItem.cs @@ -3,7 +3,6 @@ using Files.App.ViewModels.Properties; using Files.Shared.Helpers; -using FluentFTP; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Media.Imaging; using System.Drawing; @@ -11,22 +10,31 @@ using System.Text; using Windows.Storage; -#pragma warning disable CS0618 // Type or member is obsolete - -namespace Files.App.Utils +namespace Files.App.Data.Items { - public class ListedItem : ObservableObject, IGroupableItem + /// + /// Represents storage item to be displayed on UI with necessary storage properties. + /// + // TODO: Add required keyword + public class StandardStorageItem : ObservableObject, IGroupableItem { - protected static IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); + // Dependency injections - protected static IStartMenuService StartMenuService { get; } = Ioc.Default.GetRequiredService(); + protected IFileTagsSettingsService FileTagsSettingsService { get; } = Ioc.Default.GetRequiredService(); + protected IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); + protected IDateTimeFormatter DateTimeFormatter { get; } = Ioc.Default.GetRequiredService(); + protected IStartMenuService StartMenuService { get; } = Ioc.Default.GetRequiredService(); - protected static readonly IFileTagsSettingsService fileTagsSettingsService = Ioc.Default.GetRequiredService(); + // Properties - protected static readonly IDateTimeFormatter dateTimeFormatter = Ioc.Default.GetRequiredService(); + /// + /// Gets type of this storage item. + /// + public StorableKind StorableKind { get; } - public bool IsHiddenItem { get; set; } = false; + public bool IsHiddenItem { get; set; } + [Obsolete("Do not use furthermore. Use StorableKind instead.")] public StorageItemTypes PrimaryItemAttribute { get; set; } private volatile int itemPropertiesInitialized = 0; @@ -55,9 +63,7 @@ public string ItemTooltipText } } - public string FolderRelativeId { get; set; } - - public bool ContainsFilesOrFolders { get; set; } = true; + public bool HasChildren { get; set; } = true; private bool needsPlaceholderGlyph = true; public bool NeedsPlaceholderGlyph @@ -123,7 +129,7 @@ public string[] FileTags public IList? FileTagsUI { - get => fileTagsSettingsService.GetTagsByIds(FileTags); + get => FileTagsSettingsService.GetTagsByIds(FileTags); } private Uri customIconSource; @@ -164,10 +170,10 @@ public CloudDriveSyncStatusUI SyncStatusUI } // This is used to avoid passing a null value to AutomationProperties.Name, which causes a crash - public string SyncStatusString - { - get => string.IsNullOrEmpty(SyncStatusUI?.SyncStatusString) ? "CloudDriveSyncStatus_Unknown".GetLocalizedResource() : SyncStatusUI.SyncStatusString; - } + public string SyncStatusString => + string.IsNullOrEmpty(SyncStatusUI?.SyncStatusString) + ? "CloudDriveSyncStatus_Unknown".GetLocalizedResource() + : SyncStatusUI.SyncStatusString; private BitmapImage fileImage; public BitmapImage FileImage @@ -292,7 +298,7 @@ public DateTimeOffset ItemDateModifiedReal get => itemDateModifiedReal; set { - ItemDateModified = dateTimeFormatter.ToShortLabel(value); + ItemDateModified = DateTimeFormatter.ToShortLabel(value); itemDateModifiedReal = value; OnPropertyChanged(nameof(ItemDateModified)); } @@ -304,7 +310,7 @@ public DateTimeOffset ItemDateCreatedReal get => itemDateCreatedReal; set { - ItemDateCreated = dateTimeFormatter.ToShortLabel(value); + ItemDateCreated = DateTimeFormatter.ToShortLabel(value); itemDateCreatedReal = value; OnPropertyChanged(nameof(ItemDateCreated)); } @@ -316,7 +322,7 @@ public DateTimeOffset ItemDateAccessedReal get => itemDateAccessedReal; set { - ItemDateAccessed = dateTimeFormatter.ToShortLabel(value); + ItemDateAccessed = DateTimeFormatter.ToShortLabel(value); itemDateAccessedReal = value; OnPropertyChanged(nameof(ItemDateAccessed)); } @@ -364,15 +370,6 @@ public string DimensionsDisplay } } - /// - /// Initializes a new instance of the class. - /// - /// - public ListedItem(string folderRelativeId) => FolderRelativeId = folderRelativeId; - - // Parameterless constructor for JsonConvert - public ListedItem() { } - private ObservableCollection fileDetails; public ObservableCollection FileDetails { @@ -404,11 +401,11 @@ public override string ToString() } public bool IsFolder => PrimaryItemAttribute is StorageItemTypes.Folder; - public bool IsRecycleBinItem => this is RecycleBinItem; + public bool IsRecycleBinItem => this is StandardRecycleBinItem; public bool IsShortcut => this is ShortcutItem; public bool IsLibrary => this is LibraryItem; public bool IsLinkItem => IsShortcut && ((ShortcutItem)this).IsUrl; - public bool IsFtpItem => this is FtpItem; + public bool IsFtpItem => this is StandardFtpItem; public bool IsArchive => this is ZipItem; public bool IsAlternateStream => this is AlternateStreamItem; public bool IsGitItem => this is GitItem; @@ -426,90 +423,36 @@ public BaseStorageFile ItemFile } // This is a hack used because x:Bind casting did not work properly - public RecycleBinItem AsRecycleBinItem => this as RecycleBinItem; - - public GitItem AsGitItem => this as GitItem; + public StandardRecycleBinItem? AsRecycleBinItem => this as StandardRecycleBinItem; + public GitItem? AsGitItem => this as GitItem; + /// public string Key { get; set; } + // Constructor + /// - /// Manually check if a folder path contains child items, - /// updating the ContainsFilesOrFolders property from its default value of true + /// Initializes a new instance of the class. /// - public void UpdateContainsFilesFolders() - { - ContainsFilesOrFolders = FolderHelpers.CheckForFilesFolders(ItemPath); - } - } - - public sealed class RecycleBinItem : ListedItem - { - public RecycleBinItem(string folderRelativeId) : base(folderRelativeId) + public StandardStorageItem() { } - public string ItemDateDeleted { get; private set; } + // Methods - public DateTimeOffset ItemDateDeletedReal + /// + /// Manually check if a folder path contains child items, + /// updating the ContainsFilesOrFolders property from its default value of true + /// + public void UpdateContainsFilesFolders() { - get => itemDateDeletedReal; - set - { - ItemDateDeleted = dateTimeFormatter.ToShortLabel(value); - itemDateDeletedReal = value; - } + HasChildren = FolderHelpers.CheckForFilesFolders(ItemPath); } - - private DateTimeOffset itemDateDeletedReal; - - // For recycle bin elements (path + name) - public string ItemOriginalPath { get; set; } - - // For recycle bin elements (path) - public string ItemOriginalFolder => Path.IsPathRooted(ItemOriginalPath) ? Path.GetDirectoryName(ItemOriginalPath) : ItemOriginalPath; - - public string ItemOriginalFolderName => Path.GetFileName(ItemOriginalFolder); - } - - public sealed class FtpItem : ListedItem - { - public FtpItem(FtpListItem item, string folder) : base(null) - { - var isFile = item.Type == FtpObjectType.File; - ItemDateCreatedReal = item.RawCreated < DateTime.FromFileTimeUtc(0) ? DateTimeOffset.MinValue : item.RawCreated; - ItemDateModifiedReal = item.RawModified < DateTime.FromFileTimeUtc(0) ? DateTimeOffset.MinValue : item.RawModified; - ItemNameRaw = item.Name; - FileExtension = Path.GetExtension(item.Name); - ItemPath = PathNormalization.Combine(folder, item.Name); - PrimaryItemAttribute = isFile ? StorageItemTypes.File : StorageItemTypes.Folder; - ItemPropertiesInitialized = false; - - var itemType = isFile ? "File".GetLocalizedResource() : "Folder".GetLocalizedResource(); - if (isFile && Name.Contains('.', StringComparison.Ordinal)) - { - itemType = FileExtension.Trim('.') + " " + itemType; - } - - ItemType = itemType; - FileSizeBytes = item.Size; - ContainsFilesOrFolders = !isFile; - FileImage = null; - FileSize = isFile ? FileSizeBytes.ToSizeString() : null; - Opacity = 1; - IsHiddenItem = false; - } - - public async Task ToStorageItem() => PrimaryItemAttribute switch - { - StorageItemTypes.File => await new FtpStorageFile(ItemPath, ItemNameRaw, ItemDateCreatedReal).ToStorageFileAsync(), - StorageItemTypes.Folder => new FtpStorageFolder(ItemPath, ItemNameRaw, ItemDateCreatedReal), - _ => throw new InvalidDataException(), - }; } - public sealed class ShortcutItem : ListedItem + public sealed class ShortcutItem : StandardStorageItem { - public ShortcutItem(string folderRelativeId) : base(folderRelativeId) + public ShortcutItem(string folderRelativeId) : base() { } @@ -531,9 +474,9 @@ public override string Name public override bool IsExecutable => FileExtensionHelpers.IsExecutableFile(TargetPath, true); } - public sealed class ZipItem : ListedItem + public sealed class ZipItem : StandardStorageItem { - public ZipItem(string folderRelativeId) : base(folderRelativeId) + public ZipItem(string folderRelativeId) : base() { } @@ -555,9 +498,9 @@ public ZipItem() : base() { } } - public sealed class LibraryItem : ListedItem + public sealed class LibraryItem : StandardStorageItem { - public LibraryItem(LibraryLocationItem library) : base(null) + public LibraryItem(LibraryLocationItem library) : base() { ItemPath = library.Path; ItemNameRaw = library.Text; @@ -582,7 +525,7 @@ public LibraryItem(LibraryLocationItem library) : base(null) public ReadOnlyCollection Folders { get; } } - public sealed class AlternateStreamItem : ListedItem + public sealed class AlternateStreamItem : StandardStorageItem { public string MainStreamPath => ItemPath.Substring(0, ItemPath.LastIndexOf(':')); public string MainStreamName => Path.GetFileName(MainStreamPath); @@ -602,7 +545,7 @@ public override string Name } } - public sealed class GitItem : ListedItem + public sealed class GitItem : StandardStorageItem { private volatile int statusPropertiesInitialized = 0; public bool StatusPropertiesInitialized @@ -639,7 +582,7 @@ public DateTimeOffset? GitLastCommitDate set { SetProperty(ref _GitLastCommitDate, value); - GitLastCommitDateHumanized = value is DateTimeOffset dto ? dateTimeFormatter.ToShortLabel(dto) : ""; + GitLastCommitDateHumanized = value is DateTimeOffset dto ? DateTimeFormatter.ToShortLabel(dto) : ""; } } diff --git a/src/Files.App/Data/Items/WslDistroItem.cs b/src/Files.App/Data/Items/WslDistroItem.cs index 06ce36a1d123..50e0a1880421 100644 --- a/src/Files.App/Data/Items/WslDistroItem.cs +++ b/src/Files.App/Data/Items/WslDistroItem.cs @@ -5,7 +5,7 @@ namespace Files.App.Data.Items { - public sealed class WslDistroItem : ObservableObject, INavigationControlItem + public sealed class WslDistroItem : ObservableObject, ISidebarItem { public string Text { get; set; } @@ -20,8 +20,8 @@ public string Path } } - public NavigationControlItemType ItemType - => NavigationControlItemType.LinuxDistro; + public SidebarItemKind ItemType + => SidebarItemKind.LinuxDistro; private Uri icon; public Uri Icon @@ -34,7 +34,7 @@ public Uri Icon } } - public SectionType Section { get; set; } + public SidebarSectionKind Section { get; set; } public ContextMenuOptions MenuOptions { get; set; } @@ -61,6 +61,6 @@ public IconSource? IconSource }; } - public int CompareTo(INavigationControlItem other) => Text.CompareTo(other.Text); + public int CompareTo(ISidebarItem other) => Text.CompareTo(other.Text); } } diff --git a/src/Files.App/Data/Models/ItemManipulationModel.cs b/src/Files.App/Data/Models/ItemManipulationModel.cs index ca8500a22bba..520b5e807ae5 100644 --- a/src/Files.App/Data/Models/ItemManipulationModel.cs +++ b/src/Files.App/Data/Models/ItemManipulationModel.cs @@ -13,15 +13,15 @@ public sealed class ItemManipulationModel public event EventHandler InvertSelectionInvoked; - public event EventHandler AddSelectedItemInvoked; + public event EventHandler AddSelectedItemInvoked; - public event EventHandler RemoveSelectedItemInvoked; + public event EventHandler RemoveSelectedItemInvoked; public event EventHandler FocusSelectedItemsInvoked; public event EventHandler StartRenameItemInvoked; - public event EventHandler ScrollIntoViewInvoked; + public event EventHandler ScrollIntoViewInvoked; public event EventHandler ScrollToTopInvoked; @@ -53,39 +53,39 @@ public void InvertSelection() InvertSelectionInvoked?.Invoke(this, EventArgs.Empty); } - public void AddSelectedItem(ListedItem item) + public void AddSelectedItem(StandardStorageItem item) { AddSelectedItemInvoked?.Invoke(this, item); } - public void AddSelectedItems(List items) + public void AddSelectedItems(List items) { - foreach (ListedItem item in items) + foreach (StandardStorageItem item in items) { AddSelectedItem(item); } } - public void RemoveSelectedItem(ListedItem item) + public void RemoveSelectedItem(StandardStorageItem item) { RemoveSelectedItemInvoked?.Invoke(this, item); } - public void RemoveSelectedItems(List items) + public void RemoveSelectedItems(List items) { - foreach (ListedItem item in items) + foreach (StandardStorageItem item in items) { RemoveSelectedItem(item); } } - public void SetSelectedItem(ListedItem item) + public void SetSelectedItem(StandardStorageItem item) { ClearSelection(); AddSelectedItem(item); } - public void SetSelectedItems(List items) + public void SetSelectedItems(List items) { ClearSelection(); AddSelectedItems(items); @@ -101,7 +101,7 @@ public void StartRenameItem() StartRenameItemInvoked?.Invoke(this, EventArgs.Empty); } - public void ScrollIntoView(ListedItem item) + public void ScrollIntoView(StandardStorageItem item) { ScrollIntoViewInvoked?.Invoke(this, item); } diff --git a/src/Files.App/Data/Models/ItemViewModel.cs b/src/Files.App/Data/Models/ItemViewModel.cs index 0e063911f128..ff6c31394413 100644 --- a/src/Files.App/Data/Models/ItemViewModel.cs +++ b/src/Files.App/Data/Models/ItemViewModel.cs @@ -44,7 +44,7 @@ public sealed class ItemViewModel : ObservableObject, IDisposable private Task? gitProcessQueueAction; // Files and folders list for manipulating - private ConcurrentCollection filesAndFolders; + private ConcurrentCollection filesAndFolders; private readonly IWindowsJumpListService jumpListService = Ioc.Default.GetRequiredService(); private readonly IDialogService dialogService = Ioc.Default.GetRequiredService(); private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); @@ -54,12 +54,12 @@ public sealed class ItemViewModel : ObservableObject, IDisposable private readonly IStorageCacheService fileListCache = Ioc.Default.GetRequiredService(); // Only used for Binding and ApplyFilesAndFoldersChangesAsync, don't manipulate on this! - public BulkConcurrentObservableCollection FilesAndFolders { get; } + public BulkConcurrentObservableCollection FilesAndFolders { get; } private LayoutPreferencesManager folderSettings = null; - private ListedItem? currentFolder; - public ListedItem? CurrentFolder + private StandardStorageItem? currentFolder; + public StandardStorageItem? CurrentFolder { get => currentFolder; private set => SetProperty(ref currentFolder, value); @@ -109,7 +109,7 @@ public GitProperties EnabledGitProperties public event EventHandler GitDirectoryUpdated; - public event EventHandler> OnSelectionRequestedEvent; + public event EventHandler> OnSelectionRequestedEvent; public string WorkingDirectory { get; private set; } @@ -651,7 +651,7 @@ public void CancelExtendedPropertiesLoading() loadPropsCTS = new CancellationTokenSource(); } - public void CancelExtendedPropertiesLoadingForItem(ListedItem item) + public void CancelExtendedPropertiesLoadingForItem(StandardStorageItem item) { itemLoadQueue.TryUpdate(item.ItemPath, true, false); } @@ -744,7 +744,7 @@ await dispatcherQueue.EnqueueOrInvokeAsync(() => } } - private Task RequestSelectionAsync(List itemsToSelect) + private Task RequestSelectionAsync(List itemsToSelect) { // Don't notify if there weren't listed items if (itemsToSelect is null || itemsToSelect.IsEmpty()) @@ -763,7 +763,7 @@ void OrderEntries() if (filesAndFolders.Count == 0) return; - filesAndFolders = new ConcurrentCollection(SortingHelper.OrderFileList(filesAndFolders.ToList(), folderSettings.DirectorySortOption, folderSettings.DirectorySortDirection, + filesAndFolders = new ConcurrentCollection(SortingHelper.OrderFileList(filesAndFolders.ToList(), folderSettings.DirectorySortOption, folderSettings.DirectorySortDirection, folderSettings.SortDirectoriesAlongsideFiles, folderSettings.SortFilesFirst)); } @@ -922,7 +922,7 @@ private async Task GetShieldIcon() return shieldIcon; } - private async Task LoadThumbnailAsync(ListedItem item, CancellationToken cancellationToken) + private async Task LoadThumbnailAsync(StandardStorageItem item, CancellationToken cancellationToken) { var loadNonCachedThumbnail = false; var thumbnailSize = folderSettings.GetRoundedIconSize(); @@ -1033,7 +1033,7 @@ await dispatcherQueue.EnqueueOrInvokeAsync(async () => } } - private static void SetFileTag(ListedItem item) + private static void SetFileTag(StandardStorageItem item) { var dbInstance = FileTagsHelper.GetDbInstance(); dbInstance.SetTags(item.ItemPath, item.FileFRN, item.FileTags ?? []); @@ -1041,7 +1041,7 @@ private static void SetFileTag(ListedItem item) // This works for recycle bin as well as GetFileFromPathAsync/GetFolderFromPathAsync work // for file inside the recycle bin (but not on the recycle bin folder itself) - public async Task LoadExtendedItemPropertiesAsync(ListedItem item) + public async Task LoadExtendedItemPropertiesAsync(StandardStorageItem item) { if (item is null) return; @@ -1060,7 +1060,7 @@ public async Task LoadExtendedItemPropertiesAsync(ListedItem item) var wasSyncStatusLoaded = false; var loadGroupHeaderInfo = false; ImageSource? groupImage = null; - GroupedCollection? gp = null; + GroupedCollection? gp = null; try { @@ -1094,7 +1094,6 @@ public async Task LoadExtendedItemPropertiesAsync(ListedItem item) await dispatcherQueue.EnqueueOrInvokeAsync(() => { - item.FolderRelativeId = matchingStorageFile.FolderRelativeId; item.ItemType = itemType; item.SyncStatusUI = CloudDriveSyncStatusUI.FromCloudDriveSyncStatus(syncStatus); item.FileFRN = fileFRN; @@ -1139,7 +1138,6 @@ await dispatcherQueue.EnqueueOrInvokeAsync(() => await dispatcherQueue.EnqueueOrInvokeAsync(() => { - item.FolderRelativeId = matchingStorageFolder.FolderRelativeId; item.ItemType = itemType; item.SyncStatusUI = CloudDriveSyncStatusUI.FromCloudDriveSyncStatus(syncStatus); item.FileFRN = fileFRN; @@ -1215,7 +1213,7 @@ await SafetyExtensions.IgnoreExceptions(() => } } - private bool CheckElevationRights(ListedItem item) + private bool CheckElevationRights(StandardStorageItem item) { if (item.SyncStatusUI.LoadSyncStatus) return false; @@ -1292,7 +1290,7 @@ await SafetyExtensions.IgnoreExceptions(() => } } - private async Task GetItemTypeGroupIcon(ListedItem item, BaseStorageFile? matchingStorageItem = null) + private async Task GetItemTypeGroupIcon(StandardStorageItem item, BaseStorageFile? matchingStorageItem = null) { ImageSource? groupImage = null; if (item.PrimaryItemAttribute != StorageItemTypes.Folder || item.IsArchive) @@ -1573,7 +1571,7 @@ await DialogDisplayHelper.ShowDialogAsync( if (enumFromStorageFolder) { var basicProps = await rootFolder?.GetBasicPropertiesAsync(); - var currentFolder = library ?? new ListedItem(rootFolder?.FolderRelativeId ?? string.Empty) + var currentFolder = library ?? new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.Folder, ItemPropertiesInitialized = true, @@ -1633,7 +1631,7 @@ await DialogDisplayHelper.ShowDialogAsync( var isHidden = (((FileAttributes)findData.dwFileAttributes & FileAttributes.Hidden) == FileAttributes.Hidden); var opacity = isHidden ? Constants.UI.DimItemOpacity : 1d; - var currentFolder = library ?? new ListedItem(null) + var currentFolder = library ?? new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.Folder, ItemPropertiesInitialized = true, @@ -1678,7 +1676,7 @@ await DialogDisplayHelper.ShowDialogAsync( { await Task.Run(async () => { - List fileList = await Win32StorageEnumerator.ListEntries(path, hFile, findData, cancellationToken, -1, intermediateAction: async (intermediateList) => + List fileList = await Win32StorageEnumerator.ListEntries(path, hFile, findData, cancellationToken, -1, intermediateAction: async (intermediateList) => { filesAndFolders.AddRange(intermediateList); await OrderFilesAndFoldersAsync(); @@ -1720,7 +1718,7 @@ private async Task EnumFromStorageFolderAsync(string path, BaseStorageFolder? ro await Task.Run(async () => { - List finalList = await UniversalStorageEnumerator.ListEntries( + List finalList = await UniversalStorageEnumerator.ListEntries( rootFolder, currentStorageFolder, cancellationToken, @@ -2099,7 +2097,7 @@ private async Task ProcessOperationQueueAsync(CancellationToken cancellationToke var updateQueue = new Queue(); var anyEdits = false; - ListedItem? lastItemAdded = null; + StandardStorageItem? lastItemAdded = null; var rand = Guid.NewGuid(); // Call when any edits have occurred @@ -2196,7 +2194,7 @@ async Task HandleChangesOccurredAsync() Debug.WriteLine("aProcessQueueAction done: {0}", rand); } - public Task AddFileOrFolderFromShellFile(ShellFileItem item) + public Task AddFileOrFolderFromShellFile(ShellFileItem item) { return item.IsFolder ? @@ -2204,7 +2202,7 @@ public Task AddFileOrFolderFromShellFile(ShellFileItem item) UniversalStorageEnumerator.AddFileAsync(ShellStorageFile.FromShellItem(item), currentStorageFolder, addFilesCTS.Token); } - private async Task AddFileOrFolderAsync(ListedItem? item) + private async Task AddFileOrFolderAsync(StandardStorageItem? item) { if (item is null) return; @@ -2236,7 +2234,7 @@ private async Task AddFileOrFolderAsync(ListedItem? item) enumFolderSemaphore.Release(); } - private async Task AddFileOrFolderAsync(string fileOrFolderPath) + private async Task AddFileOrFolderAsync(string fileOrFolderPath) { FINDEX_INFO_LEVELS findInfoLevel = FINDEX_INFO_LEVELS.FindExInfoBasic; var additionalFlags = FIND_FIRST_EX_CASE_SENSITIVE; @@ -2263,7 +2261,7 @@ private async Task AddFileOrFolderAsync(ListedItem? item) return null; } - ListedItem listedItem; + StandardStorageItem listedItem; // FILE_ATTRIBUTE_DIRECTORY if ((findData.dwFileAttributes & 0x10) > 0) @@ -2276,7 +2274,7 @@ private async Task AddFileOrFolderAsync(ListedItem? item) return listedItem; } - private async Task<(ListedItem Item, CloudDriveSyncStatus? SyncStatus, long? Size, DateTimeOffset Created, DateTimeOffset Modified)?> GetFileOrFolderUpdateInfoAsync(ListedItem item, bool hasSyncStatus) + private async Task<(StandardStorageItem Item, CloudDriveSyncStatus? SyncStatus, long? Size, DateTimeOffset Created, DateTimeOffset Modified)?> GetFileOrFolderUpdateInfoAsync(StandardStorageItem item, bool hasSyncStatus) { IStorageItem? storageItem = null; if (item.PrimaryItemAttribute == StorageItemTypes.File) @@ -2355,7 +2353,7 @@ await dispatcherQueue.EnqueueOrInvokeAsync(() => } } - public async Task RemoveFileOrFolderAsync(string path) + public async Task RemoveFileOrFolderAsync(string path) { try { @@ -2392,7 +2390,7 @@ await dispatcherQueue.EnqueueOrInvokeAsync(() => return null; } - public async Task AddSearchResultsToCollectionAsync(ObservableCollection searchItems, string currentSearchPath) + public async Task AddSearchResultsToCollectionAsync(ObservableCollection searchItems, string currentSearchPath) { filesAndFolders.Clear(); filesAndFolders.AddRange(searchItems); @@ -2416,17 +2414,17 @@ public async Task SearchAsync(FolderSearch search) ItemLoadStatusChanged?.Invoke(this, new ItemLoadStatusChangedEventArgs() { Status = ItemLoadStatusChangedEventArgs.ItemLoadStatus.InProgress }); - var results = new List(); + var results = new List(); search.SearchTick += async (s, e) => { - filesAndFolders = new ConcurrentCollection(results); + filesAndFolders = new ConcurrentCollection(results); await OrderFilesAndFoldersAsync(); await ApplyFilesAndFoldersChangesAsync(); }; await search.SearchAsync(results, searchCTS.Token); - filesAndFolders = new ConcurrentCollection(results); + filesAndFolders = new ConcurrentCollection(results); await OrderFilesAndFoldersAsync(); await ApplyFilesAndFoldersChangesAsync(); @@ -2451,8 +2449,8 @@ public void UpdateDateDisplay(bool isFormatChange) await dispatcherQueue.EnqueueOrInvokeAsync(() => item.ItemDateCreatedReal = item.ItemDateCreatedReal); if (isFormatChange || IsDateDiff(item.ItemDateModifiedReal)) await dispatcherQueue.EnqueueOrInvokeAsync(() => item.ItemDateModifiedReal = item.ItemDateModifiedReal); - if (item is RecycleBinItem recycleBinItem && (isFormatChange || IsDateDiff(recycleBinItem.ItemDateDeletedReal))) - await dispatcherQueue.EnqueueOrInvokeAsync(() => recycleBinItem.ItemDateDeletedReal = recycleBinItem.ItemDateDeletedReal); + if (item is StandardRecycleBinItem recycleBinItem && (isFormatChange || IsDateDiff(recycleBinItem.DateDeleted))) + await dispatcherQueue.EnqueueOrInvokeAsync(() => recycleBinItem.DateDeleted = recycleBinItem.DateDeleted); if (item is GitItem gitItem && gitItem.GitLastCommitDate is DateTimeOffset offset && (isFormatChange || IsDateDiff(offset))) await dispatcherQueue.EnqueueOrInvokeAsync(() => gitItem.GitLastCommitDate = gitItem.GitLastCommitDate); }); diff --git a/src/Files.App/Data/Models/PinnedFoldersManager.cs b/src/Files.App/Data/Models/PinnedFoldersManager.cs index 58208198a78e..b7f54d8fcf00 100644 --- a/src/Files.App/Data/Models/PinnedFoldersManager.cs +++ b/src/Files.App/Data/Models/PinnedFoldersManager.cs @@ -18,10 +18,10 @@ public sealed class PinnedFoldersManager public List PinnedFolders { get; set; } = []; - public readonly List _PinnedFolderItems = []; + public readonly List _PinnedFolderItems = []; [JsonIgnore] - public IReadOnlyList PinnedFolderItems + public IReadOnlyList PinnedFolderItems { get { @@ -56,7 +56,7 @@ public async Task UpdateItemsWithExplorerAsync() /// /// The location item /// Index of the item - public int IndexOfItem(INavigationControlItem locationItem) + public int IndexOfItem(ISidebarItem locationItem) { lock (_PinnedFolderItems) { @@ -83,7 +83,7 @@ public async Task CreateLocationItemFromPathAsync(string path) } locationItem.Path = path; - locationItem.Section = SectionType.Pinned; + locationItem.Section = SidebarSectionKind.Pinned; locationItem.MenuOptions = new ContextMenuOptions { IsLocationItem = true, @@ -147,12 +147,12 @@ private void AddLocationItemToSidebar(LocationItem locationItem) if (_PinnedFolderItems.Any(x => x.Path == locationItem.Path)) return; - var lastItem = _PinnedFolderItems.LastOrDefault(x => x.ItemType is NavigationControlItemType.Location); + var lastItem = _PinnedFolderItems.LastOrDefault(x => x.ItemType is SidebarItemKind.Location); insertIndex = lastItem is not null ? _PinnedFolderItems.IndexOf(lastItem) + 1 : 0; _PinnedFolderItems.Insert(insertIndex, locationItem); } - DataChanged?.Invoke(SectionType.Pinned, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, locationItem, insertIndex)); + DataChanged?.Invoke(SidebarSectionKind.Pinned, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, locationItem, insertIndex)); } /// @@ -179,12 +179,12 @@ public void RemoveStaleSidebarItems() { _PinnedFolderItems.Remove(item); } - DataChanged?.Invoke(SectionType.Pinned, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item)); + DataChanged?.Invoke(SidebarSectionKind.Pinned, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item)); } } // Remove unpinned items from sidebar - DataChanged?.Invoke(SectionType.Pinned, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + DataChanged?.Invoke(SidebarSectionKind.Pinned, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } public async void LoadAsync(object? sender, FileSystemEventArgs e) diff --git a/src/Files.App/Data/Models/SuggestionModel.cs b/src/Files.App/Data/Models/SuggestionModel.cs index cdbb2ad0d1cf..443a2c40e205 100644 --- a/src/Files.App/Data/Models/SuggestionModel.cs +++ b/src/Files.App/Data/Models/SuggestionModel.cs @@ -62,7 +62,7 @@ private void Img_ImageOpened(object sender, Microsoft.UI.Xaml.RoutedEventArgs e) } } - public SuggestionModel(ListedItem item) + public SuggestionModel(StandardStorageItem item) { LoadFileIcon = item.LoadFileIcon; NeedsPlaceholderGlyph = item.NeedsPlaceholderGlyph; diff --git a/src/Files.App/Helpers/Layout/AdaptiveLayoutHelpers.cs b/src/Files.App/Helpers/Layout/AdaptiveLayoutHelpers.cs index 27417b823517..5eefbb138739 100644 --- a/src/Files.App/Helpers/Layout/AdaptiveLayoutHelpers.cs +++ b/src/Files.App/Helpers/Layout/AdaptiveLayoutHelpers.cs @@ -15,7 +15,7 @@ public static class AdaptiveLayoutHelpers private static IFoldersSettingsService FoldersSettingsService { get; } = Ioc.Default.GetRequiredService(); private static ILayoutSettingsService LayoutSettingsService { get; } = Ioc.Default.GetRequiredService(); - public static void ApplyAdaptativeLayout(LayoutPreferencesManager folderSettings, string path, IList filesAndFolders) + public static void ApplyAdaptativeLayout(LayoutPreferencesManager folderSettings, string path, IList filesAndFolders) { if (LayoutSettingsService.SyncFolderPreferencesAcrossDirectories) return; @@ -36,7 +36,7 @@ public static void ApplyAdaptativeLayout(LayoutPreferencesManager folderSettings } } - private static Layouts GetAdaptiveLayout(string path, IList filesAndFolders) + private static Layouts GetAdaptiveLayout(string path, IList filesAndFolders) { var pathLayout = GetPathLayout(path); if (pathLayout is not Layouts.None) @@ -81,7 +81,7 @@ static bool IsFolderType(KeyData data) => "FolderType".Equals(data.KeyName, StringComparison.OrdinalIgnoreCase); } - private static Layouts GetContentLayout(IList filesAndFolders) + private static Layouts GetContentLayout(IList filesAndFolders) { int itemCount = filesAndFolders.Count; if (filesAndFolders.Count is 0) @@ -104,14 +104,14 @@ private static Layouts GetContentLayout(IList filesAndFolders) return Layouts.Detail; return Layouts.Grid; - static bool IsFolder(ListedItem item) + static bool IsFolder(StandardStorageItem item) => item.PrimaryItemAttribute is StorageItemTypes.Folder; - static bool IsImage(ListedItem item) + static bool IsImage(StandardStorageItem item) => !string.IsNullOrEmpty(item.FileExtension) && ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant()); - static bool IsMedia(ListedItem item) + static bool IsMedia(StandardStorageItem item) => !string.IsNullOrEmpty(item.FileExtension) && (FileExtensionHelpers.IsAudioFile(item.FileExtension) || FileExtensionHelpers.IsVideoFile(item.FileExtension)); diff --git a/src/Files.App/Helpers/Navigation/NavigationHelpers.cs b/src/Files.App/Helpers/Navigation/NavigationHelpers.cs index 84aaa4be5f92..21076cf1de37 100644 --- a/src/Files.App/Helpers/Navigation/NavigationHelpers.cs +++ b/src/Files.App/Helpers/Navigation/NavigationHelpers.cs @@ -260,7 +260,7 @@ public static Task OpenTabInNewWindowAsync(string tabArgs) return Launcher.LaunchUriAsync(folderUri).AsTask(); } - public static void OpenInSecondaryPane(IShellPage associatedInstance, ListedItem listedItem) + public static void OpenInSecondaryPane(IShellPage associatedInstance, StandardStorageItem listedItem) { if (associatedInstance is null || listedItem is null) return; @@ -298,7 +298,7 @@ public static async Task OpenSelectedItemsAsync(IShellPage associatedInstance, b if (opened) return; - foreach (ListedItem item in selectedItems) + foreach (StandardStorageItem item in selectedItems) { var type = item.PrimaryItemAttribute == StorageItemTypes.Folder ? FilesystemItemType.Directory diff --git a/src/Files.App/Helpers/ShareItemHelpers.cs b/src/Files.App/Helpers/ShareItemHelpers.cs index c67e2a8b9ba4..5cad503cb24e 100644 --- a/src/Files.App/Helpers/ShareItemHelpers.cs +++ b/src/Files.App/Helpers/ShareItemHelpers.cs @@ -16,12 +16,12 @@ namespace Files.App.Helpers { public static class ShareItemHelpers { - public static bool IsItemShareable(ListedItem item) + public static bool IsItemShareable(StandardStorageItem item) => !item.IsHiddenItem && (!item.IsShortcut || item.IsLinkItem) && (item.PrimaryItemAttribute != StorageItemTypes.Folder || item.IsArchive); - public static async Task ShareItemsAsync(IEnumerable itemsToShare) + public static async Task ShareItemsAsync(IEnumerable itemsToShare) { if (itemsToShare is null) return; @@ -57,7 +57,7 @@ async void Manager_DataRequested(DataTransferManager sender, DataRequestedEventA List items = []; DataRequest dataRequest = args.Request; - foreach (ListedItem item in itemsToShare) + foreach (StandardStorageItem item in itemsToShare) { if (item is ShortcutItem shItem) { diff --git a/src/Files.App/Helpers/UI/UIFilesystemHelpers.cs b/src/Files.App/Helpers/UI/UIFilesystemHelpers.cs index 0742b61999ae..e45b930f92ff 100644 --- a/src/Files.App/Helpers/UI/UIFilesystemHelpers.cs +++ b/src/Files.App/Helpers/UI/UIFilesystemHelpers.cs @@ -55,7 +55,7 @@ await associatedInstance.SlimContentPage.SelectedItems.ToList().ParallelForEachA } // FTP don't support cut, fallback to copy - if (listedItem is not FtpItem) + if (listedItem is not StandardFtpItem) { _ = dispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, () => { @@ -63,7 +63,7 @@ await associatedInstance.SlimContentPage.SelectedItems.ToList().ParallelForEachA listedItem.Opacity = Constants.UI.DimItemOpacity; }); } - if (listedItem is FtpItem ftpItem) + if (listedItem is StandardFtpItem ftpItem) { if (ftpItem.PrimaryItemAttribute is StorageItemTypes.File or StorageItemTypes.Folder) items.Add(await ftpItem.ToStorageItem()); @@ -160,7 +160,7 @@ await associatedInstance.SlimContentPage.SelectedItems.ToList().ParallelForEachA banner.Progress.Report(); } - if (listedItem is FtpItem ftpItem) + if (listedItem is StandardFtpItem ftpItem) { if (ftpItem.PrimaryItemAttribute is StorageItemTypes.File or StorageItemTypes.Folder) items.Add(await ftpItem.ToStorageItem()); @@ -235,7 +235,7 @@ public static async Task PasteItemAsync(string destinationPath, IShellPage assoc } } - public static async Task RenameFileItemAsync(ListedItem item, string newName, IShellPage associatedInstance, bool showExtensionDialog = true) + public static async Task RenameFileItemAsync(StandardStorageItem item, string newName, IShellPage associatedInstance, bool showExtensionDialog = true) { if (item is AlternateStreamItem ads) // For alternate streams Name is not a substring ItemNameRaw { @@ -365,20 +365,20 @@ public static async Task CreateFolderWithSelectionAsync(IShellPage associatedIns /// /// /// - public static void SetHiddenAttributeItem(ListedItem item, bool isHidden, ItemManipulationModel itemManipulationModel) + public static void SetHiddenAttributeItem(StandardStorageItem item, bool isHidden, ItemManipulationModel itemManipulationModel) { item.IsHiddenItem = isHidden; itemManipulationModel.RefreshItemsOpacity(); } - public static async Task CreateShortcutAsync(IShellPage? associatedInstance, IReadOnlyList selectedItems) + public static async Task CreateShortcutAsync(IShellPage? associatedInstance, IReadOnlyList selectedItems) { var currentPath = associatedInstance?.FilesystemViewModel.WorkingDirectory; if (App.LibraryManager.TryGetLibrary(currentPath ?? string.Empty, out var library) && !library.IsEmpty) currentPath = library.DefaultSaveFolder; - foreach (ListedItem selectedItem in selectedItems) + foreach (StandardStorageItem selectedItem in selectedItems) { var fileName = FilesystemHelpers.GetShortcutNamingPreference(selectedItem.Name); var filePath = Path.Combine(currentPath ?? string.Empty, fileName); diff --git a/src/Files.App/Services/Storage/StorageArchiveService.cs b/src/Files.App/Services/Storage/StorageArchiveService.cs index 8b705f05acc3..754478b7d769 100644 --- a/src/Files.App/Services/Storage/StorageArchiveService.cs +++ b/src/Files.App/Services/Storage/StorageArchiveService.cs @@ -16,7 +16,7 @@ public class StorageArchiveService : IStorageArchiveService private IThreadingService ThreadingService { get; } = Ioc.Default.GetRequiredService(); /// - public bool CanCompress(IReadOnlyList items) + public bool CanCompress(IReadOnlyList items) { return CanDecompress(items) is false || @@ -24,7 +24,7 @@ public bool CanCompress(IReadOnlyList items) } /// - public bool CanDecompress(IReadOnlyList items) + public bool CanDecompress(IReadOnlyList items) { return items.Any() && @@ -185,7 +185,7 @@ public async Task DecompressAsync(string archiveFilePath, string destinati } /// - public string GenerateArchiveNameFromItems(IReadOnlyList items) + public string GenerateArchiveNameFromItems(IReadOnlyList items) { if (!items.Any()) return string.Empty; diff --git a/src/Files.App/Services/Storage/StorageNetworkService.cs b/src/Files.App/Services/Storage/StorageNetworkService.cs index e0249c33b7c8..b71c7f99eaee 100644 --- a/src/Files.App/Services/Storage/StorageNetworkService.cs +++ b/src/Files.App/Services/Storage/StorageNetworkService.cs @@ -46,7 +46,7 @@ public NetworkService() Text = "Network".GetLocalizedResource(), Path = Constants.UserEnvironmentPaths.NetworkFolderPath, Type = DriveType.Network, - ItemType = NavigationControlItemType.Drive, + ItemType = SidebarItemKind.Drive, }; networkItem.MenuOptions = new ContextMenuOptions() @@ -73,7 +73,7 @@ public async Task> GetComputersAsync() Path = item.FilePath, DeviceID = item.FilePath, Type = DriveType.Network, - ItemType = NavigationControlItemType.Drive, + ItemType = SidebarItemKind.Drive, }; networkItem.MenuOptions = new ContextMenuOptions() @@ -124,7 +124,7 @@ public async Task> GetShortcutsAsync() Path = item.TargetPath, DeviceID = item.FilePath, Type = DriveType.Network, - ItemType = NavigationControlItemType.Drive, + ItemType = SidebarItemKind.Drive, }; networkItem.MenuOptions = new ContextMenuOptions() diff --git a/src/Files.App/UserControls/Menus/FileTagsContextMenu.cs b/src/Files.App/UserControls/Menus/FileTagsContextMenu.cs index a83161f89724..822c305b0d25 100644 --- a/src/Files.App/UserControls/Menus/FileTagsContextMenu.cs +++ b/src/Files.App/UserControls/Menus/FileTagsContextMenu.cs @@ -14,9 +14,9 @@ public sealed class FileTagsContextMenu : MenuFlyout private IFileTagsSettingsService FileTagsSettingsService { get; } = Ioc.Default.GetService(); - public IEnumerable SelectedItems { get; } + public IEnumerable SelectedItems { get; } - public FileTagsContextMenu(IEnumerable selectedItems) + public FileTagsContextMenu(IEnumerable selectedItems) { SetValue(MenuFlyoutHelper.ItemsSourceProperty, FileTagsSettingsService.FileTagList .Select(tag => new MenuFlyoutFactoryItemViewModel(() => @@ -69,7 +69,7 @@ private void Item_Opening(object? sender, object e) commonFileTags.OfType().ForEach(x => x.IsChecked = true); } - private void RemoveFileTag(IEnumerable selectedListedItems, TagViewModel removed) + private void RemoveFileTag(IEnumerable selectedListedItems, TagViewModel removed) { foreach (var selectedItem in selectedListedItems) { @@ -82,7 +82,7 @@ private void RemoveFileTag(IEnumerable selectedListedItems, TagViewM } } - private void AddFileTag(IEnumerable selectedListedItems, TagViewModel added) + private void AddFileTag(IEnumerable selectedListedItems, TagViewModel added) { foreach (var selectedItem in selectedListedItems) { diff --git a/src/Files.App/Utils/Cloud/CloudDrivesManager.cs b/src/Files.App/Utils/Cloud/CloudDrivesManager.cs index c4eec511b3d9..83a56a65e406 100644 --- a/src/Files.App/Utils/Cloud/CloudDrivesManager.cs +++ b/src/Files.App/Utils/Cloud/CloudDrivesManager.cs @@ -93,7 +93,7 @@ await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(async () } DataChanged?.Invoke( - SectionType.CloudDrives, + SidebarSectionKind.CloudDrives, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, cloudProviderItem) ); } diff --git a/src/Files.App/Utils/FileTags/FileTagsManager.cs b/src/Files.App/Utils/FileTags/FileTagsManager.cs index f3c6cc502818..d09b9187a7c4 100644 --- a/src/Files.App/Utils/FileTags/FileTagsManager.cs +++ b/src/Files.App/Utils/FileTags/FileTagsManager.cs @@ -34,7 +34,7 @@ private async void TagsUpdatedAsync(object? _, EventArgs e) { lock (fileTags) fileTags.Clear(); - DataChanged?.Invoke(SectionType.FileTag, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + DataChanged?.Invoke(SidebarSectionKind.FileTag, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); await UpdateFileTagsAsync(); } @@ -61,7 +61,7 @@ public Task UpdateFileTagsAsync() } fileTags.Add(tagItem); } - DataChanged?.Invoke(SectionType.FileTag, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, tagItem)); + DataChanged?.Invoke(SidebarSectionKind.FileTag, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, tagItem)); } } catch (Exception ex) diff --git a/src/Files.App/Utils/Global/WSLDistroManager.cs b/src/Files.App/Utils/Global/WSLDistroManager.cs index 066478174bfb..3b47e7b4b7c7 100644 --- a/src/Files.App/Utils/Global/WSLDistroManager.cs +++ b/src/Files.App/Utils/Global/WSLDistroManager.cs @@ -49,7 +49,7 @@ public static async Task UpdateDrivesAsync() } distros.Add(distro); } - DataChanged?.Invoke(SectionType.WSL, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, distro)); + DataChanged?.Invoke(SidebarSectionKind.WSL, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, distro)); } } catch (Exception) diff --git a/src/Files.App/Utils/Library/LibraryManager.cs b/src/Files.App/Utils/Library/LibraryManager.cs index 772c6479d1c3..07d2fceb8ac2 100644 --- a/src/Files.App/Utils/Library/LibraryManager.cs +++ b/src/Files.App/Utils/Library/LibraryManager.cs @@ -111,7 +111,7 @@ public async Task UpdateLibrariesAsync() libraries.AddRange(libs); } } - DataChanged?.Invoke(SectionType.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + DataChanged?.Invoke(SidebarSectionKind.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } public bool TryGetLibrary(string path, out LibraryLocationItem library) @@ -159,7 +159,7 @@ public async Task CreateNewLibrary(string name) { libraries.Add(newLib); } - DataChanged?.Invoke(SectionType.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, newLib)); + DataChanged?.Invoke(SidebarSectionKind.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, newLib)); return true; } return false; @@ -244,7 +244,7 @@ public async Task UpdateLibrary(string libraryPath, string { libraries[libraries.IndexOf(libItem)] = newLib; } - DataChanged?.Invoke(SectionType.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, newLib, libItem)); + DataChanged?.Invoke(SidebarSectionKind.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, newLib, libItem)); } return newLib; } @@ -397,7 +397,7 @@ private void OnLibraryChanged(WatcherChangeTypes changeType, string oldPath, str { libraries.Remove(changedLibrary); } - DataChanged?.Invoke(SectionType.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, changedLibrary)); + DataChanged?.Invoke(SidebarSectionKind.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, changedLibrary)); } // library is null in case it was deleted if (library is not null && !Libraries.Any(x => x.Path == library1?.FullPath)) @@ -407,7 +407,7 @@ private void OnLibraryChanged(WatcherChangeTypes changeType, string oldPath, str { libraries.Add(libItem); } - DataChanged?.Invoke(SectionType.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, libItem)); + DataChanged?.Invoke(SidebarSectionKind.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, libItem)); } library?.Dispose(); diff --git a/src/Files.App/Utils/RecycleBin/RecycleBinHelpers.cs b/src/Files.App/Utils/RecycleBin/RecycleBinHelpers.cs index 4f6df171c2c6..3ac7c76db6bc 100644 --- a/src/Files.App/Utils/RecycleBin/RecycleBinHelpers.cs +++ b/src/Files.App/Utils/RecycleBin/RecycleBinHelpers.cs @@ -156,12 +156,12 @@ public static async Task RestoreItemAsync(IShellPage associatedInstance) var selected = associatedInstance.SlimContentPage.SelectedItems; if (selected == null) return; - var items = selected.ToList().Where(x => x is RecycleBinItem).Select((item) => new + var items = selected.ToList().Where(x => x is StandardRecycleBinItem).Select((item) => new { Source = StorageHelpers.FromPathAndType( item.ItemPath, item.PrimaryItemAttribute == StorageItemTypes.File ? FilesystemItemType.File : FilesystemItemType.Directory), - Dest = ((RecycleBinItem)item).ItemOriginalPath + Dest = ((StandardRecycleBinItem)item).OriginalPath }); await associatedInstance.FilesystemHelpers.RestoreItemsFromTrashAsync(items.Select(x => x.Source), items.Select(x => x.Dest), true); } diff --git a/src/Files.App/Utils/Storage/Collection/GroupingHelper.cs b/src/Files.App/Utils/Storage/Collection/GroupingHelper.cs index 141826b374b3..f8ca2edc521d 100644 --- a/src/Files.App/Utils/Storage/Collection/GroupingHelper.cs +++ b/src/Files.App/Utils/Storage/Collection/GroupingHelper.cs @@ -9,7 +9,7 @@ public static class GroupingHelper { private static readonly IDateTimeFormatter dateTimeFormatter = Ioc.Default.GetService(); - public static Func GetItemGroupKeySelector(GroupOption option, GroupByDateUnit unit) + public static Func GetItemGroupKeySelector(GroupOption option, GroupByDateUnit unit) { return option switch { @@ -20,14 +20,14 @@ public static Func GetItemGroupKeySelector(GroupOption optio GroupOption.FileType => x => x.PrimaryItemAttribute == StorageItemTypes.Folder && !x.IsShortcut ? x.ItemType : x.FileExtension?.ToLowerInvariant() ?? " ", GroupOption.SyncStatus => x => x.SyncStatusString, GroupOption.FileTag => x => x.FileTags?.FirstOrDefault() ?? "Untagged", - GroupOption.OriginalFolder => x => (x as RecycleBinItem)?.ItemOriginalFolder, - GroupOption.DateDeleted => x => dateTimeFormatter.ToTimeSpanLabel((x as RecycleBinItem)?.ItemDateDeletedReal ?? DateTimeOffset.Now, unit).Text, + GroupOption.OriginalFolder => x => (x as StandardRecycleBinItem)?.OriginalParentFolderPath, + GroupOption.DateDeleted => x => dateTimeFormatter.ToTimeSpanLabel((x as StandardRecycleBinItem)?.DateDeleted ?? DateTimeOffset.Now, unit).Text, GroupOption.FolderPath => x => PathNormalization.GetParentDir(x.ItemPath.TrimPath()), _ => null, }; } - public static (Action>, Action>) GetGroupInfoSelector(GroupOption option, GroupByDateUnit unit) + public static (Action>, Action>) GetGroupInfoSelector(GroupOption option, GroupByDateUnit unit) { return option switch { @@ -47,7 +47,7 @@ public static (Action>, Action { - ListedItem first = x.First(); + StandardStorageItem first = x.First(); var model = x.Model; model.Text = first.ItemType; @@ -82,7 +82,7 @@ public static (Action>, Action (x => { - ListedItem first = x.First(); + StandardStorageItem first = x.First(); x.Model.ShowCountTextBelow = true; x.Model.Text = first.SyncStatusString; x.Model.Icon = first?.SyncStatusUI.Glyph; @@ -90,7 +90,7 @@ public static (Action>, Action (x => { - ListedItem first = x.FirstOrDefault(); + StandardStorageItem first = x.FirstOrDefault(); x.Model.ShowCountTextBelow = true; x.Model.Text = first.FileTagsUI?.FirstOrDefault()?.Name ?? "Untagged".GetLocalizedResource(); //x.Model.Icon = first.FileTagsUI?.FirstOrDefault()?.Color; @@ -98,7 +98,7 @@ public static (Action>, Action (x => { - var vals = dateTimeFormatter.ToTimeSpanLabel((x.First() as RecycleBinItem)?.ItemDateDeletedReal ?? DateTimeOffset.Now, unit); + var vals = dateTimeFormatter.ToTimeSpanLabel((x.First() as StandardRecycleBinItem)?.DateDeleted ?? DateTimeOffset.Now, unit); x.Model.Subtext = vals?.Text; x.Model.Icon = vals?.Glyph; x.Model.SortIndexOverride = vals?.Index ?? 0; @@ -106,17 +106,17 @@ public static (Action>, Action (x => { - ListedItem first = x.First(); + StandardStorageItem first = x.First(); var model = x.Model; model.ShowCountTextBelow = true; - model.Text = (first as RecycleBinItem)?.ItemOriginalFolderName; - model.Subtext = (first as RecycleBinItem)?.ItemOriginalFolder; + model.Text = (first as StandardRecycleBinItem)?.OriginalParentFolderName; + model.Subtext = (first as StandardRecycleBinItem)?.OriginalParentFolderPath; }, null), GroupOption.FolderPath => (x => { - ListedItem first = x.First(); + StandardStorageItem first = x.First(); var model = x.Model; model.ShowCountTextBelow = true; var parentPath = PathNormalization.GetParentDir(first.ItemPath.TrimPath()); diff --git a/src/Files.App/Utils/Storage/Collection/SortingHelper.cs b/src/Files.App/Utils/Storage/Collection/SortingHelper.cs index f8af4a99643c..c7f19450e6f7 100644 --- a/src/Files.App/Utils/Storage/Collection/SortingHelper.cs +++ b/src/Files.App/Utils/Storage/Collection/SortingHelper.cs @@ -7,10 +7,10 @@ namespace Files.App.Utils.Storage { public static class SortingHelper { - private static object OrderByNameFunc(ListedItem item) + private static object OrderByNameFunc(StandardStorageItem item) => item.Name; - public static Func? GetSortFunc(SortOption directorySortOption) + public static Func? GetSortFunc(SortOption directorySortOption) { return directorySortOption switch { @@ -22,23 +22,23 @@ private static object OrderByNameFunc(ListedItem item) SortOption.SyncStatus => item => item.SyncStatusString, SortOption.FileTag => item => item.FileTags?.FirstOrDefault(), SortOption.Path => item => item.ItemPath, - SortOption.OriginalFolder => item => (item as RecycleBinItem)?.ItemOriginalFolder, - SortOption.DateDeleted => item => (item as RecycleBinItem)?.ItemDateDeletedReal, + SortOption.OriginalFolder => item => (item as StandardRecycleBinItem)?.OriginalParentFolderPath, + SortOption.DateDeleted => item => (item as StandardRecycleBinItem)?.DateDeleted, _ => null, }; } - public static IEnumerable OrderFileList(IList filesAndFolders, SortOption directorySortOption, SortDirection directorySortDirection, + public static IEnumerable OrderFileList(IList filesAndFolders, SortOption directorySortOption, SortDirection directorySortDirection, bool sortDirectoriesAlongsideFiles, bool sortFilesFirst) { var orderFunc = GetSortFunc(directorySortOption); var naturalStringComparer = NaturalStringComparer.GetForProcessor(); // Function to prioritize folders (if sortFilesFirst is false) or files (if sortFilesFirst is true) - bool PrioritizeFilesOrFolders(ListedItem listedItem) + bool PrioritizeFilesOrFolders(StandardStorageItem listedItem) => (listedItem.PrimaryItemAttribute == StorageItemTypes.File || listedItem.IsShortcut || listedItem.IsArchive) ^ sortFilesFirst; - IOrderedEnumerable ordered; + IOrderedEnumerable ordered; if (directorySortDirection == SortDirection.Ascending) { diff --git a/src/Files.App/Utils/Storage/Enumerators/UniversalStorageEnumerator.cs b/src/Files.App/Utils/Storage/Enumerators/UniversalStorageEnumerator.cs index f4438f851471..e3ba95bd92e2 100644 --- a/src/Files.App/Utils/Storage/Enumerators/UniversalStorageEnumerator.cs +++ b/src/Files.App/Utils/Storage/Enumerators/UniversalStorageEnumerator.cs @@ -11,16 +11,16 @@ namespace Files.App.Utils.Storage { public static class UniversalStorageEnumerator { - public static async Task> ListEntries( + public static async Task> ListEntries( BaseStorageFolder rootFolder, StorageFolderWithPath currentStorageFolder, CancellationToken cancellationToken, int countLimit, - Func, Task> intermediateAction, + Func, Task> intermediateAction, Dictionary defaultIconPairs = null) { var sampler = new IntervalSampler(500); - var tempList = new List(); + var tempList = new List(); uint count = 0; var firstRound = true; @@ -166,7 +166,7 @@ ex is FileNotFoundException || return tempList; } - public static async Task AddFolderAsync( + public static async Task AddFolderAsync( BaseStorageFolder folder, StorageFolderWithPath currentStorageFolder, CancellationToken cancellationToken) @@ -198,7 +198,7 @@ public static async Task AddFolderAsync( } else if (folder is BinStorageFolder binFolder) { - return new RecycleBinItem(folder.FolderRelativeId) + return new StandardRecycleBinItem() { PrimaryItemAttribute = StorageItemTypes.Folder, ItemNameRaw = folder.DisplayName, @@ -212,13 +212,13 @@ public static async Task AddFolderAsync( ItemPath = string.IsNullOrEmpty(folder.Path) ? PathNormalization.Combine(currentStorageFolder.Path, folder.Name) : folder.Path, FileSize = basicProperties.Size.ToSizeString(), FileSizeBytes = (long)basicProperties.Size, - ItemDateDeletedReal = binFolder.DateDeleted, - ItemOriginalPath = binFolder.OriginalPath, + DateDeleted = binFolder.DateDeleted, + OriginalPath = binFolder.OriginalPath, }; } else { - return new ListedItem(folder.FolderRelativeId) + return new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.Folder, ItemNameRaw = folder.DisplayName, @@ -239,7 +239,7 @@ public static async Task AddFolderAsync( return null; } - public static async Task AddFileAsync( + public static async Task AddFileAsync( BaseStorageFile file, StorageFolderWithPath currentStorageFolder, CancellationToken cancellationToken) @@ -298,7 +298,7 @@ public static async Task AddFileAsync( } else if (file is BinStorageFile binFile) { - return new RecycleBinItem(file.FolderRelativeId) + return new StandardRecycleBinItem() { PrimaryItemAttribute = StorageItemTypes.File, FileExtension = itemFileExtension, @@ -313,13 +313,13 @@ public static async Task AddFileAsync( ItemPath = itemPath, FileSize = itemSize, FileSizeBytes = (long)itemSizeBytes, - ItemDateDeletedReal = binFile.DateDeleted, - ItemOriginalPath = binFile.OriginalPath + DateDeleted = binFile.DateDeleted, + OriginalPath = binFile.OriginalPath }; } else { - return new ListedItem(file.FolderRelativeId) + return new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.File, FileExtension = itemFileExtension, diff --git a/src/Files.App/Utils/Storage/Enumerators/Win32StorageEnumerator.cs b/src/Files.App/Utils/Storage/Enumerators/Win32StorageEnumerator.cs index 610af9ab439b..835730696973 100644 --- a/src/Files.App/Utils/Storage/Enumerators/Win32StorageEnumerator.cs +++ b/src/Files.App/Utils/Storage/Enumerators/Win32StorageEnumerator.cs @@ -18,17 +18,17 @@ public static class Win32StorageEnumerator private static readonly string folderTypeTextLocalized = "Folder".GetLocalizedResource(); - public static async Task> ListEntries( + public static async Task> ListEntries( string path, IntPtr hFile, Win32PInvoke.WIN32_FIND_DATA findData, CancellationToken cancellationToken, int countLimit, - Func, Task> intermediateAction + Func, Task> intermediateAction ) { var sampler = new IntervalSampler(500); - var tempList = new List(); + var tempList = new List(); var count = 0; IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService(); @@ -105,13 +105,13 @@ Func, Task> intermediateAction return tempList; } - private static IEnumerable EnumAdsForPath(string itemPath, ListedItem main) + private static IEnumerable EnumAdsForPath(string itemPath, StandardStorageItem main) { foreach (var ads in Win32Helper.GetAlternateStreams(itemPath)) yield return GetAlternateStream(ads, main); } - public static ListedItem GetAlternateStream((string Name, long Size) ads, ListedItem main) + public static StandardStorageItem GetAlternateStream((string Name, long Size) ads, StandardStorageItem main) { string itemType = "File".GetLocalizedResource(); string itemFileExtension = null; @@ -143,7 +143,7 @@ public static ListedItem GetAlternateStream((string Name, long Size) ads, Listed }; } - public static async Task GetFolder( + public static async Task GetFolder( Win32PInvoke.WIN32_FIND_DATA findData, string pathRoot, bool isGitRepo, @@ -202,7 +202,7 @@ CancellationToken cancellationToken } else { - return new ListedItem(null) + return new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.Folder, ItemNameRaw = itemName, @@ -220,7 +220,7 @@ CancellationToken cancellationToken } } - public static async Task GetFile( + public static async Task GetFile( Win32PInvoke.WIN32_FIND_DATA findData, string pathRoot, bool isGitRepo, @@ -381,7 +381,7 @@ CancellationToken cancellationToken } else { - return new ListedItem(null) + return new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.File, FileExtension = itemFileExtension, diff --git a/src/Files.App/Utils/Storage/Helpers/StorageFileExtensions.cs b/src/Files.App/Utils/Storage/Helpers/StorageFileExtensions.cs index c1f541e6f9ac..cddcfa616ea8 100644 --- a/src/Files.App/Utils/Storage/Helpers/StorageFileExtensions.cs +++ b/src/Files.App/Utils/Storage/Helpers/StorageFileExtensions.cs @@ -302,7 +302,7 @@ private static PathBoxItem GetPathItem(string component, string path) var drivesViewModel = Ioc.Default.GetRequiredService(); var drives = drivesViewModel.Drives.Cast(); - var drive = drives.FirstOrDefault(y => y.ItemType is NavigationControlItemType.Drive && y.Path.Contains(component, StringComparison.OrdinalIgnoreCase)); + var drive = drives.FirstOrDefault(y => y.ItemType is SidebarItemKind.Drive && y.Path.Contains(component, StringComparison.OrdinalIgnoreCase)); title = drive is not null ? drive.Text : string.Format("DriveWithLetter".GetLocalizedResource(), component); } else diff --git a/src/Files.App/Utils/Storage/Search/FolderSearch.cs b/src/Files.App/Utils/Storage/Search/FolderSearch.cs index 82087b901a54..a9d1c960d7a5 100644 --- a/src/Files.App/Utils/Storage/Search/FolderSearch.cs +++ b/src/Files.App/Utils/Storage/Search/FolderSearch.cs @@ -68,7 +68,7 @@ public string AQSQuery } } - public Task SearchAsync(IList results, CancellationToken token) + public Task SearchAsync(IList results, CancellationToken token) { try { @@ -93,7 +93,7 @@ public Task SearchAsync(IList results, CancellationToken token) return Task.CompletedTask; } - private async Task AddItemsForHomeAsync(IList results, CancellationToken token) + private async Task AddItemsForHomeAsync(IList results, CancellationToken token) { if (AQSQuery.StartsWith("tag:", StringComparison.Ordinal)) { @@ -108,9 +108,9 @@ private async Task AddItemsForHomeAsync(IList results, CancellationT } } - public async Task> SearchAsync() + public async Task> SearchAsync() { - ObservableCollection results = []; + ObservableCollection results = []; try { var token = CancellationToken.None; @@ -135,7 +135,7 @@ public async Task> SearchAsync() return results; } - private async Task SearchAsync(BaseStorageFolder folder, IList results, CancellationToken token) + private async Task SearchAsync(BaseStorageFolder folder, IList results, CancellationToken token) { //var sampler = new IntervalSampler(500); uint index = 0; @@ -176,7 +176,7 @@ private async Task SearchAsync(BaseStorageFolder folder, IList resul } } - private async Task AddItemsForLibraryAsync(LibraryLocationItem library, IList results, CancellationToken token) + private async Task AddItemsForLibraryAsync(LibraryLocationItem library, IList results, CancellationToken token) { foreach (var folder in library.Folders) { @@ -184,7 +184,7 @@ private async Task AddItemsForLibraryAsync(LibraryLocationItem library, IList
  • results, CancellationToken token) + private async Task SearchTagsAsync(string folder, IList results, CancellationToken token) { //var sampler = new IntervalSampler(500); var tags = AQSQuery.Substring("tag:".Length)?.Split(',').Where(t => !string.IsNullOrWhiteSpace(t)) @@ -257,7 +257,7 @@ private async Task SearchTagsAsync(string folder, IList results, Can } } - private async Task AddItemsAsync(string folder, IList results, CancellationToken token) + private async Task AddItemsAsync(string folder, IList results, CancellationToken token) { if (AQSQuery.StartsWith("tag:", StringComparison.Ordinal)) { @@ -281,7 +281,7 @@ private async Task AddItemsAsync(string folder, IList results, Cance } } - private async Task SearchWithWin32Async(string folder, bool hiddenOnly, uint maxItemCount, IList results, CancellationToken token) + private async Task SearchWithWin32Async(string folder, bool hiddenOnly, uint maxItemCount, IList results, CancellationToken token) { //var sampler = new IntervalSampler(500); (IntPtr hFile, WIN32_FIND_DATA findData) = await Task.Run(() => @@ -341,9 +341,9 @@ await Task.Run(() => } } - private ListedItem GetListedItemAsync(string itemPath, WIN32_FIND_DATA findData) + private StandardStorageItem GetListedItemAsync(string itemPath, WIN32_FIND_DATA findData) { - ListedItem listedItem = null; + StandardStorageItem listedItem = null; var isHidden = ((FileAttributes)findData.dwFileAttributes & FileAttributes.Hidden) == FileAttributes.Hidden; var isFolder = ((FileAttributes)findData.dwFileAttributes & FileAttributes.Directory) == FileAttributes.Directory; if (!isFolder) @@ -356,7 +356,7 @@ private ListedItem GetListedItemAsync(string itemPath, WIN32_FIND_DATA findData) itemType = itemFileExtension.Trim('.') + " " + itemType; } - listedItem = new ListedItem(null) + listedItem = new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.File, ItemNameRaw = findData.cFileName, @@ -372,7 +372,7 @@ private ListedItem GetListedItemAsync(string itemPath, WIN32_FIND_DATA findData) { if (findData.cFileName != "." && findData.cFileName != "..") { - listedItem = new ListedItem(null) + listedItem = new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.Folder, ItemNameRaw = findData.cFileName, @@ -400,16 +400,16 @@ private ListedItem GetListedItemAsync(string itemPath, WIN32_FIND_DATA findData) return listedItem; } - private async Task GetListedItemAsync(IStorageItem item) + private async Task GetListedItemAsync(IStorageItem item) { - ListedItem listedItem = null; + StandardStorageItem listedItem = null; if (item.IsOfType(StorageItemTypes.Folder)) { var folder = item.AsBaseStorageFolder(); var props = await folder.GetBasicPropertiesAsync(); if (folder is BinStorageFolder binFolder) { - listedItem = new RecycleBinItem(null) + listedItem = new StandardRecycleBinItem() { PrimaryItemAttribute = StorageItemTypes.Folder, ItemNameRaw = folder.DisplayName, @@ -420,13 +420,13 @@ private async Task GetListedItemAsync(IStorageItem item) Opacity = 1, FileSize = props.Size.ToSizeString(), FileSizeBytes = (long)props.Size, - ItemDateDeletedReal = binFolder.DateDeleted, - ItemOriginalPath = binFolder.OriginalPath + DateDeleted = binFolder.DateDeleted, + OriginalPath = binFolder.OriginalPath }; } else { - listedItem = new ListedItem(null) + listedItem = new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.Folder, ItemNameRaw = folder.DisplayName, @@ -454,7 +454,7 @@ private async Task GetListedItemAsync(IStorageItem item) if (file is BinStorageFile binFile) { - listedItem = new RecycleBinItem(null) + listedItem = new StandardRecycleBinItem() { PrimaryItemAttribute = StorageItemTypes.File, ItemNameRaw = file.Name, @@ -468,13 +468,13 @@ private async Task GetListedItemAsync(IStorageItem item) ItemType = itemType, NeedsPlaceholderGlyph = false, Opacity = 1, - ItemDateDeletedReal = binFile.DateDeleted, - ItemOriginalPath = binFile.OriginalPath + DateDeleted = binFile.DateDeleted, + OriginalPath = binFile.OriginalPath }; } else { - listedItem = new ListedItem(null) + listedItem = new StandardStorageItem() { PrimaryItemAttribute = StorageItemTypes.File, ItemNameRaw = file.Name, diff --git a/src/Files.App/Utils/Storage/StorageItems/FtpStorageFile.cs b/src/Files.App/Utils/Storage/StorageItems/FtpStorageFile.cs index 70216b8cf1e4..db51fcc9b8e4 100644 --- a/src/Files.App/Utils/Storage/StorageItems/FtpStorageFile.cs +++ b/src/Files.App/Utils/Storage/StorageItems/FtpStorageFile.cs @@ -299,7 +299,7 @@ private sealed class FtpFileBasicProperties : BaseBasicProperties public override DateTimeOffset DateCreated { get; } public override DateTimeOffset DateModified { get; } - public FtpFileBasicProperties(FtpItem item) + public FtpFileBasicProperties(StandardFtpItem item) { Size = (ulong)item.FileSizeBytes; DateCreated = item.ItemDateCreatedReal; diff --git a/src/Files.App/Utils/Storage/StorageItems/VirtualStorageItem.cs b/src/Files.App/Utils/Storage/StorageItems/VirtualStorageItem.cs index 62f749188e6b..a084ef55bca0 100644 --- a/src/Files.App/Utils/Storage/StorageItems/VirtualStorageItem.cs +++ b/src/Files.App/Utils/Storage/StorageItems/VirtualStorageItem.cs @@ -29,7 +29,7 @@ public sealed class VirtualStorageItem : IStorageItem private VirtualStorageItem() { } - public static VirtualStorageItem FromListedItem(ListedItem item) + public static VirtualStorageItem FromListedItem(StandardStorageItem item) { return new VirtualStorageItem() { diff --git a/src/Files.App/ViewModels/Dialogs/ReorderSidebarItemsDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/ReorderSidebarItemsDialogViewModel.cs index d8df0b682af3..2c37d3f9d778 100644 --- a/src/Files.App/ViewModels/Dialogs/ReorderSidebarItemsDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/ReorderSidebarItemsDialogViewModel.cs @@ -13,7 +13,7 @@ public sealed class ReorderSidebarItemsDialogViewModel : ObservableObject public ICommand PrimaryButtonCommand { get; private set; } public ObservableCollection SidebarPinnedFolderItems = new(App.QuickAccessManager.Model._PinnedFolderItems - .Where(x => x is LocationItem loc && loc.Section is SectionType.Pinned && !loc.IsHeader) + .Where(x => x is LocationItem loc && loc.Section is SidebarSectionKind.Pinned && !loc.IsHeader) .Cast()); public ReorderSidebarItemsDialogViewModel() diff --git a/src/Files.App/ViewModels/Layouts/BaseLayoutViewModel.cs b/src/Files.App/ViewModels/Layouts/BaseLayoutViewModel.cs index 9a6a9995b932..edc913be4891 100644 --- a/src/Files.App/ViewModels/Layouts/BaseLayoutViewModel.cs +++ b/src/Files.App/ViewModels/Layouts/BaseLayoutViewModel.cs @@ -54,7 +54,7 @@ private async Task ItemPointerPressedAsync(PointerRoutedEventArgs e) { // If a folder item was clicked, disable middle mouse click to scroll to cancel the mouse scrolling state and re-enable it if (e.GetCurrentPoint(null).Properties.IsMiddleButtonPressed && - e.OriginalSource is FrameworkElement { DataContext: ListedItem Item } && + e.OriginalSource is FrameworkElement { DataContext: StandardStorageItem Item } && Item.PrimaryItemAttribute == StorageItemTypes.Folder) { _associatedInstance.SlimContentPage.IsMiddleClickToScrollEnabled = false; diff --git a/src/Files.App/ViewModels/Properties/BasePropertiesPage.cs b/src/Files.App/ViewModels/Properties/BasePropertiesPage.cs index 05b144b85d86..3c916accccdc 100644 --- a/src/Files.App/ViewModels/Properties/BasePropertiesPage.cs +++ b/src/Files.App/ViewModels/Properties/BasePropertiesPage.cs @@ -54,7 +54,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e) }); } // Storage objects (multi-selected) - else if (np.Parameter is List items) + else if (np.Parameter is List items) { // Selection only contains files if (items.All(item => item.PrimaryItemAttribute == StorageItemTypes.File || item.IsArchive)) @@ -70,7 +70,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e) BaseProperties = new CombinedProperties(ViewModel, np.CancellationTokenSource, DispatcherQueue, items, AppInstance); } // A storage object - else if (np.Parameter is ListedItem item) + else if (np.Parameter is StandardStorageItem item) { // File or Archive if (item.PrimaryItemAttribute == StorageItemTypes.File || item.IsArchive) diff --git a/src/Files.App/ViewModels/Properties/CompatibilityViewModel.cs b/src/Files.App/ViewModels/Properties/CompatibilityViewModel.cs index c5ed13885e91..3d18693a6068 100644 --- a/src/Files.App/ViewModels/Properties/CompatibilityViewModel.cs +++ b/src/Files.App/ViewModels/Properties/CompatibilityViewModel.cs @@ -79,7 +79,7 @@ public string SelectedHighDpiOverride // Constructor - public CompatibilityViewModel(ListedItem item) + public CompatibilityViewModel(StandardStorageItem item) { ItemPath = item is ShortcutItem shortcutItem ? shortcutItem.TargetPath : item.ItemPath; diff --git a/src/Files.App/ViewModels/Properties/CustomizationViewModel.cs b/src/Files.App/ViewModels/Properties/CustomizationViewModel.cs index c0b704129c87..e0c7fb1c8e9a 100644 --- a/src/Files.App/ViewModels/Properties/CustomizationViewModel.cs +++ b/src/Files.App/ViewModels/Properties/CustomizationViewModel.cs @@ -49,7 +49,7 @@ public IconFileInfo? SelectedDllIcon public CustomizationViewModel(IShellPage appInstance, BaseProperties baseProperties, AppWindow appWindow) { - ListedItem item; + StandardStorageItem item; if (baseProperties is FileProperties fileProperties) item = fileProperties.Item; diff --git a/src/Files.App/ViewModels/Properties/HashesViewModel.cs b/src/Files.App/ViewModels/Properties/HashesViewModel.cs index 157edfec52b2..bfa0ae8e5920 100644 --- a/src/Files.App/ViewModels/Properties/HashesViewModel.cs +++ b/src/Files.App/ViewModels/Properties/HashesViewModel.cs @@ -24,11 +24,11 @@ public HashInfoItem SelectedItem public ICommand ToggleIsEnabledCommand { get; private set; } - private ListedItem _item; + private StandardStorageItem _item; private CancellationTokenSource _cancellationTokenSource; - public HashesViewModel(ListedItem item) + public HashesViewModel(StandardStorageItem item) { ToggleIsEnabledCommand = new RelayCommand(ToggleIsEnabled); diff --git a/src/Files.App/ViewModels/Properties/Items/CombinedFileProperties.cs b/src/Files.App/ViewModels/Properties/Items/CombinedFileProperties.cs index 836d7ef0038d..b649a6643641 100644 --- a/src/Files.App/ViewModels/Properties/Items/CombinedFileProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/CombinedFileProperties.cs @@ -11,7 +11,7 @@ public CombinedFileProperties( SelectedItemsPropertiesViewModel viewModel, CancellationTokenSource tokenSource, DispatcherQueue coreDispatcher, - List listedItems, + List listedItems, IShellPage instance) : base(viewModel, tokenSource, coreDispatcher, listedItems, instance) { } diff --git a/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs b/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs index 7dc2590be7a5..607b150d698d 100644 --- a/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs @@ -15,13 +15,13 @@ namespace Files.App.ViewModels.Properties { internal class CombinedProperties : BaseProperties { - public List List { get; } + public List List { get; } public CombinedProperties( SelectedItemsPropertiesViewModel viewModel, CancellationTokenSource tokenSource, DispatcherQueue coreDispatcher, - List listedItems, + List listedItems, IShellPage instance) { ViewModel = viewModel; @@ -48,7 +48,7 @@ public sealed override void GetBaseProperties() ViewModel.ItemType = "PropertiesDriveItemTypeDifferent".GetLocalizedResource(); } - var itemsPath = List.Select(Item => (Item as RecycleBinItem)?.ItemOriginalFolder ?? + var itemsPath = List.Select(Item => (Item as StandardRecycleBinItem)?.OriginalParentFolderPath ?? (Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath)); if (itemsPath.Distinct().Count() == 1) diff --git a/src/Files.App/ViewModels/Properties/Items/FileProperties.cs b/src/Files.App/ViewModels/Properties/Items/FileProperties.cs index 83d3cdd31800..1f200fadfb1b 100644 --- a/src/Files.App/ViewModels/Properties/Items/FileProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/FileProperties.cs @@ -9,13 +9,13 @@ namespace Files.App.ViewModels.Properties { public sealed class FileProperties : BaseProperties, IFileProperties { - public ListedItem Item { get; } + public StandardStorageItem Item { get; } public FileProperties( SelectedItemsPropertiesViewModel viewModel, CancellationTokenSource tokenSource, DispatcherQueue coreDispatcher, - ListedItem item, + StandardStorageItem item, IShellPage instance) { ViewModel = viewModel; @@ -37,7 +37,7 @@ public override void GetBaseProperties() ViewModel.ItemName = Item.Name; ViewModel.OriginalItemName = Item.Name; ViewModel.ItemType = Item.ItemType; - ViewModel.ItemLocation = (Item as RecycleBinItem)?.ItemOriginalFolder ?? + ViewModel.ItemLocation = (Item as StandardRecycleBinItem)?.OriginalParentFolderPath ?? (Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath); ViewModel.ItemModifiedTimestampReal = Item.ItemDateModifiedReal; ViewModel.ItemCreatedTimestampReal = Item.ItemDateCreatedReal; diff --git a/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs b/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs index 6de0ad95b165..388410a4d3fd 100644 --- a/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs @@ -10,13 +10,13 @@ namespace Files.App.ViewModels.Properties { internal sealed class FolderProperties : BaseProperties { - public ListedItem Item { get; } + public StandardStorageItem Item { get; } public FolderProperties( SelectedItemsPropertiesViewModel viewModel, CancellationTokenSource tokenSource, DispatcherQueue coreDispatcher, - ListedItem item, + StandardStorageItem item, IShellPage instance) { ViewModel = viewModel; @@ -37,14 +37,14 @@ public override void GetBaseProperties() ViewModel.ItemName = Item.Name; ViewModel.OriginalItemName = Item.Name; ViewModel.ItemType = Item.ItemType; - ViewModel.ItemLocation = (Item as RecycleBinItem)?.ItemOriginalFolder ?? + ViewModel.ItemLocation = (Item as StandardRecycleBinItem)?.OriginalParentFolderPath ?? (Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath); ViewModel.ItemModifiedTimestampReal = Item.ItemDateModifiedReal; ViewModel.ItemCreatedTimestampReal = Item.ItemDateCreatedReal; ViewModel.LoadCustomIcon = Item.LoadCustomIcon; ViewModel.CustomIconSource = Item.CustomIconSource; ViewModel.LoadFileIcon = Item.LoadFileIcon; - ViewModel.ContainsFilesOrFolders = Item.ContainsFilesOrFolders; + ViewModel.ContainsFilesOrFolders = Item.HasChildren; if (Item.IsShortcut) { diff --git a/src/Files.App/ViewModels/Properties/SecurityAdvancedViewModel.cs b/src/Files.App/ViewModels/Properties/SecurityAdvancedViewModel.cs index 6233b591266d..5ba811400a8c 100644 --- a/src/Files.App/ViewModels/Properties/SecurityAdvancedViewModel.cs +++ b/src/Files.App/ViewModels/Properties/SecurityAdvancedViewModel.cs @@ -128,7 +128,7 @@ public SecurityAdvancedViewModel(PropertiesPageNavigationParameter parameter) switch (parameter.Parameter) { - case ListedItem listedItem: + case StandardStorageItem listedItem: _path = listedItem.ItemPath; _isFolder = listedItem.PrimaryItemAttribute == StorageItemTypes.Folder && !listedItem.IsShortcut; break; @@ -137,7 +137,7 @@ public SecurityAdvancedViewModel(PropertiesPageNavigationParameter parameter) _isFolder = true; break; default: - var defaultlistedItem = (ListedItem)parameter.Parameter; + var defaultlistedItem = (StandardStorageItem)parameter.Parameter; _path = defaultlistedItem.ItemPath; _isFolder = defaultlistedItem.PrimaryItemAttribute == StorageItemTypes.Folder && !defaultlistedItem.IsShortcut; break; diff --git a/src/Files.App/ViewModels/Properties/SecurityViewModel.cs b/src/Files.App/ViewModels/Properties/SecurityViewModel.cs index 4e162e96b6a7..6e88f1298efd 100644 --- a/src/Files.App/ViewModels/Properties/SecurityViewModel.cs +++ b/src/Files.App/ViewModels/Properties/SecurityViewModel.cs @@ -74,7 +74,7 @@ public SecurityViewModel(PropertiesPageNavigationParameter parameter) switch (parameter.Parameter) { - case ListedItem listedItem: + case StandardStorageItem listedItem: _path = listedItem.ItemPath; _isFolder = listedItem.PrimaryItemAttribute == StorageItemTypes.Folder && !listedItem.IsShortcut; break; @@ -83,7 +83,7 @@ public SecurityViewModel(PropertiesPageNavigationParameter parameter) _isFolder = true; break; default: - var defaultlistedItem = (ListedItem)parameter.Parameter; + var defaultlistedItem = (StandardStorageItem)parameter.Parameter; _path = defaultlistedItem.ItemPath; _isFolder = defaultlistedItem.PrimaryItemAttribute == StorageItemTypes.Folder && !defaultlistedItem.IsShortcut; break; diff --git a/src/Files.App/ViewModels/UserControls/AddressToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/AddressToolbarViewModel.cs index 6f31808bdf0d..a652d8b893cc 100644 --- a/src/Files.App/ViewModels/UserControls/AddressToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/AddressToolbarViewModel.cs @@ -998,9 +998,9 @@ public bool HasItem set => SetProperty(ref hasItem, value); } - private List? selectedItems; + private List? selectedItems; - public List SelectedItems + public List SelectedItems { get => selectedItems; set diff --git a/src/Files.App/ViewModels/UserControls/InfoPaneViewModel.cs b/src/Files.App/ViewModels/UserControls/InfoPaneViewModel.cs index b4a5c62c88dd..ffce155d50dc 100644 --- a/src/Files.App/ViewModels/UserControls/InfoPaneViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/InfoPaneViewModel.cs @@ -36,8 +36,8 @@ public bool IsEnabled /// Current selected item in the file list. /// TODO see about removing this and accessing it from the page context instead /// - private ListedItem? selectedItem; - public ListedItem? SelectedItem + private StandardStorageItem? selectedItem; + public StandardStorageItem? SelectedItem { get => selectedItem; set @@ -124,7 +124,7 @@ private async void ContentPageContext_PropertyChanged(object? sender, PropertyCh case nameof(IContentPageContext.Folder): case nameof(IContentPageContext.SelectedItem): - ListedItem? tempSelectedItem = null; + StandardStorageItem? tempSelectedItem = null; if (contentPageContext.SelectedItems.Count == 1) tempSelectedItem = contentPageContext.SelectedItems.First(); @@ -180,7 +180,7 @@ private async Task LoadPreviewControlAsync(CancellationToken token, bool downloa PreviewPaneState = PreviewPaneStates.PreviewAndDetailsAvailable; } - private async Task GetBuiltInPreviewControlAsync(ListedItem item, bool downloadItem) + private async Task GetBuiltInPreviewControlAsync(StandardStorageItem item, bool downloadItem) { ShowCloudItemButton = false; @@ -449,9 +449,9 @@ private async Task LoadBasicPreviewAsync() private void SelectedItem_PropertyChanged(object? sender, PropertyChangedEventArgs e) { - if (e.PropertyName is nameof(ListedItem.HasTags)) + if (e.PropertyName is nameof(StandardStorageItem.HasTags)) OnPropertyChanged(nameof(LoadTagsList)); - else if (e.PropertyName is nameof(ListedItem.FileTagsUI)) + else if (e.PropertyName is nameof(StandardStorageItem.FileTagsUI)) UpdateTagsItems(); } @@ -461,7 +461,7 @@ private void UpdateTagsItems() SelectedItem?.FileTagsUI?.ForEach(tag => Items.Add(new TagItem(tag))); - Items.Add(new FlyoutItem(new Files.App.UserControls.Menus.FileTagsContextMenu(new List() { SelectedItem }))); + Items.Add(new FlyoutItem(new Files.App.UserControls.Menus.FileTagsContextMenu(new List() { SelectedItem }))); } public void Dispose() diff --git a/src/Files.App/ViewModels/UserControls/Previews/ArchivePreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/ArchivePreviewViewModel.cs index 2855d345b3c3..eb9ae22c24c4 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/ArchivePreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/ArchivePreviewViewModel.cs @@ -9,7 +9,7 @@ namespace Files.App.ViewModels.Previews { public sealed class ArchivePreviewViewModel : BasePreviewModel { - public ArchivePreviewViewModel(ListedItem item) + public ArchivePreviewViewModel(StandardStorageItem item) : base(item) { } diff --git a/src/Files.App/ViewModels/UserControls/Previews/BasePreviewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/BasePreviewModel.cs index fd4f5009d672..23068d31137d 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/BasePreviewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/BasePreviewModel.cs @@ -12,7 +12,7 @@ public abstract class BasePreviewModel : ObservableObject { private readonly IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService(); - public ListedItem Item { get; } + public StandardStorageItem Item { get; } private BitmapImage fileImage; public BitmapImage FileImage @@ -28,12 +28,12 @@ public BitmapImage FileImage /// public CancellationTokenSource LoadCancelledTokenSource { get; } = new CancellationTokenSource(); - public BasePreviewModel(ListedItem item) : base() + public BasePreviewModel(StandardStorageItem item) : base() => Item = item; public delegate void LoadedEventHandler(object sender, EventArgs e); - public static Task LoadDetailsOnlyAsync(ListedItem item, List details = null) + public static Task LoadDetailsOnlyAsync(StandardStorageItem item, List details = null) { var temp = new DetailsOnlyPreviewModel(item) { DetailsFromPreview = details }; return temp.LoadAsync(); @@ -131,7 +131,7 @@ private async Task> GetSystemFilePropertiesAsync() private sealed class DetailsOnlyPreviewModel : BasePreviewModel { - public DetailsOnlyPreviewModel(ListedItem item) : base(item) { } + public DetailsOnlyPreviewModel(StandardStorageItem item) : base(item) { } public override Task> LoadPreviewAndDetailsAsync() => Task.FromResult(DetailsFromPreview); } diff --git a/src/Files.App/ViewModels/UserControls/Previews/BasicPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/BasicPreviewViewModel.cs index 43586005f1d3..72c8208e070b 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/BasicPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/BasicPreviewViewModel.cs @@ -5,6 +5,6 @@ namespace Files.App.ViewModels.Previews { public sealed class BasicPreviewViewModel : BasePreviewModel { - public BasicPreviewViewModel(ListedItem item) : base(item) { } + public BasicPreviewViewModel(StandardStorageItem item) : base(item) { } } } diff --git a/src/Files.App/ViewModels/UserControls/Previews/CodePreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/CodePreviewViewModel.cs index f0fe0cde10b6..ed8f4d0abe0a 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/CodePreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/CodePreviewViewModel.cs @@ -25,7 +25,7 @@ public ILanguage CodeLanguage private set => SetProperty(ref codeLanguage, value); } - public CodePreviewViewModel(ListedItem item) + public CodePreviewViewModel(StandardStorageItem item) : base(item) { } diff --git a/src/Files.App/ViewModels/UserControls/Previews/FolderPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/FolderPreviewViewModel.cs index f826df056e35..bd92bb1c7190 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/FolderPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/FolderPreviewViewModel.cs @@ -12,13 +12,13 @@ public sealed class FolderPreviewViewModel { private static readonly IDateTimeFormatter dateTimeFormatter = Ioc.Default.GetRequiredService(); - public ListedItem Item { get; } + public StandardStorageItem Item { get; } public BitmapImage Thumbnail { get; set; } = new(); private BaseStorageFolder Folder { get; set; } - public FolderPreviewViewModel(ListedItem item) + public FolderPreviewViewModel(StandardStorageItem item) => Item = item; public Task LoadAsync() diff --git a/src/Files.App/ViewModels/UserControls/Previews/HtmlPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/HtmlPreviewViewModel.cs index 4edbb7d8343e..2cffe1c440d9 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/HtmlPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/HtmlPreviewViewModel.cs @@ -7,7 +7,7 @@ namespace Files.App.ViewModels.Previews { public sealed class HtmlPreviewViewModel : BasePreviewModel { - public HtmlPreviewViewModel(ListedItem item) + public HtmlPreviewViewModel(StandardStorageItem item) : base(item) { } diff --git a/src/Files.App/ViewModels/UserControls/Previews/ImagePreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/ImagePreviewViewModel.cs index a7a1bb8f6eae..ba288c5fe712 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/ImagePreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/ImagePreviewViewModel.cs @@ -19,7 +19,7 @@ public ImageSource ImageSource private set => SetProperty(ref imageSource, value); } - public ImagePreviewViewModel(ListedItem item) + public ImagePreviewViewModel(StandardStorageItem item) : base(item) { } diff --git a/src/Files.App/ViewModels/UserControls/Previews/MarkdownPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/MarkdownPreviewViewModel.cs index 75f70c4a25d4..b41b86f3e9d9 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/MarkdownPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/MarkdownPreviewViewModel.cs @@ -14,7 +14,7 @@ public string TextValue private set => SetProperty(ref textValue, value); } - public MarkdownPreviewViewModel(ListedItem item) + public MarkdownPreviewViewModel(StandardStorageItem item) : base(item) { } diff --git a/src/Files.App/ViewModels/UserControls/Previews/MediaPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/MediaPreviewViewModel.cs index 970ce5a1ff69..68bed6a4dc7c 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/MediaPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/MediaPreviewViewModel.cs @@ -18,7 +18,7 @@ public MediaSource Source private set => SetProperty(ref source, value); } - public MediaPreviewViewModel(ListedItem item) : base(item) { } + public MediaPreviewViewModel(StandardStorageItem item) : base(item) { } public void TogglePlayback() => TogglePlaybackRequested?.Invoke(this, null); diff --git a/src/Files.App/ViewModels/UserControls/Previews/PDFPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/PDFPreviewViewModel.cs index c2b0f8c86c48..52f11f7f32e6 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/PDFPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/PDFPreviewViewModel.cs @@ -30,7 +30,7 @@ public int PageCount public ObservableCollection Pages { get; } = []; - public PDFPreviewViewModel(ListedItem item) + public PDFPreviewViewModel(StandardStorageItem item) : base(item) { } diff --git a/src/Files.App/ViewModels/UserControls/Previews/RichTextPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/RichTextPreviewViewModel.cs index fda43bedea55..b51ade453d7b 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/RichTextPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/RichTextPreviewViewModel.cs @@ -10,7 +10,7 @@ public sealed class RichTextPreviewViewModel : BasePreviewModel { public IRandomAccessStream Stream { get; set; } - public RichTextPreviewViewModel(ListedItem item) : base(item) { } + public RichTextPreviewViewModel(StandardStorageItem item) : base(item) { } public static bool ContainsExtension(string extension) => extension is ".rtf"; diff --git a/src/Files.App/ViewModels/UserControls/Previews/ShellPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/ShellPreviewViewModel.cs index 4a932c1de4df..965b626a5661 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/ShellPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/ShellPreviewViewModel.cs @@ -20,7 +20,7 @@ namespace Files.App.ViewModels.Previews { public sealed class ShellPreviewViewModel : BasePreviewModel { - public ShellPreviewViewModel(ListedItem item) + public ShellPreviewViewModel(StandardStorageItem item) : base(item) { } diff --git a/src/Files.App/ViewModels/UserControls/Previews/ShortcutPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/ShortcutPreviewViewModel.cs index 46f6f964fe9b..1e76fbc8a146 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/ShortcutPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/ShortcutPreviewViewModel.cs @@ -7,7 +7,7 @@ namespace Files.App.ViewModels.Previews { internal sealed class ShortcutPreviewViewModel : BasePreviewModel { - public ShortcutPreviewViewModel(ListedItem item) : base(item) { } + public ShortcutPreviewViewModel(StandardStorageItem item) : base(item) { } public async override Task> LoadPreviewAndDetailsAsync() { diff --git a/src/Files.App/ViewModels/UserControls/Previews/TextPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/TextPreviewViewModel.cs index 1081792c7d8f..b89f4109b5d8 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/TextPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/TextPreviewViewModel.cs @@ -15,7 +15,7 @@ public string TextValue private set => SetProperty(ref textValue, value); } - public TextPreviewViewModel(ListedItem item) + public TextPreviewViewModel(StandardStorageItem item) : base(item) { } @@ -44,7 +44,7 @@ public async override Task> LoadPreviewAndDetailsAsync() return details; } - public static async Task TryLoadAsTextAsync(ListedItem item) + public static async Task TryLoadAsTextAsync(StandardStorageItem item) { string extension = item.FileExtension?.ToLowerInvariant(); if (ExcludedExtensions(extension) || item.FileSizeBytes is 0 or > Constants.PreviewPane.TryLoadAsTextSizeLimit) diff --git a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs index e66ed7e646c5..3ae452ee053c 100644 --- a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs @@ -43,10 +43,10 @@ public IFilesystemHelpers FilesystemHelpers => PaneHolder?.FilesystemHelpers; private Microsoft.UI.Dispatching.DispatcherQueue dispatcherQueue; - private INavigationControlItem rightClickedItem; + private ISidebarItem rightClickedItem; public object SidebarItems => sidebarItems; - public BulkConcurrentObservableCollection sidebarItems { get; init; } + public BulkConcurrentObservableCollection sidebarItems { get; init; } public PinnedFoldersManager SidebarPinnedModel => App.QuickAccessManager.Model; public IQuickAccessService QuickAccessService { get; } = Ioc.Default.GetRequiredService(); @@ -70,18 +70,18 @@ public SidebarDisplayMode SidebarDisplayMode public delegate void SelectedTagChangedEventHandler(object sender, SelectedTagChangedEventArgs e); public static event SelectedTagChangedEventHandler? SelectedTagChanged; - public static event EventHandler? RightClickedItemChanged; + public static event EventHandler? RightClickedItemChanged; - private readonly SectionType[] SectionOrder = + private readonly SidebarSectionKind[] SectionOrder = [ - SectionType.Home, - SectionType.Pinned, - SectionType.Library, - SectionType.Drives, - SectionType.CloudDrives, - SectionType.Network, - SectionType.WSL, - SectionType.FileTag + SidebarSectionKind.Home, + SidebarSectionKind.Pinned, + SidebarSectionKind.Library, + SidebarSectionKind.Drives, + SidebarSectionKind.CloudDrives, + SidebarSectionKind.Network, + SidebarSectionKind.WSL, + SidebarSectionKind.FileTag ]; public bool IsSidebarCompactSize @@ -98,7 +98,7 @@ public void UpdateSidebarSelectedItemFromArgs(string? arg) { var value = arg; - INavigationControlItem? item = null; + ISidebarItem? item = null; var filteredItems = sidebarItems .Where(x => !string.IsNullOrWhiteSpace(x.Path)) .Concat(sidebarItems.Where(x => (x as LocationItem)?.ChildItems is not null).SelectMany(x => ((LocationItem)x).ChildItems).Where(x => !string.IsNullOrWhiteSpace(x.Path))) @@ -220,9 +220,9 @@ public bool ShowFileTagsSection } } - private INavigationControlItem selectedSidebarItem; + private ISidebarItem selectedSidebarItem; - public INavigationControlItem SidebarSelectedItem + public ISidebarItem SidebarSelectedItem { get => selectedSidebarItem; set => SetProperty(ref selectedSidebarItem, value); @@ -237,19 +237,19 @@ public SidebarViewModel() UserSettingsService.OnSettingChangedEvent += UserSettingsService_OnSettingChangedEvent; CreateItemHomeAsync(); - Manager_DataChanged(SectionType.Pinned, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); - Manager_DataChanged(SectionType.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); - Manager_DataChanged(SectionType.Drives, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); - Manager_DataChanged(SectionType.CloudDrives, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); - Manager_DataChanged(SectionType.Network, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); - Manager_DataChanged(SectionType.WSL, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); - Manager_DataChanged(SectionType.FileTag, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + Manager_DataChanged(SidebarSectionKind.Pinned, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + Manager_DataChanged(SidebarSectionKind.Library, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + Manager_DataChanged(SidebarSectionKind.Drives, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + Manager_DataChanged(SidebarSectionKind.CloudDrives, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + Manager_DataChanged(SidebarSectionKind.Network, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + Manager_DataChanged(SidebarSectionKind.WSL, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); + Manager_DataChanged(SidebarSectionKind.FileTag, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); App.QuickAccessManager.Model.DataChanged += Manager_DataChanged; App.LibraryManager.DataChanged += Manager_DataChanged; - drivesViewModel.Drives.CollectionChanged += (x, args) => Manager_DataChanged(SectionType.Drives, args); + drivesViewModel.Drives.CollectionChanged += (x, args) => Manager_DataChanged(SidebarSectionKind.Drives, args); CloudDrivesManager.DataChanged += Manager_DataChanged; - NetworkService.Computers.CollectionChanged += (x, args) => Manager_DataChanged(SectionType.Network, args); + NetworkService.Computers.CollectionChanged += (x, args) => Manager_DataChanged(SidebarSectionKind.Network, args); WSLDistroManager.DataChanged += Manager_DataChanged; App.FileTagsManager.DataChanged += Manager_DataChanged; SidebarDisplayMode = UserSettingsService.AppearanceSettingsService.IsSidebarOpen ? SidebarDisplayMode.Expanded : SidebarDisplayMode.Compact; @@ -268,31 +268,31 @@ public SidebarViewModel() private Task CreateItemHomeAsync() { - return CreateSectionAsync(SectionType.Home); + return CreateSectionAsync(SidebarSectionKind.Home); } private async void Manager_DataChanged(object sender, NotifyCollectionChangedEventArgs e) { await dispatcherQueue.EnqueueOrInvokeAsync(async () => { - var sectionType = (SectionType)sender; + var sectionType = (SidebarSectionKind)sender; var section = await GetOrCreateSectionAsync(sectionType); - Func> getElements = () => sectionType switch + Func> getElements = () => sectionType switch { - SectionType.Pinned => App.QuickAccessManager.Model.PinnedFolderItems, - SectionType.CloudDrives => CloudDrivesManager.Drives, - SectionType.Drives => drivesViewModel.Drives.Cast().ToList().AsReadOnly(), - SectionType.Network => NetworkService.Computers.Cast().ToList().AsReadOnly(), - SectionType.WSL => WSLDistroManager.Distros, - SectionType.Library => App.LibraryManager.Libraries, - SectionType.FileTag => App.FileTagsManager.FileTags, + SidebarSectionKind.Pinned => App.QuickAccessManager.Model.PinnedFolderItems, + SidebarSectionKind.CloudDrives => CloudDrivesManager.Drives, + SidebarSectionKind.Drives => drivesViewModel.Drives.Cast().ToList().AsReadOnly(), + SidebarSectionKind.Network => NetworkService.Computers.Cast().ToList().AsReadOnly(), + SidebarSectionKind.WSL => WSLDistroManager.Distros, + SidebarSectionKind.Library => App.LibraryManager.Libraries, + SidebarSectionKind.FileTag => App.FileTagsManager.FileTags, _ => null }; await SyncSidebarItemsAsync(section, getElements, e); }); } - private async Task SyncSidebarItemsAsync(LocationItem section, Func> getElements, NotifyCollectionChangedEventArgs e) + private async Task SyncSidebarItemsAsync(LocationItem section, Func> getElements, NotifyCollectionChangedEventArgs e) { if (section is null) { @@ -306,7 +306,7 @@ private async Task SyncSidebarItemsAsync(LocationItem section, Func x.Path == elem.Path); section.ChildItems.Remove(match); @@ -331,11 +331,11 @@ private async Task SyncSidebarItemsAsync(LocationItem section, Func x.Path == elem.Path)) { @@ -351,7 +351,7 @@ private async Task SyncSidebarItemsAsync(LocationItem section, Func item is not null && !item.IsEmpty && item.IsDefaultLocation; - private async Task AddElementToSectionAsync(INavigationControlItem elem, LocationItem section, int index = -1) + private async Task AddElementToSectionAsync(ISidebarItem elem, LocationItem section, int index = -1) { if (elem is LibraryLocationItem lib) { @@ -365,7 +365,7 @@ await lib.CheckDefaultSaveFolderAccess() && } else if (elem is DriveItem drive) { - if (section.Section is SectionType.Network or SectionType.CloudDrives) + if (section.Section is SidebarSectionKind.Network or SidebarSectionKind.CloudDrives) { // Already sorted if (!section.ChildItems.Any(x => x.Path == drive.Path)) @@ -409,18 +409,18 @@ private void Section_PropertyChanged(object? sender, PropertyChangedEventArgs e) } } - private async Task GetOrCreateSectionAsync(SectionType sectionType) + private async Task GetOrCreateSectionAsync(SidebarSectionKind sectionType) { LocationItem? section = GetSection(sectionType) ?? await CreateSectionAsync(sectionType); return section; } - private LocationItem? GetSection(SectionType sectionType) + private LocationItem? GetSection(SidebarSectionKind sectionType) { return sidebarItems.FirstOrDefault(x => x.Section == sectionType) as LocationItem; } - private async Task CreateSectionAsync(SectionType sectionType) + private async Task CreateSectionAsync(SidebarSectionKind sectionType) { LocationItem section = null; BitmapImage icon = null; @@ -428,7 +428,7 @@ private async Task CreateSectionAsync(SectionType sectionType) switch (sectionType) { - case SectionType.Home: + case SidebarSectionKind.Home: { section = BuildSection("Home".GetLocalizedResource(), sectionType, new ContextMenuOptions { IsLocationItem = true }, true); section.Path = "Home"; @@ -438,7 +438,7 @@ private async Task CreateSectionAsync(SectionType sectionType) break; } - case SectionType.Pinned: + case SidebarSectionKind.Pinned: { if (ShowPinnedFoldersSection == false) { @@ -452,7 +452,7 @@ private async Task CreateSectionAsync(SectionType sectionType) break; } - case SectionType.Library: + case SidebarSectionKind.Library: { if (ShowLibrarySection == false) { @@ -465,7 +465,7 @@ private async Task CreateSectionAsync(SectionType sectionType) break; } - case SectionType.Drives: + case SidebarSectionKind.Drives: { if (ShowDrivesSection == false) { @@ -478,7 +478,7 @@ private async Task CreateSectionAsync(SectionType sectionType) break; } - case SectionType.CloudDrives: + case SidebarSectionKind.CloudDrives: { if (ShowCloudDrivesSection == false || CloudDrivesManager.Drives.Any() == false) { @@ -491,7 +491,7 @@ private async Task CreateSectionAsync(SectionType sectionType) break; } - case SectionType.Network: + case SidebarSectionKind.Network: { if (!ShowNetworkSection) { @@ -504,7 +504,7 @@ private async Task CreateSectionAsync(SectionType sectionType) break; } - case SectionType.WSL: + case SidebarSectionKind.WSL: { if (ShowWslSection == false || WSLDistroManager.Distros.Any() == false) { @@ -517,7 +517,7 @@ private async Task CreateSectionAsync(SectionType sectionType) break; } - case SectionType.FileTag: + case SidebarSectionKind.FileTag: { if (!ShowFileTagsSection) { @@ -549,7 +549,7 @@ private async Task CreateSectionAsync(SectionType sectionType) return section; } - private LocationItem BuildSection(string sectionName, SectionType sectionType, ContextMenuOptions options, bool selectsOnInvoked) + private LocationItem BuildSection(string sectionName, SidebarSectionKind sectionType, ContextMenuOptions options, bool selectsOnInvoked) { return new LocationItem() { @@ -567,7 +567,7 @@ private void AddSectionToSideBar(LocationItem section) sidebarItems.Insert(Math.Min(index, sidebarItems.Count), section); } - public async Task UpdateSectionVisibilityAsync(SectionType sectionType, bool show) + public async Task UpdateSectionVisibilityAsync(SidebarSectionKind sectionType, bool show) { if (show) { @@ -575,13 +575,13 @@ public async Task UpdateSectionVisibilityAsync(SectionType sectionType, bool sho Func action = sectionType switch { - SectionType.CloudDrives when generalSettingsService.ShowCloudDrivesSection => CloudDrivesManager.UpdateDrivesAsync, - SectionType.Drives => drivesViewModel.UpdateDrivesAsync, - SectionType.Network when generalSettingsService.ShowNetworkSection => NetworkService.UpdateComputersAsync, - SectionType.WSL when generalSettingsService.ShowWslSection => WSLDistroManager.UpdateDrivesAsync, - SectionType.FileTag when generalSettingsService.ShowFileTagsSection => App.FileTagsManager.UpdateFileTagsAsync, - SectionType.Library => App.LibraryManager.UpdateLibrariesAsync, - SectionType.Pinned => App.QuickAccessManager.Model.AddAllItemsToSidebarAsync, + SidebarSectionKind.CloudDrives when generalSettingsService.ShowCloudDrivesSection => CloudDrivesManager.UpdateDrivesAsync, + SidebarSectionKind.Drives => drivesViewModel.UpdateDrivesAsync, + SidebarSectionKind.Network when generalSettingsService.ShowNetworkSection => NetworkService.UpdateComputersAsync, + SidebarSectionKind.WSL when generalSettingsService.ShowWslSection => WSLDistroManager.UpdateDrivesAsync, + SidebarSectionKind.FileTag when generalSettingsService.ShowFileTagsSection => App.FileTagsManager.UpdateFileTagsAsync, + SidebarSectionKind.Library => App.LibraryManager.UpdateLibrariesAsync, + SidebarSectionKind.Pinned => App.QuickAccessManager.Model.AddAllItemsToSidebarAsync, _ => () => Task.CompletedTask }; @@ -606,31 +606,31 @@ private async void UserSettingsService_OnSettingChangedEvent(object sender, Sett } break; case nameof(UserSettingsService.GeneralSettingsService.ShowPinnedSection): - await UpdateSectionVisibilityAsync(SectionType.Pinned, ShowPinnedFoldersSection); + await UpdateSectionVisibilityAsync(SidebarSectionKind.Pinned, ShowPinnedFoldersSection); OnPropertyChanged(nameof(ShowPinnedFoldersSection)); break; case nameof(UserSettingsService.GeneralSettingsService.ShowLibrarySection): - await UpdateSectionVisibilityAsync(SectionType.Library, ShowLibrarySection); + await UpdateSectionVisibilityAsync(SidebarSectionKind.Library, ShowLibrarySection); OnPropertyChanged(nameof(ShowLibrarySection)); break; case nameof(UserSettingsService.GeneralSettingsService.ShowCloudDrivesSection): - await UpdateSectionVisibilityAsync(SectionType.CloudDrives, ShowCloudDrivesSection); + await UpdateSectionVisibilityAsync(SidebarSectionKind.CloudDrives, ShowCloudDrivesSection); OnPropertyChanged(nameof(ShowCloudDrivesSection)); break; case nameof(UserSettingsService.GeneralSettingsService.ShowDrivesSection): - await UpdateSectionVisibilityAsync(SectionType.Drives, ShowDrivesSection); + await UpdateSectionVisibilityAsync(SidebarSectionKind.Drives, ShowDrivesSection); OnPropertyChanged(nameof(ShowDrivesSection)); break; case nameof(UserSettingsService.GeneralSettingsService.ShowNetworkSection): - await UpdateSectionVisibilityAsync(SectionType.Network, ShowNetworkSection); + await UpdateSectionVisibilityAsync(SidebarSectionKind.Network, ShowNetworkSection); OnPropertyChanged(nameof(ShowNetworkSection)); break; case nameof(UserSettingsService.GeneralSettingsService.ShowWslSection): - await UpdateSectionVisibilityAsync(SectionType.WSL, ShowWslSection); + await UpdateSectionVisibilityAsync(SidebarSectionKind.WSL, ShowWslSection); OnPropertyChanged(nameof(ShowWslSection)); break; case nameof(UserSettingsService.GeneralSettingsService.ShowFileTagsSection): - await UpdateSectionVisibilityAsync(SectionType.FileTag, ShowFileTagsSection); + await UpdateSectionVisibilityAsync(SidebarSectionKind.FileTag, ShowFileTagsSection); OnPropertyChanged(nameof(ShowFileTagsSection)); break; } @@ -642,9 +642,9 @@ public void Dispose() App.QuickAccessManager.Model.DataChanged -= Manager_DataChanged; App.LibraryManager.DataChanged -= Manager_DataChanged; - drivesViewModel.Drives.CollectionChanged -= (x, args) => Manager_DataChanged(SectionType.Drives, args); + drivesViewModel.Drives.CollectionChanged -= (x, args) => Manager_DataChanged(SidebarSectionKind.Drives, args); CloudDrivesManager.DataChanged -= Manager_DataChanged; - NetworkService.Computers.CollectionChanged -= (x, args) => Manager_DataChanged(SectionType.Network, args); + NetworkService.Computers.CollectionChanged -= (x, args) => Manager_DataChanged(SidebarSectionKind.Network, args); WSLDistroManager.DataChanged -= Manager_DataChanged; App.FileTagsManager.DataChanged -= Manager_DataChanged; } @@ -664,7 +664,7 @@ public async void HandleItemContextInvokedAsync(object sender, ItemContextInvoke if (sender is not FrameworkElement sidebarItem) return; - if (args.Item is not INavigationControlItem item) + if (args.Item is not ISidebarItem item) { // We are in the pane context requested path PaneFlyout.ShowAt(sender as FrameworkElement, args.Position); @@ -723,7 +723,7 @@ private async void ItemContextMenuFlyout_Opened(object? sender, object e) public async void HandleItemInvokedAsync(object item, PointerUpdateKind pointerUpdateKind) { - if (item is not INavigationControlItem navigationControlItem) return; + if (item is not ISidebarItem navigationControlItem) return; var navigationPath = item as string; if (await DriveHelpers.CheckEmptyDrive(navigationPath)) @@ -744,7 +744,7 @@ public async void HandleItemInvokedAsync(object item, PointerUpdateKind pointerU switch (navigationControlItem.ItemType) { - case NavigationControlItemType.Location: + case SidebarItemKind.Location: { // Get the path of the invoked item var ItemPath = navigationControlItem.Path; @@ -765,7 +765,7 @@ public async void HandleItemInvokedAsync(object item, PointerUpdateKind pointerU break; } - case NavigationControlItemType.FileTag: + case SidebarItemKind.FileTag: var tagPath = navigationControlItem.Path; // Get the path of the invoked item if (PaneHolder?.ActivePane is IShellPage shp) { @@ -845,7 +845,7 @@ private void PinItem() } private void UnpinItem() { - if (rightClickedItem.Section == SectionType.Pinned || rightClickedItem is DriveItem) + if (rightClickedItem.Section == SidebarSectionKind.Pinned || rightClickedItem is DriveItem) _ = QuickAccessService.UnpinFromSidebarAsync(rightClickedItem.Path); } @@ -853,25 +853,25 @@ private void HideSection() { switch (rightClickedItem.Section) { - case SectionType.Pinned: + case SidebarSectionKind.Pinned: UserSettingsService.GeneralSettingsService.ShowPinnedSection = false; break; - case SectionType.Library: + case SidebarSectionKind.Library: UserSettingsService.GeneralSettingsService.ShowLibrarySection = false; break; - case SectionType.CloudDrives: + case SidebarSectionKind.CloudDrives: UserSettingsService.GeneralSettingsService.ShowCloudDrivesSection = false; break; - case SectionType.Drives: + case SidebarSectionKind.Drives: UserSettingsService.GeneralSettingsService.ShowDrivesSection = false; break; - case SectionType.Network: + case SidebarSectionKind.Network: UserSettingsService.GeneralSettingsService.ShowNetworkSection = false; break; - case SectionType.WSL: + case SidebarSectionKind.WSL: UserSettingsService.GeneralSettingsService.ShowWslSection = false; break; - case SectionType.FileTag: + case SidebarSectionKind.FileTag: UserSettingsService.GeneralSettingsService.ShowFileTagsSection = false; break; } @@ -896,7 +896,7 @@ private void OpenProperties(CommandBarFlyout menu) FilePropertiesHelpers.OpenPropertiesWindow(new LibraryItem(library), PaneHolder.ActivePane); else if (rightClickedItem is LocationItem locationItem) { - var listedItem = new ListedItem(null!) + var listedItem = new StandardStorageItem() { ItemPath = locationItem.Path, ItemNameRaw = locationItem.Text, @@ -931,7 +931,7 @@ private void FormatDrive() Win32Helper.OpenFormatDriveDialog(rightClickedItem.Path); } - private List GetLocationItemMenuItems(INavigationControlItem item, CommandBarFlyout menu) + private List GetLocationItemMenuItems(ISidebarItem item, CommandBarFlyout menu) { var options = item.MenuOptions; @@ -939,7 +939,7 @@ private List GetLocationItemMenuItems(INavigatio var pinnedFolderIndex = pinnedFolderModel.IndexOfItem(item); var pinnedFolderCount = pinnedFolderModel.PinnedFolders.Count; - var isPinnedItem = item.Section is SectionType.Pinned && pinnedFolderIndex is not -1; + var isPinnedItem = item.Section is SidebarSectionKind.Pinned && pinnedFolderIndex is not -1; var showMoveItemUp = isPinnedItem && pinnedFolderIndex > 0; var showMoveItemDown = isPinnedItem && pinnedFolderIndex < pinnedFolderCount - 1; @@ -998,7 +998,7 @@ private List GetLocationItemMenuItems(INavigatio Text = "ReorderSidebarItemsDialogText".GetLocalizedResource(), Glyph = "\uE8D8", Command = ReorderItemsCommand, - ShowItem = isPinnedItem || item.Section is SectionType.Pinned + ShowItem = isPinnedItem || item.Section is SidebarSectionKind.Pinned }, new ContextMenuFlyoutItemViewModel() { @@ -1072,7 +1072,7 @@ private async Task HandleLocationItemDragOverAsync(LocationItem locationItem, It var storageItems = await Utils.Storage.FilesystemHelpers.GetDraggedStorageItems(args.DroppedItem); var hasStorageItems = storageItems.Any(); - if (isPathNull && hasStorageItems && SectionType.Pinned.Equals(locationItem.Section)) + if (isPathNull && hasStorageItems && SidebarSectionKind.Pinned.Equals(locationItem.Section)) { var haveFoldersToPin = storageItems.Any(item => item.ItemType == FilesystemItemType.Directory && !SidebarPinnedModel.PinnedFolders.Contains(item.Path)); @@ -1234,7 +1234,7 @@ private async Task HandleLocationItemDroppedAsync(LocationItem locationItem, Ite { if (Utils.Storage.FilesystemHelpers.HasDraggedStorageItems(args.DroppedItem)) { - if (string.IsNullOrEmpty(locationItem.Path) && SectionType.Pinned.Equals(locationItem.Section)) // Pin to "Pinned" section + if (string.IsNullOrEmpty(locationItem.Path) && SidebarSectionKind.Pinned.Equals(locationItem.Section)) // Pin to "Pinned" section { var storageItems = await Utils.Storage.FilesystemHelpers.GetDraggedStorageItems(args.DroppedItem); foreach (var item in storageItems) @@ -1260,7 +1260,7 @@ private async Task HandleTagItemDroppedAsync(FileTagItem fileTagItem, ItemDroppe var storageItems = await Utils.Storage.FilesystemHelpers.GetDraggedStorageItems(args.DroppedItem); foreach (var item in storageItems.Where(x => !string.IsNullOrEmpty(x.Path))) { - var listedItem = new ListedItem(null) + var listedItem = new StandardStorageItem() { ItemPath = item.Path, FileFRN = await FileTagsHelper.GetFileFRN(item.Item), diff --git a/src/Files.App/ViewModels/UserControls/Widgets/FileTagsWidgetViewModel.cs b/src/Files.App/ViewModels/UserControls/Widgets/FileTagsWidgetViewModel.cs index 835289ddc3a0..6733fa91975c 100644 --- a/src/Files.App/ViewModels/UserControls/Widgets/FileTagsWidgetViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Widgets/FileTagsWidgetViewModel.cs @@ -152,7 +152,7 @@ private void ExecuteOpenPropertiesCommand(WidgetCardItem? item) { flyout!.Closed -= flyoutClosed; - ListedItem listedItem = new(null!) + StandardStorageItem listedItem = new() { ItemPath = (item.Item as WidgetFileTagCardItem)?.Path ?? string.Empty, ItemNameRaw = (item.Item as WidgetFileTagCardItem)?.Name ?? string.Empty, diff --git a/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs b/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs index e3f4b037887f..ffa459202e75 100644 --- a/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs @@ -272,7 +272,7 @@ private void ExecuteOpenPropertiesCommand(WidgetFolderCardItem? item) { flyout!.Closed -= flyoutClosed; - ListedItem listedItem = new(null!) + StandardStorageItem listedItem = new() { ItemPath = item.Item.Path, ItemNameRaw = item.Item.Text, diff --git a/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs b/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs index 8e93fd76628f..5453ca9ed82e 100644 --- a/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs +++ b/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs @@ -42,10 +42,10 @@ public BaseGroupableLayoutPage() : base() // Abstract methods - protected abstract void ItemManipulationModel_AddSelectedItemInvoked(object? sender, ListedItem e); - protected abstract void ItemManipulationModel_RemoveSelectedItemInvoked(object? sender, ListedItem e); + protected abstract void ItemManipulationModel_AddSelectedItemInvoked(object? sender, StandardStorageItem e); + protected abstract void ItemManipulationModel_RemoveSelectedItemInvoked(object? sender, StandardStorageItem e); protected abstract void ItemManipulationModel_FocusSelectedItemsInvoked(object? sender, EventArgs e); - protected abstract void ItemManipulationModel_ScrollIntoViewInvoked(object? sender, ListedItem e); + protected abstract void ItemManipulationModel_ScrollIntoViewInvoked(object? sender, StandardStorageItem e); protected abstract void ItemManipulationModel_ScrollToTopInvoked(object? sender, EventArgs e); protected abstract void FileList_PreviewKeyDown(object sender, KeyRoutedEventArgs e); protected abstract void EndRename(TextBox textBox); @@ -196,8 +196,8 @@ protected virtual void ItemManipulationModel_InvertSelectionInvoked(object? send return; } - List newSelectedItems = GetAllItems() - .Cast() + List newSelectedItems = GetAllItems() + .Cast() .Except(SelectedItems) .ToList(); @@ -217,7 +217,7 @@ protected virtual void ZoomIn(object? sender, GroupOption option) protected virtual void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e) { - SelectedItems = ListViewBase.SelectedItems.Cast().Where(x => x is not null).ToList(); + SelectedItems = ListViewBase.SelectedItems.Cast().Where(x => x is not null).ToList(); } protected virtual void SelectionRectangle_SelectionEnded(object? sender, EventArgs e) @@ -349,7 +349,7 @@ protected async void RenameTextBox_KeyDown(object sender, KeyRoutedEventArgs e) } } - protected bool TryStartRenameNextItem(ListedItem item) + protected bool TryStartRenameNextItem(StandardStorageItem item) { var nextItemIndex = ListViewBase.Items.IndexOf(item) + NextRenameIndex; NextRenameIndex = 0; diff --git a/src/Files.App/Views/Layouts/BaseLayoutPage.cs b/src/Files.App/Views/Layouts/BaseLayoutPage.cs index 71c993679f35..362a0a946150 100644 --- a/src/Files.App/Views/Layouts/BaseLayoutPage.cs +++ b/src/Files.App/Views/Layouts/BaseLayoutPage.cs @@ -64,9 +64,9 @@ public abstract class BaseLayoutPage : Page, IBaseLayoutPage, INotifyPropertyCha private bool shiftPressed; - private ListedItem? dragOverItem = null; - private ListedItem? hoveredItem = null; - private ListedItem? preRenamingItem = null; + private StandardStorageItem? dragOverItem = null; + private StandardStorageItem? hoveredItem = null; + private StandardStorageItem? preRenamingItem = null; // Properties @@ -108,8 +108,8 @@ public bool AllowItemDrag public bool IsRenamingItem { get; set; } public bool LockPreviewPaneContent { get; set; } - public ListedItem? RenamingItem { get; set; } - public ListedItem? SelectedItem { get; private set; } + public StandardStorageItem? RenamingItem { get; set; } + public StandardStorageItem? SelectedItem { get; private set; } public string? OldItemName { get; set; } @@ -179,14 +179,14 @@ public string JumpString value = jumpString; if (value != string.Empty) { - ListedItem? jumpedToItem = null; - ListedItem? previouslySelectedItem = IsItemSelected ? SelectedItem : null; + StandardStorageItem? jumpedToItem = null; + StandardStorageItem? previouslySelectedItem = IsItemSelected ? SelectedItem : null; // Select first matching item after currently selected item if (previouslySelectedItem is not null) { // Use FilesAndFolders because only displayed entries should be jumped to - IEnumerable candidateItems = ParentShellPageInstance!.FilesystemViewModel.FilesAndFolders.ToList() + IEnumerable candidateItems = ParentShellPageInstance!.FilesystemViewModel.FilesAndFolders.ToList() .SkipWhile(x => x != previouslySelectedItem) .Skip(value.Length == 1 ? 1 : 0) // User is trying to cycle through items starting with the same letter .Where(f => f.Name.Length >= value.Length && string.Equals(f.Name.Substring(0, value.Length), value, StringComparison.OrdinalIgnoreCase)); @@ -196,7 +196,7 @@ public string JumpString if (jumpedToItem is null) { // Use FilesAndFolders because only displayed entries should be jumped to - IEnumerable candidateItems = ParentShellPageInstance!.FilesystemViewModel.FilesAndFolders.ToList() + IEnumerable candidateItems = ParentShellPageInstance!.FilesystemViewModel.FilesAndFolders.ToList() .Where(f => f.Name.Length >= value.Length && string.Equals(f.Name.Substring(0, value.Length), value, StringComparison.OrdinalIgnoreCase)); jumpedToItem = candidateItems.FirstOrDefault(); } @@ -216,8 +216,8 @@ public string JumpString } } - private List? selectedItems = []; - public List? SelectedItems + private List? selectedItems = []; + public List? SelectedItems { get => selectedItems; internal set @@ -314,13 +314,13 @@ private void JumpTimer_Tick(object sender, object e) jumpTimer.Stop(); } - protected IEnumerable? GetAllItems() + protected IEnumerable? GetAllItems() { var items = CollectionViewSource.IsSourceGrouped - ? (CollectionViewSource.Source as BulkConcurrentObservableCollection>)?.SelectMany(g => g) // add all items from each group to the new list - : CollectionViewSource.Source as IEnumerable; + ? (CollectionViewSource.Source as BulkConcurrentObservableCollection>)?.SelectMany(g => g) // add all items from each group to the new list + : CollectionViewSource.Source as IEnumerable; - return items ?? new List(); + return items ?? new List(); } public virtual void ResetItemOpacity() @@ -336,12 +336,12 @@ public virtual void ResetItemOpacity() } } - protected ListedItem? GetItemFromElement(object element) + protected StandardStorageItem? GetItemFromElement(object element) { if (element is not ContentControl item || !CanGetItemFromElement(element)) return null; - return (item.DataContext as ListedItem) ?? (item.Content as ListedItem) ?? (ItemsControl.ItemFromContainer(item) as ListedItem); + return (item.DataContext as StandardStorageItem) ?? (item.Content as StandardStorageItem) ?? (ItemsControl.ItemFromContainer(item) as StandardStorageItem); } protected virtual void BaseFolderSettings_LayoutModeChangeRequested(object? sender, LayoutModeEventArgs e) @@ -491,7 +491,7 @@ public void SetSelectedItemsOnNavigation() navigationArguments.SelectItems is not null && navigationArguments.SelectItems.Any()) { - List listedItemsToSelect = + List listedItemsToSelect = [ .. ParentShellPageInstance!.FilesystemViewModel.FilesAndFolders.ToList().Where((li) => navigationArguments.SelectItems.Contains(li.ItemNameRaw)), ]; @@ -570,7 +570,7 @@ private async void ItemContextFlyout_Opening(object? sender, object e) } // Workaround for item sometimes not getting selected - if (!IsItemSelected && (sender as CommandBarFlyout)?.Target is ListViewItem { Content: ListedItem li }) + if (!IsItemSelected && (sender as CommandBarFlyout)?.Target is ListViewItem { Content: StandardStorageItem li }) ItemManipulationModel.SetSelectedItem(li); if (IsItemSelected) @@ -971,7 +971,7 @@ protected virtual void FileList_DragItemsStarting(object sender, DragItemsStarti { try { - var shellItemList = SafetyExtensions.IgnoreExceptions(() => e.Items.OfType().Select(x => new VanaraWindowsShell.ShellItem(x.ItemPath)).ToArray()); + var shellItemList = SafetyExtensions.IgnoreExceptions(() => e.Items.OfType().Select(x => new VanaraWindowsShell.ShellItem(x.ItemPath)).ToArray()); if (shellItemList?[0].FileSystemPath is not null && !InstanceViewModel.IsPageTypeSearchResults) { var iddo = shellItemList[0].Parent.GetChildrenUIObjects(HWND.NULL, shellItemList); @@ -987,7 +987,7 @@ protected virtual void FileList_DragItemsStarting(object sender, DragItemsStarti else { // Only support IStorageItem capable paths - var storageItemList = e.Items.OfType().Where(x => !(x.IsHiddenItem && x.IsLinkItem && x.IsRecycleBinItem && x.IsShortcut)).Select(x => VirtualStorageItem.FromListedItem(x)); + var storageItemList = e.Items.OfType().Where(x => !(x.IsHiddenItem && x.IsLinkItem && x.IsRecycleBinItem && x.IsShortcut)).Select(x => VirtualStorageItem.FromListedItem(x)); e.Data.SetStorageItems(storageItemList, false); } } @@ -1152,7 +1152,7 @@ private void RefreshContainer(SelectorItem container, bool inRecycleQueue) private void RefreshItem(SelectorItem container, object item, bool inRecycleQueue, ContainerContentChangingEventArgs args) { - if (item is not ListedItem listedItem) + if (item is not StandardStorageItem listedItem) return; if (inRecycleQueue) @@ -1228,7 +1228,7 @@ selectedItems is not null && found++; if (found != 0 && !selectedItems.Contains(ItemsControl.Items[i])) - ItemManipulationModel.AddSelectedItem((ListedItem)ItemsControl.Items[i]); + ItemManipulationModel.AddSelectedItem((StandardStorageItem)ItemsControl.Items[i]); } } // Avoid resetting the selection if multiple items are selected @@ -1257,7 +1257,7 @@ protected void FileListItem_RightTapped(object sender, RightTappedRoutedEventArg ItemManipulationModel.SetSelectedItem(rightClickedItem); } - protected void InitializeDrag(UIElement container, ListedItem item) + protected void InitializeDrag(UIElement container, StandardStorageItem item) { if (item is null) return; @@ -1329,7 +1329,7 @@ protected void SemanticZoom_ViewChangeStarted(object sender, SemanticZoomViewCha return; // According to the docs this isn't necessary, but it would crash otherwise - var destination = e.DestinationItem.Item as GroupedCollection; + var destination = e.DestinationItem.Item as GroupedCollection; e.DestinationItem.Item = destination?.FirstOrDefault(); } @@ -1361,7 +1361,7 @@ private void ItemManipulationModel_RefreshItemsOpacityInvoked(object? sender, Ev if (items is null) return; - foreach (ListedItem listedItem in items) + foreach (StandardStorageItem listedItem in items) { if (listedItem.IsHiddenItem) listedItem.Opacity = Constants.UI.DimItemOpacity; @@ -1382,7 +1382,7 @@ virtual public void StartRenameItem() public void CheckRenameDoubleClick(object clickedItem) { - if (clickedItem is ListedItem item) + if (clickedItem is StandardStorageItem item) { if (item == preRenamingItem) { diff --git a/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml b/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml index 5867b5031142..4fc48030aa06 100644 --- a/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml +++ b/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml @@ -6,7 +6,7 @@ xmlns:cloud="using:Files.App.Utils.Cloud" xmlns:converters="using:Files.App.Converters" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:filesystem="using:Files.App.Utils" + xmlns:dataitems="using:Files.App.Data.Items" xmlns:helpers="using:Files.App.Helpers" xmlns:local="using:Files.App.Views.Layouts" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" @@ -202,7 +202,7 @@ Tapped="FileList_ItemTapped"> - + { @@ -527,7 +527,7 @@ private void Grid_Loaded(object sender, RoutedEventArgs e) private void Grid_PointerEntered(object sender, PointerRoutedEventArgs e) { - if (sender is FrameworkElement element && element.DataContext is ListedItem item) + if (sender is FrameworkElement element && element.DataContext is StandardStorageItem item) // Reassign values to update date display ToolTipService.SetToolTip(element, item.ItemTooltipText); } diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml index 01603b5a8d81..eea1d60aa7dc 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml @@ -6,8 +6,8 @@ xmlns:behaviors="using:Files.App.Data.Behaviors" xmlns:converters="using:Files.App.Converters" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:dataitems="using:Files.App.Data.Items" xmlns:datamodels="using:Files.App.Data.Models" - xmlns:filesystem="using:Files.App.Utils" xmlns:helpers="using:Files.App.Helpers" xmlns:i="using:Microsoft.Xaml.Interactivity" xmlns:icore="using:Microsoft.Xaml.Interactions.Core" @@ -891,7 +891,7 @@ - + @@ -1192,7 +1192,7 @@ DataContextChanged="TextBlock_DataContextChanged" IsTextTrimmedChanged="TextBlock_IsTextTrimmedChanged" Style="{StaticResource ColumnContentTextBlock}" - Text="{x:Bind AsRecycleBinItem.ItemDateDeleted, Mode=OneWay}" + Text="{x:Bind AsRecycleBinItem.DateDeletedHumanized, Mode=OneWay}" Visibility="{Binding ColumnsViewModel.DateDeletedColumn.Visibility, ElementName=PageRoot, Mode=OneWay}" /> diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs index 625deb606b17..b5a7da48beb1 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs @@ -28,7 +28,7 @@ public sealed partial class DetailsLayoutPage : BaseGroupableLayoutPage // Fields - private ListedItem? _nextItemToSelect; + private StandardStorageItem? _nextItemToSelect; // Properties @@ -91,7 +91,7 @@ public DetailsLayoutPage() : base() // Methods - protected override void ItemManipulationModel_ScrollIntoViewInvoked(object? sender, ListedItem e) + protected override void ItemManipulationModel_ScrollIntoViewInvoked(object? sender, StandardStorageItem e) { FileList.ScrollIntoView(e); ContentScroller?.ChangeView(null, FileList.Items.IndexOf(e) * RowHeight, null, true); // Scroll to index * item height @@ -112,7 +112,7 @@ protected override void ItemManipulationModel_FocusSelectedItemsInvoked(object? } } - protected override void ItemManipulationModel_AddSelectedItemInvoked(object? sender, ListedItem e) + protected override void ItemManipulationModel_AddSelectedItemInvoked(object? sender, StandardStorageItem e) { if (NextRenameIndex != 0) { @@ -123,7 +123,7 @@ protected override void ItemManipulationModel_AddSelectedItemInvoked(object? sen FileList!.SelectedItems.Add(e); } - protected override void ItemManipulationModel_RemoveSelectedItemInvoked(object? sender, ListedItem e) + protected override void ItemManipulationModel_RemoveSelectedItemInvoked(object? sender, StandardStorageItem e) { if (FileList?.Items.Contains(e) ?? false) FileList.SelectedItems.Remove(e); @@ -314,7 +314,7 @@ private void FolderSettings_LayoutModeChangeRequested(object? sender, LayoutMode private void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e) { - SelectedItems = FileList.SelectedItems.Cast().Where(x => x is not null).ToList(); + SelectedItems = FileList.SelectedItems.Cast().Where(x => x is not null).ToList(); if (e != null) { @@ -413,7 +413,7 @@ protected override async void FileList_PreviewKeyDown(object sender, KeyRoutedEv var folders = ParentShellPageInstance?.SlimContentPage.SelectedItems?.Where(file => file.PrimaryItemAttribute == StorageItemTypes.Folder); if (folders is not null) { - foreach (ListedItem folder in folders) + foreach (StandardStorageItem folder in folders) await NavigationHelpers.OpenPathInNewTab(folder.ItemPath, false); } } @@ -498,7 +498,7 @@ private async void FileList_ItemTapped(object sender, TappedRoutedEventArgs e) var clickedItem = e.OriginalSource as FrameworkElement; var ctrlPressed = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down); var shiftPressed = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down); - var item = clickedItem?.DataContext as ListedItem; + var item = clickedItem?.DataContext as StandardStorageItem; if (item is null) { if (IsRenamingItem && RenamingItem is not null) @@ -554,7 +554,7 @@ clickedItem is Microsoft.UI.Xaml.Shapes.Rectangle private async void FileList_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) { // Skip opening selected items if the double tap doesn't capture an item - if ((e.OriginalSource as FrameworkElement)?.DataContext is ListedItem item + if ((e.OriginalSource as FrameworkElement)?.DataContext is StandardStorageItem item && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick) { await Commands.OpenItem.ExecuteAsync(); @@ -675,19 +675,19 @@ private void ResizeColumnToFit(int columnToResize) var maxItemLength = columnToResize switch { 1 => 40, // Check all items columns - 2 => FileList.Items.Cast().Select(x => x.Name?.Length ?? 0).Max(), // file name column - 4 => FileList.Items.Cast().Select(x => (x as GitItem)?.GitLastCommitDateHumanized?.Length ?? 0).Max(), // git - 5 => FileList.Items.Cast().Select(x => (x as GitItem)?.GitLastCommitMessage?.Length ?? 0).Max(), // git - 6 => FileList.Items.Cast().Select(x => (x as GitItem)?.GitLastCommitAuthor?.Length ?? 0).Max(), // git - 7 => FileList.Items.Cast().Select(x => (x as GitItem)?.GitLastCommitSha?.Length ?? 0).Max(), // git - 8 => FileList.Items.Cast().Select(x => x.FileTagsUI?.Sum(x => x?.Name?.Length ?? 0) ?? 0).Max(), // file tag column - 9 => FileList.Items.Cast().Select(x => x.ItemPath?.Length ?? 0).Max(), // path column - 10 => FileList.Items.Cast().Select(x => (x as RecycleBinItem)?.ItemOriginalPath?.Length ?? 0).Max(), // original path column - 11 => FileList.Items.Cast().Select(x => (x as RecycleBinItem)?.ItemDateDeleted?.Length ?? 0).Max(), // date deleted column - 12 => FileList.Items.Cast().Select(x => x.ItemDateModified?.Length ?? 0).Max(), // date modified column - 13 => FileList.Items.Cast().Select(x => x.ItemDateCreated?.Length ?? 0).Max(), // date created column - 14 => FileList.Items.Cast().Select(x => x.ItemType?.Length ?? 0).Max(), // item type column - 15 => FileList.Items.Cast().Select(x => x.FileSize?.Length ?? 0).Max(), // item size column + 2 => FileList.Items.Cast().Select(x => x.Name?.Length ?? 0).Max(), // file name column + 4 => FileList.Items.Cast().Select(x => (x as GitItem)?.GitLastCommitDateHumanized?.Length ?? 0).Max(), // git + 5 => FileList.Items.Cast().Select(x => (x as GitItem)?.GitLastCommitMessage?.Length ?? 0).Max(), // git + 6 => FileList.Items.Cast().Select(x => (x as GitItem)?.GitLastCommitAuthor?.Length ?? 0).Max(), // git + 7 => FileList.Items.Cast().Select(x => (x as GitItem)?.GitLastCommitSha?.Length ?? 0).Max(), // git + 8 => FileList.Items.Cast().Select(x => x.FileTagsUI?.Sum(x => x?.Name?.Length ?? 0) ?? 0).Max(), // file tag column + 9 => FileList.Items.Cast().Select(x => x.ItemPath?.Length ?? 0).Max(), // path column + 10 => FileList.Items.Cast().Select(x => (x as StandardRecycleBinItem)?.OriginalPath?.Length ?? 0).Max(), // original path column + 11 => FileList.Items.Cast().Select(x => (x as StandardRecycleBinItem)?.DateDeletedHumanized?.Length ?? 0).Max(), // date deleted column + 12 => FileList.Items.Cast().Select(x => x.ItemDateModified?.Length ?? 0).Max(), // date modified column + 13 => FileList.Items.Cast().Select(x => x.ItemDateCreated?.Length ?? 0).Max(), // date created column + 14 => FileList.Items.Cast().Select(x => x.ItemType?.Length ?? 0).Max(), // item type column + 15 => FileList.Items.Cast().Select(x => x.FileSize?.Length ?? 0).Max(), // item size column _ => 20 // cloud status column }; @@ -833,13 +833,13 @@ private void SetDetailsColumnsAsDefault_Click(object sender, RoutedEventArgs e) private void ItemSelected_Checked(object sender, RoutedEventArgs e) { - if (sender is CheckBox checkBox && checkBox.DataContext is ListedItem item && !FileList.SelectedItems.Contains(item)) + if (sender is CheckBox checkBox && checkBox.DataContext is StandardStorageItem item && !FileList.SelectedItems.Contains(item)) FileList.SelectedItems.Add(item); } private void ItemSelected_Unchecked(object sender, RoutedEventArgs e) { - if (sender is CheckBox checkBox && checkBox.DataContext is ListedItem item && FileList.SelectedItems.Contains(item)) + if (sender is CheckBox checkBox && checkBox.DataContext is StandardStorageItem item && FileList.SelectedItems.Contains(item)) FileList.SelectedItems.Remove(item); } @@ -904,7 +904,7 @@ private void RemoveTagIcon_Tapped(object sender, TappedRoutedEventArgs e) var parent = (sender as FontIcon)?.Parent as StackPanel; var tagName = (parent?.Children[TAG_TEXT_BLOCK] as TextBlock)?.Text; - if (tagName is null || parent?.DataContext is not ListedItem item) + if (tagName is null || parent?.DataContext is not StandardStorageItem item) return; var tagId = FileTagsSettingsService.GetTagsByName(tagName).FirstOrDefault()?.Uid; diff --git a/src/Files.App/Views/Layouts/GridLayoutPage.xaml b/src/Files.App/Views/Layouts/GridLayoutPage.xaml index fcc8f9c0495b..39a4ad688c18 100644 --- a/src/Files.App/Views/Layouts/GridLayoutPage.xaml +++ b/src/Files.App/Views/Layouts/GridLayoutPage.xaml @@ -6,7 +6,7 @@ xmlns:cloud="using:Files.App.Utils.Cloud" xmlns:converters="using:Files.App.Converters" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:filesystem="using:Files.App.Utils" + xmlns:dataitems="using:Files.App.Data.Items" xmlns:helpers="using:Files.App.Helpers" xmlns:i="using:Microsoft.Xaml.Interactivity" xmlns:icore="using:Microsoft.Xaml.Interactions.Core" @@ -91,7 +91,7 @@ - + - + - + file.PrimaryItemAttribute == StorageItemTypes.Folder); - foreach (ListedItem? folder in folders) + foreach (StandardStorageItem? folder in folders) { if (folder is not null) await NavigationHelpers.OpenPathInNewTab(folder.ItemPath, false); @@ -510,7 +510,7 @@ private async Task ReloadItemIconsAsync() ParentShellPageInstance.FilesystemViewModel.CancelExtendedPropertiesLoading(); var filesAndFolders = ParentShellPageInstance.FilesystemViewModel.FilesAndFolders.ToList(); - foreach (ListedItem listedItem in filesAndFolders) + foreach (StandardStorageItem listedItem in filesAndFolders) { listedItem.ItemPropertiesInitialized = false; if (FileList.ContainerFromItem(listedItem) is not null) @@ -535,7 +535,7 @@ private async void FileList_ItemTapped(object sender, TappedRoutedEventArgs e) var ctrlPressed = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down); var shiftPressed = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down); - var item = (e.OriginalSource as FrameworkElement)?.DataContext as ListedItem; + var item = (e.OriginalSource as FrameworkElement)?.DataContext as StandardStorageItem; if (item is null) return; @@ -587,7 +587,7 @@ private async void FileList_ItemTapped(object sender, TappedRoutedEventArgs e) private async void FileList_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) { // Skip opening selected items if the double tap doesn't capture an item - if ((e.OriginalSource as FrameworkElement)?.DataContext is ListedItem item && + if ((e.OriginalSource as FrameworkElement)?.DataContext is StandardStorageItem item && !UserSettingsService.FoldersSettingsService.OpenItemsWithOneClick) await Commands.OpenItem.ExecuteAsync(); else if (UserSettingsService.FoldersSettingsService.DoubleClickToGoUp) @@ -599,7 +599,7 @@ private async void FileList_DoubleTapped(object sender, DoubleTappedRoutedEventA private void ItemSelected_Checked(object sender, RoutedEventArgs e) { if (sender is CheckBox checkBox && - checkBox.DataContext is ListedItem item && + checkBox.DataContext is StandardStorageItem item && !FileList.SelectedItems.Contains(item)) FileList.SelectedItems.Add(item); } @@ -607,7 +607,7 @@ checkBox.DataContext is ListedItem item && private void ItemSelected_Unchecked(object sender, RoutedEventArgs e) { if (sender is CheckBox checkBox && - checkBox.DataContext is ListedItem item && + checkBox.DataContext is StandardStorageItem item && FileList.SelectedItems.Contains(item)) FileList.SelectedItems.Remove(item); } @@ -676,7 +676,7 @@ private void Grid_Loaded(object sender, RoutedEventArgs e) private void Grid_PointerEntered(object sender, PointerRoutedEventArgs e) { - if (sender is FrameworkElement element && element.DataContext is ListedItem item) + if (sender is FrameworkElement element && element.DataContext is StandardStorageItem item) // Reassign values to update date display ToolTipService.SetToolTip(element, item.ItemTooltipText); } diff --git a/src/Files.App/Views/Layouts/IBaseLayoutPage.cs b/src/Files.App/Views/Layouts/IBaseLayoutPage.cs index 2e2a8bea9875..77555c0154bc 100644 --- a/src/Files.App/Views/Layouts/IBaseLayoutPage.cs +++ b/src/Files.App/Views/Layouts/IBaseLayoutPage.cs @@ -19,9 +19,9 @@ public interface IBaseLayoutPage : IDisposable /// bool LockPreviewPaneContent { get; set; } - List? SelectedItems { get; } + List? SelectedItems { get; } - ListedItem? SelectedItem { get; } + StandardStorageItem? SelectedItem { get; } ItemManipulationModel ItemManipulationModel { get; } diff --git a/src/Files.App/Views/Properties/CompatibilityPage.xaml.cs b/src/Files.App/Views/Properties/CompatibilityPage.xaml.cs index 2dc0071fa296..bdfacdf9348a 100644 --- a/src/Files.App/Views/Properties/CompatibilityPage.xaml.cs +++ b/src/Files.App/Views/Properties/CompatibilityPage.xaml.cs @@ -19,7 +19,7 @@ public CompatibilityPage() protected override void OnNavigatedTo(NavigationEventArgs e) { var np = (PropertiesPageNavigationParameter)e.Parameter; - if (np.Parameter is ListedItem listedItem) + if (np.Parameter is StandardStorageItem listedItem) CompatibilityViewModel = new CompatibilityViewModel(listedItem); base.OnNavigatedTo(e); diff --git a/src/Files.App/Views/Properties/GeneralPage.xaml.cs b/src/Files.App/Views/Properties/GeneralPage.xaml.cs index 1238d99e5271..3f4cd3037aa2 100644 --- a/src/Files.App/Views/Properties/GeneralPage.xaml.cs +++ b/src/Files.App/Views/Properties/GeneralPage.xaml.cs @@ -122,7 +122,7 @@ async Task SaveLibraryAsync(LibraryItem library) return false; } - async Task SaveCombinedAsync(IList fileOrFolders) + async Task SaveCombinedAsync(IList fileOrFolders) { // Handle the visibility attribute for multiple files var itemMM = AppInstance?.SlimContentPage?.ItemManipulationModel; @@ -155,7 +155,7 @@ await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => return true; } - async Task SaveBaseAsync(ListedItem item) + async Task SaveBaseAsync(StandardStorageItem item) { // Handle the visibility attribute for a single file var itemMM = AppInstance?.SlimContentPage?.ItemManipulationModel; diff --git a/src/Files.App/Views/Properties/HashesPage.xaml.cs b/src/Files.App/Views/Properties/HashesPage.xaml.cs index 1413899684f6..4918feded539 100644 --- a/src/Files.App/Views/Properties/HashesPage.xaml.cs +++ b/src/Files.App/Views/Properties/HashesPage.xaml.cs @@ -26,7 +26,7 @@ public HashesPage() protected override void OnNavigatedTo(NavigationEventArgs e) { var np = (PropertiesPageNavigationParameter)e.Parameter; - if (np.Parameter is ListedItem listedItem) + if (np.Parameter is StandardStorageItem listedItem) HashesViewModel = new(listedItem); base.OnNavigatedTo(e); diff --git a/src/Files.App/Views/Shells/BaseShellPage.cs b/src/Files.App/Views/Shells/BaseShellPage.cs index 1e6af0b502cf..67d7aeb6b3f4 100644 --- a/src/Files.App/Views/Shells/BaseShellPage.cs +++ b/src/Files.App/Views/Shells/BaseShellPage.cs @@ -218,7 +218,7 @@ protected void FilesystemViewModel_PageTypeUpdated(object sender, PageTypeUpdate InstanceViewModel.IsPageTypeCloudDrive = e.IsTypeCloudDrive; } - protected void FilesystemViewModel_OnSelectionRequestedEvent(object sender, List e) + protected void FilesystemViewModel_OnSelectionRequestedEvent(object sender, List e) { // Set focus since selection might occur before the UI finishes updating ContentPage.ItemManipulationModel.FocusFileList();