diff --git a/Files/Enums/SortOption.cs b/Files/Enums/SortOption.cs index 3e9d9e0066ce..866990888096 100644 --- a/Files/Enums/SortOption.cs +++ b/Files/Enums/SortOption.cs @@ -5,6 +5,7 @@ public enum SortOption : byte Name, DateModified, Size, - FileType + FileType, + OriginalPath } } \ No newline at end of file diff --git a/Files/Filesystem/ListedItem.cs b/Files/Filesystem/ListedItem.cs index 2bbe1ae1ee26..c8dd4e219732 100644 --- a/Files/Filesystem/ListedItem.cs +++ b/Files/Filesystem/ListedItem.cs @@ -3,6 +3,7 @@ using Microsoft.Toolkit.Mvvm.ComponentModel; using Microsoft.Toolkit.Uwp.Extensions; using System; +using System.IO; using Windows.Storage; using Windows.UI.Xaml.Media.Imaging; @@ -264,6 +265,8 @@ public RecycleBinItem(string folderRelativeId, string returnFormat) : base(folde // 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 class ShortcutItem : ListedItem diff --git a/Files/MultilingualResources/Files.de-DE.xlf b/Files/MultilingualResources/Files.de-DE.xlf index 3c4d001d6b2c..670ea0b3f920 100644 --- a/Files/MultilingualResources/Files.de-DE.xlf +++ b/Files/MultilingualResources/Files.de-DE.xlf @@ -1929,6 +1929,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.es-ES.xlf b/Files/MultilingualResources/Files.es-ES.xlf index 85cad40c679f..04849350d6d5 100644 --- a/Files/MultilingualResources/Files.es-ES.xlf +++ b/Files/MultilingualResources/Files.es-ES.xlf @@ -1928,6 +1928,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.fr-FR.xlf b/Files/MultilingualResources/Files.fr-FR.xlf index 9a8aa5536a12..e06cfafbcea8 100644 --- a/Files/MultilingualResources/Files.fr-FR.xlf +++ b/Files/MultilingualResources/Files.fr-FR.xlf @@ -1928,6 +1928,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.he-IL.xlf b/Files/MultilingualResources/Files.he-IL.xlf index f42d982a93db..97abfa52b76b 100644 --- a/Files/MultilingualResources/Files.he-IL.xlf +++ b/Files/MultilingualResources/Files.he-IL.xlf @@ -1926,6 +1926,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.hi-IN.xlf b/Files/MultilingualResources/Files.hi-IN.xlf index cf435fb74e7f..2f68c4c901ed 100644 --- a/Files/MultilingualResources/Files.hi-IN.xlf +++ b/Files/MultilingualResources/Files.hi-IN.xlf @@ -1936,6 +1936,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.hu-HU.xlf b/Files/MultilingualResources/Files.hu-HU.xlf index 3a7d868a9d36..00f05c18dafc 100644 --- a/Files/MultilingualResources/Files.hu-HU.xlf +++ b/Files/MultilingualResources/Files.hu-HU.xlf @@ -1928,6 +1928,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.it-IT.xlf b/Files/MultilingualResources/Files.it-IT.xlf index 1566085136ec..4077c39fc589 100644 --- a/Files/MultilingualResources/Files.it-IT.xlf +++ b/Files/MultilingualResources/Files.it-IT.xlf @@ -1929,6 +1929,14 @@ Context Menu Context Menu + + Original path + Percorso originale + + + Original path + Percorso originale + diff --git a/Files/MultilingualResources/Files.ja-JP.xlf b/Files/MultilingualResources/Files.ja-JP.xlf index 8996e86d1130..8eee54b7ba4d 100644 --- a/Files/MultilingualResources/Files.ja-JP.xlf +++ b/Files/MultilingualResources/Files.ja-JP.xlf @@ -1928,6 +1928,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.nl-NL.xlf b/Files/MultilingualResources/Files.nl-NL.xlf index e5a748bc51e4..40ccb66634bd 100644 --- a/Files/MultilingualResources/Files.nl-NL.xlf +++ b/Files/MultilingualResources/Files.nl-NL.xlf @@ -1938,6 +1938,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.or-IN.xlf b/Files/MultilingualResources/Files.or-IN.xlf index fe48eadcb7ba..8dc7869fad09 100644 --- a/Files/MultilingualResources/Files.or-IN.xlf +++ b/Files/MultilingualResources/Files.or-IN.xlf @@ -1936,6 +1936,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.pl-PL.xlf b/Files/MultilingualResources/Files.pl-PL.xlf index 9f0dd3940e1d..cb60682cc7fa 100644 --- a/Files/MultilingualResources/Files.pl-PL.xlf +++ b/Files/MultilingualResources/Files.pl-PL.xlf @@ -1937,6 +1937,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.pt-BR.xlf b/Files/MultilingualResources/Files.pt-BR.xlf index 76f45e0ec7c5..8df4c5179370 100644 --- a/Files/MultilingualResources/Files.pt-BR.xlf +++ b/Files/MultilingualResources/Files.pt-BR.xlf @@ -1928,6 +1928,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.ru-RU.xlf b/Files/MultilingualResources/Files.ru-RU.xlf index c5b89fd6ba46..0303d4f161e9 100644 --- a/Files/MultilingualResources/Files.ru-RU.xlf +++ b/Files/MultilingualResources/Files.ru-RU.xlf @@ -1928,6 +1928,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.ta.xlf b/Files/MultilingualResources/Files.ta.xlf index f7cba58b4a9d..7a88f906c1ab 100644 --- a/Files/MultilingualResources/Files.ta.xlf +++ b/Files/MultilingualResources/Files.ta.xlf @@ -1933,6 +1933,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.tr-TR.xlf b/Files/MultilingualResources/Files.tr-TR.xlf index d178ddc32070..4e9323d89044 100644 --- a/Files/MultilingualResources/Files.tr-TR.xlf +++ b/Files/MultilingualResources/Files.tr-TR.xlf @@ -1933,6 +1933,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.uk-UA.xlf b/Files/MultilingualResources/Files.uk-UA.xlf index 6d10434e0a6b..38ad7e699a84 100644 --- a/Files/MultilingualResources/Files.uk-UA.xlf +++ b/Files/MultilingualResources/Files.uk-UA.xlf @@ -1928,6 +1928,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.zh-Hans.xlf b/Files/MultilingualResources/Files.zh-Hans.xlf index a7224e367580..f29de3ba6fea 100644 --- a/Files/MultilingualResources/Files.zh-Hans.xlf +++ b/Files/MultilingualResources/Files.zh-Hans.xlf @@ -1933,6 +1933,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/MultilingualResources/Files.zh-Hant.xlf b/Files/MultilingualResources/Files.zh-Hant.xlf index fb1dcf6b6913..9cae78df652b 100644 --- a/Files/MultilingualResources/Files.zh-Hant.xlf +++ b/Files/MultilingualResources/Files.zh-Hant.xlf @@ -1935,6 +1935,14 @@ Context Menu Context Menu + + Original path + Original path + + + Original path + Original path + diff --git a/Files/Strings/en-US/Resources.resw b/Files/Strings/en-US/Resources.resw index 3dfa9c918c21..67dc12d6716e 100644 --- a/Files/Strings/en-US/Resources.resw +++ b/Files/Strings/en-US/Resources.resw @@ -1557,4 +1557,10 @@ Context Menu + + Original path + + + Original path + \ No newline at end of file diff --git a/Files/Strings/it-IT/Resources.resw b/Files/Strings/it-IT/Resources.resw index 2bdf0019feed..6bd8e8a5c9e3 100644 --- a/Files/Strings/it-IT/Resources.resw +++ b/Files/Strings/it-IT/Resources.resw @@ -1449,4 +1449,10 @@ Abilita impostazioni di visualizzazione per cartella + + Percorso originale + + + Percorso originale + \ No newline at end of file diff --git a/Files/View Models/FolderSettingsViewModel.cs b/Files/View Models/FolderSettingsViewModel.cs index 4bc17a2582cf..94e564041c69 100644 --- a/Files/View Models/FolderSettingsViewModel.cs +++ b/Files/View Models/FolderSettingsViewModel.cs @@ -236,7 +236,11 @@ private static void UpdateLayoutPreferencesForPath(string folderPath, LayoutPref { App.AppSettings.DefaultLayoutMode = prefs.LayoutMode; App.AppSettings.DefaultGridViewSize = prefs.GridViewSize; - App.AppSettings.DefaultDirectorySortOption = prefs.DirectorySortOption; + // Do not save OriginalPath as global sort option (only works in recycle bin) + if (prefs.DirectorySortOption != SortOption.OriginalPath) + { + App.AppSettings.DefaultDirectorySortOption = prefs.DirectorySortOption; + } App.AppSettings.DefaultDirectorySortDirection = prefs.DirectorySortDirection; } } diff --git a/Files/View Models/ItemViewModel.cs b/Files/View Models/ItemViewModel.cs index b0738fd5a83e..6be4cf43a7ce 100644 --- a/Files/View Models/ItemViewModel.cs +++ b/Files/View Models/ItemViewModel.cs @@ -166,6 +166,7 @@ public void UpdateSortOptionStatus() NotifyPropertyChanged(nameof(IsSortedByDate)); NotifyPropertyChanged(nameof(IsSortedByType)); NotifyPropertyChanged(nameof(IsSortedBySize)); + NotifyPropertyChanged(nameof(IsSortedByOriginalPath)); OrderFiles(); } @@ -189,6 +190,19 @@ public bool IsSortedByName } } + public bool IsSortedByOriginalPath + { + get => FolderSettings.DirectorySortOption == SortOption.OriginalPath; + set + { + if (value) + { + FolderSettings.DirectorySortOption = SortOption.OriginalPath; + NotifyPropertyChanged(nameof(IsSortedByOriginalPath)); + } + } + } + public bool IsSortedByDate { get => FolderSettings.DirectorySortOption == SortOption.DateModified; @@ -497,6 +511,10 @@ private IList OrderFiles2(IList listToSort) case SortOption.Size: orderFunc = item => item.FileSizeBytes; break; + + case SortOption.OriginalPath: + orderFunc = item => ((RecycleBinItem)item).ItemOriginalFolder; + break; } // In ascending order, show folders first, then files. diff --git a/Files/View Models/Properties/CombinedProperties.cs b/Files/View Models/Properties/CombinedProperties.cs index 2e714967992d..189b322c7609 100644 --- a/Files/View Models/Properties/CombinedProperties.cs +++ b/Files/View Models/Properties/CombinedProperties.cs @@ -44,8 +44,12 @@ public override void GetBaseProperties() { ViewModel.ItemType = "PropertiesDriveItemTypeDifferent".GetLocalized(); } - ViewModel.ItemPath = string.Format( - "PropertiesCombinedItemPath".GetLocalized(), Path.GetDirectoryName(List.First().ItemPath)); + var itemsPath = List.Select(Item => (Item as RecycleBinItem)?.ItemOriginalFolder ?? + (Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath)); + if (itemsPath.Distinct().Count() == 1) + { + ViewModel.ItemPath = string.Format("PropertiesCombinedItemPath".GetLocalized(), itemsPath.First()); + } } } diff --git a/Files/View Models/Properties/FileProperties.cs b/Files/View Models/Properties/FileProperties.cs index 6200e95cbe4b..af76afb3e29e 100644 --- a/Files/View Models/Properties/FileProperties.cs +++ b/Files/View Models/Properties/FileProperties.cs @@ -49,7 +49,8 @@ public override void GetBaseProperties() ViewModel.ItemName = Item.ItemName; ViewModel.OriginalItemName = Item.ItemName; ViewModel.ItemType = Item.ItemType; - ViewModel.ItemPath = Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath; + ViewModel.ItemPath = (Item as RecycleBinItem)?.ItemOriginalFolder ?? + (Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath); ViewModel.ItemModifiedTimestamp = Item.ItemDateModified; //ViewModel.FileIconSource = Item.FileImage; ViewModel.LoadFolderGlyph = Item.LoadFolderGlyph; diff --git a/Files/View Models/Properties/FolderProperties.cs b/Files/View Models/Properties/FolderProperties.cs index 7303c61c7b48..174b4ebe8da1 100644 --- a/Files/View Models/Properties/FolderProperties.cs +++ b/Files/View Models/Properties/FolderProperties.cs @@ -39,7 +39,8 @@ public override void GetBaseProperties() ViewModel.ItemName = Item.ItemName; ViewModel.OriginalItemName = Item.ItemName; ViewModel.ItemType = Item.ItemType; - ViewModel.ItemPath = Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath; + ViewModel.ItemPath = (Item as RecycleBinItem)?.ItemOriginalFolder ?? + (Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath); ViewModel.ItemModifiedTimestamp = Item.ItemDateModified; //ViewModel.FileIconSource = Item.FileImage; ViewModel.LoadFolderGlyph = Item.LoadFolderGlyph; diff --git a/Files/Views/LayoutModes/GenericFileBrowser.xaml b/Files/Views/LayoutModes/GenericFileBrowser.xaml index d916f18853f2..795357fc30c6 100644 --- a/Files/Views/LayoutModes/GenericFileBrowser.xaml +++ b/Files/Views/LayoutModes/GenericFileBrowser.xaml @@ -247,6 +247,13 @@ IsChecked="{x:Bind ParentShellPageInstance.FilesystemViewModel.IsSortedByName, Mode=TwoWay}" Tag="nameColumn" Text="Name" /> + + + + + + + + + +