Skip to content

Commit d11895b

Browse files
authored
Recycle bin improvements (#2703)
1 parent edbfd2a commit d11895b

32 files changed

+258
-18
lines changed

Files/Enums/SortOption.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public enum SortOption : byte
55
Name,
66
DateModified,
77
Size,
8-
FileType
8+
FileType,
9+
OriginalPath
910
}
1011
}

Files/Filesystem/ListedItem.cs

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Microsoft.Toolkit.Mvvm.ComponentModel;
44
using Microsoft.Toolkit.Uwp.Extensions;
55
using System;
6+
using System.IO;
67
using Windows.Storage;
78
using Windows.UI.Xaml.Media.Imaging;
89

@@ -264,6 +265,8 @@ public RecycleBinItem(string folderRelativeId, string returnFormat) : base(folde
264265

265266
// For recycle bin elements (path + name)
266267
public string ItemOriginalPath { get; set; }
268+
// For recycle bin elements (path)
269+
public string ItemOriginalFolder => Path.IsPathRooted(ItemOriginalPath) ? Path.GetDirectoryName(ItemOriginalPath) : ItemOriginalPath;
267270
}
268271

269272
public class ShortcutItem : ListedItem

Files/MultilingualResources/Files.de-DE.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1929,6 +1929,14 @@
19291929
<source>Context Menu</source>
19301930
<target state="new">Context Menu</target>
19311931
</trans-unit>
1932+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1933+
<source>Original path</source>
1934+
<target state="new">Original path</target>
1935+
</trans-unit>
1936+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1937+
<source>Original path</source>
1938+
<target state="new">Original path</target>
1939+
</trans-unit>
19321940
</group>
19331941
</body>
19341942
</file>

Files/MultilingualResources/Files.es-ES.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1928,6 +1928,14 @@
19281928
<source>Context Menu</source>
19291929
<target state="new">Context Menu</target>
19301930
</trans-unit>
1931+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1932+
<source>Original path</source>
1933+
<target state="new">Original path</target>
1934+
</trans-unit>
1935+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1936+
<source>Original path</source>
1937+
<target state="new">Original path</target>
1938+
</trans-unit>
19311939
</group>
19321940
</body>
19331941
</file>

Files/MultilingualResources/Files.fr-FR.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1928,6 +1928,14 @@
19281928
<source>Context Menu</source>
19291929
<target state="new">Context Menu</target>
19301930
</trans-unit>
1931+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1932+
<source>Original path</source>
1933+
<target state="new">Original path</target>
1934+
</trans-unit>
1935+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1936+
<source>Original path</source>
1937+
<target state="new">Original path</target>
1938+
</trans-unit>
19311939
</group>
19321940
</body>
19331941
</file>

Files/MultilingualResources/Files.he-IL.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1926,6 +1926,14 @@
19261926
<source>Context Menu</source>
19271927
<target state="new">Context Menu</target>
19281928
</trans-unit>
1929+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1930+
<source>Original path</source>
1931+
<target state="new">Original path</target>
1932+
</trans-unit>
1933+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1934+
<source>Original path</source>
1935+
<target state="new">Original path</target>
1936+
</trans-unit>
19291937
</group>
19301938
</body>
19311939
</file>

Files/MultilingualResources/Files.hi-IN.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1936,6 +1936,14 @@
19361936
<source>Context Menu</source>
19371937
<target state="new">Context Menu</target>
19381938
</trans-unit>
1939+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1940+
<source>Original path</source>
1941+
<target state="new">Original path</target>
1942+
</trans-unit>
1943+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1944+
<source>Original path</source>
1945+
<target state="new">Original path</target>
1946+
</trans-unit>
19391947
</group>
19401948
</body>
19411949
</file>

