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);