Skip to content

Commit 857f38c

Browse files
committed
Feature: Save archive creation settings
1 parent 5672540 commit 857f38c

File tree

3 files changed

+54
-14
lines changed

3 files changed

+54
-14
lines changed

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

+15
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,21 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty
250250
/// </summary>
251251
FileNameConflictResolveOptionType ConflictsResolveOption { get; set; }
252252

253+
/// <summary>
254+
/// Gets or sets a value indicating the default archive format.
255+
/// </summary>
256+
ArchiveFormats ArchiveFormatsOption { get; set; }
257+
258+
/// <summary>
259+
/// Gets or sets a value indicating the default archive compression level.
260+
/// </summary>
261+
ArchiveCompressionLevels ArchiveCompressionLevelsOption { get; set; }
262+
263+
/// <summary>
264+
/// Gets or sets a value indicating the default archive splitting size.
265+
/// </summary>
266+
ArchiveSplittingSizes ArchiveSplittingSizesOption { get; set; }
267+
253268
/// <summary>
254269
/// A dictionary to determine which hashes should be shown.
255270
/// </summary>

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

+21-14
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public ArchiveSplittingSizes SplittingSize
5151
get => ViewModel.SplittingSize.Key;
5252
set => ViewModel.SplittingSize = ViewModel.SplittingSizes.First(size => size.Key == value);
5353
}
54-
54+
5555
public int CPUThreads
5656
{
5757
get => ViewModel.CPUThreads;
@@ -107,6 +107,7 @@ private void ViewModel_PropertyChanged(object? _, PropertyChangedEventArgs e)
107107

108108
private sealed class DialogViewModel : ObservableObject
109109
{
110+
private readonly IGeneralSettingsService GeneralSettingsService = Ioc.Default.GetRequiredService<IGeneralSettingsService>();
110111
public bool IsNameValid => FilesystemHelpers.IsValidForFilename(fileName);
111112

112113
public bool ShowNameWarning => !string.IsNullOrEmpty(fileName) && !IsNameValid;
@@ -125,33 +126,41 @@ public string FileName
125126
}
126127
}
127128

128-
private FileFormatItem fileFormat;
129129
public FileFormatItem FileFormat
130130
{
131-
get => fileFormat;
131+
get => FileFormats.First(format => format.Key == GeneralSettingsService.ArchiveFormatsOption);
132132
set
133133
{
134-
if (SetProperty(ref fileFormat, value))
134+
if (value.Key != GeneralSettingsService.ArchiveFormatsOption)
135+
{
136+
GeneralSettingsService.ArchiveFormatsOption = value.Key;
135137
OnPropertyChanged(nameof(CanSplit));
138+
}
136139
}
137140
}
138141

139-
private CompressionLevelItem compressionLevel;
140142
public CompressionLevelItem CompressionLevel
141143
{
142-
get => compressionLevel;
143-
set => SetProperty(ref compressionLevel, value);
144+
get => CompressionLevels.First(level => level.Key == GeneralSettingsService.ArchiveCompressionLevelsOption);
145+
set
146+
{
147+
if (value.Key != GeneralSettingsService.ArchiveCompressionLevelsOption)
148+
GeneralSettingsService.ArchiveCompressionLevelsOption = value.Key;
149+
}
144150
}
145151

146152
public bool CanSplit => FileFormat.Key is ArchiveFormats.SevenZip;
147153

148-
private SplittingSizeItem splittingSize;
149154
public SplittingSizeItem SplittingSize
150155
{
151-
get => splittingSize;
152-
set => SetProperty(ref splittingSize, value);
156+
get => SplittingSizes.First(size => size.Key == GeneralSettingsService.ArchiveSplittingSizesOption);
157+
set
158+
{
159+
if (value.Key != GeneralSettingsService.ArchiveSplittingSizesOption)
160+
GeneralSettingsService.ArchiveSplittingSizesOption = value.Key;
161+
}
153162
}
154-
163+
155164
private int cpuThreads = Environment.ProcessorCount;
156165
public int CPUThreads
157166
{
@@ -215,9 +224,7 @@ public string Password
215224

216225
public DialogViewModel()
217226
{
218-
fileFormat = FileFormats.First(format => format.Key is ArchiveFormats.Zip);
219-
compressionLevel = CompressionLevels.First(level => level.Key is ArchiveCompressionLevels.Normal);
220-
splittingSize = SplittingSizes.First(size => size.Key is ArchiveSplittingSizes.None);
227+
221228
}
222229

223230
private static string ToSizeText(ulong megaBytes) => ByteSize.FromMebiBytes(megaBytes).ShortString;

src/Files.App/Services/Settings/GeneralSettingsService.cs

+18
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,24 @@ public FileNameConflictResolveOptionType ConflictsResolveOption
309309
set => Set((long)value);
310310
}
311311

312+
public ArchiveFormats ArchiveFormatsOption
313+
{
314+
get => (ArchiveFormats)Get((long)ArchiveFormats.Zip);
315+
set => Set((long)value);
316+
}
317+
318+
public ArchiveCompressionLevels ArchiveCompressionLevelsOption
319+
{
320+
get => (ArchiveCompressionLevels)Get((long)ArchiveCompressionLevels.Normal);
321+
set => Set((long)value);
322+
}
323+
324+
public ArchiveSplittingSizes ArchiveSplittingSizesOption
325+
{
326+
get => (ArchiveSplittingSizes)Get((long)ArchiveSplittingSizes.None);
327+
set => Set((long)value);
328+
}
329+
312330
public Dictionary<string, bool> ShowHashesDictionary
313331
{
314332
get => Get<Dictionary<string, bool>>(null);

0 commit comments

Comments
 (0)