Files/MultilingualResources/Files.hu-HU.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1928,6 +1928,14 @@
19281928
<source>Context Menu</source>
19291929
<target state="new">Context Menu</target>
19301930
</trans-unit>
1931+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1932+
<source>Original path</source>
1933+
<target state="new">Original path</target>
1934+
</trans-unit>
1935+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1936+
<source>Original path</source>
1937+
<target state="new">Original path</target>
1938+
</trans-unit>
19311939
</group>
19321940
</body>
19331941
</file>

Files/MultilingualResources/Files.it-IT.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1929,6 +1929,14 @@
19291929
<source>Context Menu</source>
19301930
<target state="new">Context Menu</target>
19311931
</trans-unit>
1932+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1933+
<source>Original path</source>
1934+
<target state="translated">Percorso originale</target>
1935+
</trans-unit>
1936+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1937+
<source>Original path</source>
1938+
<target state="translated">Percorso originale</target>
1939+
</trans-unit>
19321940
</group>
19331941
</body>
19341942
</file>

Files/MultilingualResources/Files.ja-JP.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1928,6 +1928,14 @@
19281928
<source>Context Menu</source>
19291929
<target state="new">Context Menu</target>
19301930
</trans-unit>
1931+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1932+
<source>Original path</source>
1933+
<target state="new">Original path</target>
1934+
</trans-unit>
1935+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1936+
<source>Original path</source>
1937+
<target state="new">Original path</target>
1938+
</trans-unit>
19311939
</group>
19321940
</body>
19331941
</file>

Files/MultilingualResources/Files.nl-NL.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1938,6 +1938,14 @@
19381938
<source>Context Menu</source>
19391939
<target state="new">Context Menu</target>
19401940
</trans-unit>
1941+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1942+
<source>Original path</source>
1943+
<target state="new">Original path</target>
1944+
</trans-unit>
1945+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1946+
<source>Original path</source>
1947+
<target state="new">Original path</target>
1948+
</trans-unit>
19411949
</group>
19421950
</body>
19431951
</file>

Files/MultilingualResources/Files.or-IN.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1936,6 +1936,14 @@
19361936
<source>Context Menu</source>
19371937
<target state="new">Context Menu</target>
19381938
</trans-unit>
1939+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1940+
<source>Original path</source>
1941+
<target state="new">Original path</target>
1942+
</trans-unit>
1943+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1944+
<source>Original path</source>
1945+
<target state="new">Original path</target>
1946+
</trans-unit>
19391947
</group>
19401948
</body>
19411949
</file>

Files/MultilingualResources/Files.pl-PL.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1937,6 +1937,14 @@
19371937
<source>Context Menu</source>
19381938
<target state="new">Context Menu</target>
19391939
</trans-unit>
1940+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1941+
<source>Original path</source>
1942+
<target state="new">Original path</target>
1943+
</trans-unit>
1944+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1945+
<source>Original path</source>
1946+
<target state="new">Original path</target>
1947+
</trans-unit>
19401948
</group>
19411949
</body>
19421950
</file>

Files/MultilingualResources/Files.pt-BR.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1928,6 +1928,14 @@
19281928
<source>Context Menu</source>
19291929
<target state="new">Context Menu</target>
19301930
</trans-unit>
1931+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1932+
<source>Original path</source>
1933+
<target state="new">Original path</target>
1934+
</trans-unit>
1935+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1936+
<source>Original path</source>
1937+
<target state="new">Original path</target>
1938+
</trans-unit>
19311939
</group>
19321940
</body>
19331941
</file>

Files/MultilingualResources/Files.ru-RU.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1928,6 +1928,14 @@
19281928
<source>Context Menu</source>
19291929
<target state="new">Context Menu</target>
19301930
</trans-unit>
1931+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1932+
<source>Original path</source>
1933+
<target state="new">Original path</target>
1934+
</trans-unit>
1935+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1936+
<source>Original path</source>
1937+
<target state="new">Original path</target>
1938+
</trans-unit>
19311939
</group>
19321940
</body>
19331941
</file>

