diff --git a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs
index ca8e6ebdf3e3..48221e6454f8 100644
--- a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs
+++ b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs
@@ -250,6 +250,21 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty
///
FileNameConflictResolveOptionType ConflictsResolveOption { get; set; }
+ ///
+ /// Gets or sets a value indicating the default archive format.
+ ///
+ ArchiveFormats ArchiveFormatsOption { get; set; }
+
+ ///
+ /// Gets or sets a value indicating the default archive compression level.
+ ///
+ ArchiveCompressionLevels ArchiveCompressionLevelsOption { get; set; }
+
+ ///
+ /// Gets or sets a value indicating the default archive splitting size.
+ ///
+ ArchiveSplittingSizes ArchiveSplittingSizesOption { get; set; }
+
///
/// A dictionary to determine which hashes should be shown.
///
diff --git a/src/Files.App/Dialogs/CreateArchiveDialog.xaml.cs b/src/Files.App/Dialogs/CreateArchiveDialog.xaml.cs
index eb8fe6ca0876..f54d0227afbc 100644
--- a/src/Files.App/Dialogs/CreateArchiveDialog.xaml.cs
+++ b/src/Files.App/Dialogs/CreateArchiveDialog.xaml.cs
@@ -51,7 +51,7 @@ public ArchiveSplittingSizes SplittingSize
get => ViewModel.SplittingSize.Key;
set => ViewModel.SplittingSize = ViewModel.SplittingSizes.First(size => size.Key == value);
}
-
+
public int CPUThreads
{
get => ViewModel.CPUThreads;
@@ -107,6 +107,8 @@ private void ViewModel_PropertyChanged(object? _, PropertyChangedEventArgs e)
private sealed class DialogViewModel : ObservableObject
{
+ private readonly IGeneralSettingsService GeneralSettingsService = Ioc.Default.GetRequiredService();
+
public bool IsNameValid => FilesystemHelpers.IsValidForFilename(fileName);
public bool ShowNameWarning => !string.IsNullOrEmpty(fileName) && !IsNameValid;
@@ -125,33 +127,41 @@ public string FileName
}
}
- private FileFormatItem fileFormat;
public FileFormatItem FileFormat
{
- get => fileFormat;
+ get => FileFormats.First(format => format.Key == GeneralSettingsService.ArchiveFormatsOption);
set
{
- if (SetProperty(ref fileFormat, value))
+ if (value.Key != GeneralSettingsService.ArchiveFormatsOption)
+ {
+ GeneralSettingsService.ArchiveFormatsOption = value.Key;
OnPropertyChanged(nameof(CanSplit));
+ }
}
}
- private CompressionLevelItem compressionLevel;
public CompressionLevelItem CompressionLevel
{
- get => compressionLevel;
- set => SetProperty(ref compressionLevel, value);
+ get => CompressionLevels.First(level => level.Key == GeneralSettingsService.ArchiveCompressionLevelsOption);
+ set
+ {
+ if (value.Key != GeneralSettingsService.ArchiveCompressionLevelsOption)
+ GeneralSettingsService.ArchiveCompressionLevelsOption = value.Key;
+ }
}
public bool CanSplit => FileFormat.Key is ArchiveFormats.SevenZip;
- private SplittingSizeItem splittingSize;
public SplittingSizeItem SplittingSize
{
- get => splittingSize;
- set => SetProperty(ref splittingSize, value);
+ get => SplittingSizes.First(size => size.Key == GeneralSettingsService.ArchiveSplittingSizesOption);
+ set
+ {
+ if (value.Key != GeneralSettingsService.ArchiveSplittingSizesOption)
+ GeneralSettingsService.ArchiveSplittingSizesOption = value.Key;
+ }
}
-
+
private int cpuThreads = Environment.ProcessorCount;
public int CPUThreads
{
@@ -215,9 +225,7 @@ public string Password
public DialogViewModel()
{
- fileFormat = FileFormats.First(format => format.Key is ArchiveFormats.Zip);
- compressionLevel = CompressionLevels.First(level => level.Key is ArchiveCompressionLevels.Normal);
- splittingSize = SplittingSizes.First(size => size.Key is ArchiveSplittingSizes.None);
+
}
private static string ToSizeText(ulong megaBytes) => ByteSize.FromMebiBytes(megaBytes).ShortString;
diff --git a/src/Files.App/Services/Settings/GeneralSettingsService.cs b/src/Files.App/Services/Settings/GeneralSettingsService.cs
index dfe850dc337f..8000e8532ccf 100644
--- a/src/Files.App/Services/Settings/GeneralSettingsService.cs
+++ b/src/Files.App/Services/Settings/GeneralSettingsService.cs
@@ -309,6 +309,24 @@ public FileNameConflictResolveOptionType ConflictsResolveOption
set => Set((long)value);
}
+ public ArchiveFormats ArchiveFormatsOption
+ {
+ get => (ArchiveFormats)Get((long)ArchiveFormats.Zip);
+ set => Set((long)value);
+ }
+
+ public ArchiveCompressionLevels ArchiveCompressionLevelsOption
+ {
+ get => (ArchiveCompressionLevels)Get((long)ArchiveCompressionLevels.Normal);
+ set => Set((long)value);
+ }
+
+ public ArchiveSplittingSizes ArchiveSplittingSizesOption
+ {
+ get => (ArchiveSplittingSizes)Get((long)ArchiveSplittingSizes.None);
+ set => Set((long)value);
+ }
+
public Dictionary ShowHashesDictionary
{
get => Get>(null);