Skip to content

Commit 604d5ed

Browse files
authored
Feature: Added support for changing compress attribute for multiple files (#18234)
1 parent f1590ef commit 604d5ed

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public sealed override void GetBaseProperties()
5151
public override async Task GetSpecialPropertiesAsync()
5252
{
5353
bool allFiles = true, allReadOnly = true, allNotReadOnly = true, allHidden = true, allNotHidden = true;
54+
bool allCompressed = true, allNotCompressed = true, anyCanCompress = false;
5455
foreach (var x in List)
5556
{
5657
allFiles &= x.PrimaryItemAttribute == StorageItemTypes.File;
@@ -61,6 +62,10 @@ public override async Task GetSpecialPropertiesAsync()
6162
bool isHidden = fileAttributes.HasFlag(System.IO.FileAttributes.Hidden);
6263
allHidden &= isHidden;
6364
allNotHidden &= !isHidden;
65+
bool isCompressed = fileAttributes.HasFlag(System.IO.FileAttributes.Compressed);
66+
allCompressed &= isCompressed;
67+
allNotCompressed &= !isCompressed;
68+
anyCanCompress |= Win32Helper.CanCompressContent(x.ItemPath);
6469
}
6570

6671
if (allFiles)
@@ -80,6 +85,14 @@ public override async Task GetSpecialPropertiesAsync()
8085
else
8186
ViewModel.IsHidden = null;
8287

88+
ViewModel.CanCompressContent = anyCanCompress;
89+
if (allCompressed)
90+
ViewModel.IsContentCompressed = true;
91+
else if (allNotCompressed)
92+
ViewModel.IsContentCompressed = false;
93+
else
94+
ViewModel.IsContentCompressed = null;
95+
8396
ViewModel.LastSeparatorVisibility = false;
8497
ViewModel.ItemSizeVisibility = true;
8598

@@ -131,7 +144,7 @@ CloudDriveSyncStatus.FolderOnline or
131144
SetItemsCountString();
132145
}
133146

134-
private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
147+
private async void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
135148
{
136149
switch (e.PropertyName)
137150
{
@@ -174,9 +187,12 @@ private void ViewModel_PropertyChanged(object sender, System.ComponentModel.Prop
174187

175188
case "IsContentCompressed":
176189
{
177-
List.ForEach(x =>
190+
var isCompressed = ViewModel.IsContentCompressed ?? false;
191+
var items = List.Select(x => x.ItemPath).ToList();
192+
await Task.Run(() =>
178193
{
179-
Win32Helper.SetCompressionAttributeIoctl(x.ItemPath, ViewModel.IsContentCompressed ?? false);
194+
foreach (var path in items)
195+
Win32Helper.SetCompressionAttributeIoctl(path, isCompressed);
180196
});
181197
}
182198
break;

src/Files.App/Views/Properties/GeneralPage.xaml.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ async Task<bool> SaveCombinedAsync(IList<ListedItem> fileOrFolders)
128128
var itemMM = AppInstance?.SlimContentPage?.ItemManipulationModel;
129129
if (itemMM is not null) // null on homepage
130130
{
131+
ViewModel.IsContentCompressed = ViewModel.IsContentCompressedEditedValue;
132+
131133
foreach (var fileOrFolder in fileOrFolders)
132134
{
133135
if (ViewModel.IsHiddenEditedValue is not null)
@@ -140,7 +142,6 @@ await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() =>
140142
}
141143

142144
ViewModel.IsReadOnly = ViewModel.IsReadOnlyEditedValue;
143-
ViewModel.IsContentCompressed = ViewModel.IsContentCompressedEditedValue;
144145

145146
if (ViewModel.IsAblumCoverModified)
146147
{

0 commit comments

Comments
 (0)