Files/MultilingualResources/Files.ta.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1933,6 +1933,14 @@
19331933
<source>Context Menu</source>
19341934
<target state="new">Context Menu</target>
19351935
</trans-unit>
1936+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1937+
<source>Original path</source>
1938+
<target state="new">Original path</target>
1939+
</trans-unit>
1940+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1941+
<source>Original path</source>
1942+
<target state="new">Original path</target>
1943+
</trans-unit>
19361944
</group>
19371945
</body>
19381946
</file>

Files/MultilingualResources/Files.tr-TR.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1933,6 +1933,14 @@
19331933
<source>Context Menu</source>
19341934
<target state="new">Context Menu</target>
19351935
</trans-unit>
1936+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1937+
<source>Original path</source>
1938+
<target state="new">Original path</target>
1939+
</trans-unit>
1940+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1941+
<source>Original path</source>
1942+
<target state="new">Original path</target>
1943+
</trans-unit>
19361944
</group>
19371945
</body>
19381946
</file>

Files/MultilingualResources/Files.uk-UA.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1928,6 +1928,14 @@
19281928
<source>Context Menu</source>
19291929
<target state="new">Context Menu</target>
19301930
</trans-unit>
1931+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1932+
<source>Original path</source>
1933+
<target state="new">Original path</target>
1934+
</trans-unit>
1935+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1936+
<source>Original path</source>
1937+
<target state="new">Original path</target>
1938+
</trans-unit>
19311939
</group>
19321940
</body>
19331941
</file>

Files/MultilingualResources/Files.zh-Hans.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1933,6 +1933,14 @@
19331933
<source>Context Menu</source>
19341934
<target state="new">Context Menu</target>
19351935
</trans-unit>
1936+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1937+
<source>Original path</source>
1938+
<target state="new">Original path</target>
1939+
</trans-unit>
1940+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1941+
<source>Original path</source>
1942+
<target state="new">Original path</target>
1943+
</trans-unit>
19361944
</group>
19371945
</body>
19381946
</file>

Files/MultilingualResources/Files.zh-Hant.xlf

+8
Original file line numberDiff line numberDiff line change
@@ -1935,6 +1935,14 @@
19351935
<source>Context Menu</source>
19361936
<target state="new">Context Menu</target>
19371937
</trans-unit>
1938+
<trans-unit id="originalPathColumn.Header" translate="yes" xml:space="preserve">
1939+
<source>Original path</source>
1940+
<target state="new">Original path</target>
1941+
</trans-unit>
1942+
<trans-unit id="BaseLayoutContextFlyoutSortByOriginalPath.Text" translate="yes" xml:space="preserve">
1943+
<source>Original path</source>
1944+
<target state="new">Original path</target>
1945+
</trans-unit>
19381946
</group>
19391947
</body>
19401948
</file>

Files/Strings/en-US/Resources.resw

+6
Original file line numberDiff line numberDiff line change
@@ -1557,4 +1557,10 @@
15571557
<data name="SettingsPreferencesContextMenu.Text" xml:space="preserve">
15581558
<value>Context Menu</value>
15591559
</data>
1560+
<data name="originalPathColumn.Header" xml:space="preserve">
1561+
<value>Original path</value>
1562+
</data>
1563+
<data name="BaseLayoutContextFlyoutSortByOriginalPath.Text" xml:space="preserve">
1564+
<value>Original path</value>
1565+
</data>
15601566
</root>

Files/Strings/it-IT/Resources.resw

+6
Original file line numberDiff line numberDiff line change
@@ -1449,4 +1449,10 @@
14491449
<data name="SettingsEnableLayoutPreferencesPerFolder.Header" xml:space="preserve">
14501450
<value>Abilita impostazioni di visualizzazione per cartella</value>
14511451
</data>
1452+
<data name="originalPathColumn.Header" xml:space="preserve">
1453+
<value>Percorso originale</value>
1454+
</data>
1455+
<data name="BaseLayoutContextFlyoutSortByOriginalPath.Text" xml:space="preserve">
1456+
<value>Percorso originale</value>
1457+
</data>
14521458
</root>

