Skip to content

Commit 4f24e7c

Browse files
authored
Feature: Added thread selection option when creating archives (#16094)
1 parent 4229553 commit 4f24e7c

File tree

8 files changed

+48
-0
lines changed

8 files changed

+48
-0
lines changed

src/Files.App/Actions/Content/Archives/Compress/CompressIntoArchiveAction.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public override async Task ExecuteAsync(object? parameter = null)
4040
sources,
4141
directory,
4242
dialog.FileName,
43+
dialog.CPUThreads,
4344
dialog.Password,
4445
dialog.FileFormat,
4546
dialog.CompressionLevel,

src/Files.App/Actions/Content/Archives/Compress/CompressIntoSevenZipAction.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public override Task ExecuteAsync(object? parameter = null)
2626
sources,
2727
directory,
2828
fileName,
29+
Environment.ProcessorCount,
2930
fileFormat: ArchiveFormats.SevenZip);
3031

3132
return StorageArchiveService.CompressAsync(compressionModel);

src/Files.App/Actions/Content/Archives/Compress/CompressIntoZipAction.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public override Task ExecuteAsync(object? parameter = null)
2626
sources,
2727
directory,
2828
fileName,
29+
Environment.ProcessorCount,
2930
fileFormat: ArchiveFormats.Zip);
3031

3132
return StorageArchiveService.CompressAsync(compressionModel);

src/Files.App/Data/Contracts/ICompressArchiveModel.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public interface ICompressArchiveModel
4747
/// 7zip archive splitting size.
4848
/// </summary>
4949
ArchiveSplittingSizes SplittingSize { get; }
50+
51+
/// <summary>
52+
/// Number of CPU Threads to use.
53+
/// </summary>
54+
int CPUThreads { get; }
5055

5156
/// <summary>
5257
/// Archiving progress.

src/Files.App/Data/Models/CompressArchiveModel.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,15 @@ public IProgress<StatusCenterItemProgressModel> Progress
108108

109109
/// <inheritdoc/>
110110
public CancellationToken CancellationToken { get; set; }
111+
112+
/// <inheritdoc/>
113+
public int CPUThreads { get; set; }
111114

112115
public CompressArchiveModel(
113116
string[] source,
114117
string directory,
115118
string fileName,
119+
int cpuThreads,
116120
string? password = null,
117121
ArchiveFormats fileFormat = ArchiveFormats.Zip,
118122
ArchiveCompressionLevels compressionLevel = ArchiveCompressionLevels.Normal,
@@ -128,6 +132,7 @@ public CompressArchiveModel(
128132
FileFormat = fileFormat;
129133
CompressionLevel = compressionLevel;
130134
SplittingSize = splittingSize;
135+
CPUThreads = cpuThreads;
131136
}
132137

133138
/// <inheritdoc/>
@@ -152,6 +157,8 @@ public async Task<bool> RunCreationAsync()
152157
PreserveDirectoryRoot = sources.Length > 1,
153158
};
154159

160+
compressor.CustomParameters.Add("mt", CPUThreads.ToString());
161+
155162
compressor.Compressing += Compressor_Compressing;
156163
compressor.FileCompressionStarted += Compressor_FileCompressionStarted;
157164
compressor.FileCompressionFinished += Compressor_FileCompressionFinished;

src/Files.App/Dialogs/CreateArchiveDialog.xaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
<RowDefinition Height="Auto" />
7878
<RowDefinition Height="Auto" />
7979
<RowDefinition Height="Auto" />
80+
<RowDefinition Height="Auto" />
8081
</Grid.RowDefinitions>
8182

8283
<!-- Archive Format -->
@@ -138,6 +139,22 @@
138139
</DataTemplate>
139140
</ComboBox.ItemTemplate>
140141
</ComboBox>
142+
143+
<!-- CPU Threads -->
144+
<TextBlock
145+
Grid.Row="3"
146+
Grid.Column="0"
147+
VerticalAlignment="Center"
148+
Text="{helpers:ResourceString Name=CPUThreads}" />
149+
<NumberBox
150+
Grid.Row="3"
151+
Grid.Column="1"
152+
HorizontalAlignment="Right"
153+
AutomationProperties.Name="{helpers:ResourceString Name=CPUThreads}"
154+
Maximum="{x:Bind ViewModel.CPUThreads, Mode=OneTime}"
155+
Minimum="1"
156+
SpinButtonPlacementMode="Inline"
157+
Value="{x:Bind ViewModel.CPUThreads, Mode=TwoWay}" />
141158
</Grid>
142159

143160
<!-- Encryption Options -->

src/Files.App/Dialogs/CreateArchiveDialog.xaml.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ public ArchiveSplittingSizes SplittingSize
5151
get => ViewModel.SplittingSize.Key;
5252
set => ViewModel.SplittingSize = ViewModel.SplittingSizes.First(size => size.Key == value);
5353
}
54+
55+
public int CPUThreads
56+
{
57+
get => ViewModel.CPUThreads;
58+
set => ViewModel.CPUThreads = value;
59+
}
5460

5561
private DialogViewModel ViewModel { get; } = new();
5662

@@ -145,6 +151,13 @@ public SplittingSizeItem SplittingSize
145151
get => splittingSize;
146152
set => SetProperty(ref splittingSize, value);
147153
}
154+
155+
private int cpuThreads = Environment.ProcessorCount;
156+
public int CPUThreads
157+
{
158+
get => cpuThreads;
159+
set => SetProperty(ref cpuThreads, value);
160+
}
148161

149162
private bool useEncryption = false;
150163
public bool UseEncryption

src/Files.App/Strings/en-US/Resources.resw

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3932,4 +3932,7 @@
39323932
<data name="ShowSystemTrayIcon" xml:space="preserve">
39333933
<value>Show Files icon in the System Tray</value>
39343934
</data>
3935+
<data name="CPUThreads" xml:space="preserve">
3936+
<value>CPU threads</value>
3937+
</data>
39353938
</root>

0 commit comments

Comments
 (0)