Files/View Models/FolderSettingsViewModel.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,11 @@ private static void UpdateLayoutPreferencesForPath(string folderPath, LayoutPref
236236
{
237237
App.AppSettings.DefaultLayoutMode = prefs.LayoutMode;
238238
App.AppSettings.DefaultGridViewSize = prefs.GridViewSize;
239-
App.AppSettings.DefaultDirectorySortOption = prefs.DirectorySortOption;
239+
// Do not save OriginalPath as global sort option (only works in recycle bin)
240+
if (prefs.DirectorySortOption != SortOption.OriginalPath)
241+
{
242+
App.AppSettings.DefaultDirectorySortOption = prefs.DirectorySortOption;
243+
}
240244
App.AppSettings.DefaultDirectorySortDirection = prefs.DirectorySortDirection;
241245
}
242246
}

Files/View Models/ItemViewModel.cs

+18
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ public void UpdateSortOptionStatus()
166166
NotifyPropertyChanged(nameof(IsSortedByDate));
167167
NotifyPropertyChanged(nameof(IsSortedByType));
168168
NotifyPropertyChanged(nameof(IsSortedBySize));
169+
NotifyPropertyChanged(nameof(IsSortedByOriginalPath));
169170
OrderFiles();
170171
}
171172

@@ -189,6 +190,19 @@ public bool IsSortedByName
189190
}
190191
}
191192

193+
public bool IsSortedByOriginalPath
194+
{
195+
get => FolderSettings.DirectorySortOption == SortOption.OriginalPath;
196+
set
197+
{
198+
if (value)
199+
{
200+
FolderSettings.DirectorySortOption = SortOption.OriginalPath;
201+
NotifyPropertyChanged(nameof(IsSortedByOriginalPath));
202+
}
203+
}
204+
}
205+
192206
public bool IsSortedByDate
193207
{
194208
get => FolderSettings.DirectorySortOption == SortOption.DateModified;
@@ -497,6 +511,10 @@ private IList<ListedItem> OrderFiles2(IList<ListedItem> listToSort)
497511
case SortOption.Size:
498512
orderFunc = item => item.FileSizeBytes;
499513
break;
514+
515+
case SortOption.OriginalPath:
516+
orderFunc = item => ((RecycleBinItem)item).ItemOriginalFolder;
517+
break;
500518
}
501519

502520
// In ascending order, show folders first, then files.

Files/View Models/Properties/CombinedProperties.cs

+6-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,12 @@ public override void GetBaseProperties()
4444
{
4545
ViewModel.ItemType = "PropertiesDriveItemTypeDifferent".GetLocalized();
4646
}
47-
ViewModel.ItemPath = string.Format(
48-
"PropertiesCombinedItemPath".GetLocalized(), Path.GetDirectoryName(List.First().ItemPath));
47+
var itemsPath = List.Select(Item => (Item as RecycleBinItem)?.ItemOriginalFolder ??
48+
(Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath));
49+
if (itemsPath.Distinct().Count() == 1)
50+
{
51+
ViewModel.ItemPath = string.Format("PropertiesCombinedItemPath".GetLocalized(), itemsPath.First());
52+
}
4953
}
5054
}
5155

Files/View Models/Properties/FileProperties.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ public override void GetBaseProperties()
4949
ViewModel.ItemName = Item.ItemName;
5050
ViewModel.OriginalItemName = Item.ItemName;
5151
ViewModel.ItemType = Item.ItemType;
52-
ViewModel.ItemPath = Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath;
52+
ViewModel.ItemPath = (Item as RecycleBinItem)?.ItemOriginalFolder ??
53+
(Path.IsPathRooted(Item.ItemPath) ? Path.GetDirectoryName(Item.ItemPath) : Item.ItemPath);
5354
ViewModel.ItemModifiedTimestamp = Item.ItemDateModified;
5455
//ViewModel.FileIconSource = Item.FileImage;
5556
ViewModel.LoadFolderGlyph = Item.LoadFolderGlyph;

0 commit comments

Comments
 (0)