From 8e27a7dbc8c0dccfb89d4ef3ad8cea68bbeb312d Mon Sep 17 00:00:00 2001 From: manfromarce Date: Mon, 28 Nov 2022 12:01:56 +0100 Subject: [PATCH 01/30] Add UI and logic for changing default sorting and grouping options --- .../Settings/LayoutSettingsService.cs | 6 ++ src/Files.App/Strings/en-US/Resources.resw | 6 ++ .../ViewModels/FolderSettingsViewModel.cs | 92 ++++++++++++++---- src/Files.App/ViewModels/ItemViewModel.cs | 4 + .../PreferencesViewModel.cs | 97 +++++++++++++++++++ .../Views/SettingsPages/Preferences.xaml | 60 +++++++++++- .../Settings/ILayoutSettingsService.cs | 2 + 7 files changed, 241 insertions(+), 26 deletions(-) diff --git a/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs b/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs index db36f66467d6..62759e3ba0a0 100644 --- a/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs +++ b/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs @@ -12,6 +12,12 @@ public LayoutSettingsService(ISettingsSharingContext settingsSharingContext) RegisterSettingsContext(settingsSharingContext); } + public bool EnableOverridingSortingPreferences + { + get => Get(true); + set => Set(value); + } + public int DefaultGridViewSize { get => (int)Get((long)Constants.Browser.GridViewBrowser.GridViewSizeSmall); diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index e3d5582c8cb2..a3c1769d1454 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -2859,4 +2859,10 @@ Path + + Sorting and grouping + + + Enable overriding sorting preferences in individual directories + \ No newline at end of file diff --git a/src/Files.App/ViewModels/FolderSettingsViewModel.cs b/src/Files.App/ViewModels/FolderSettingsViewModel.cs index a631e898b7f6..61a37a8fa942 100644 --- a/src/Files.App/ViewModels/FolderSettingsViewModel.cs +++ b/src/Files.App/ViewModels/FolderSettingsViewModel.cs @@ -287,31 +287,76 @@ public ColumnsViewModel ColumnsViewModel private static LayoutPreferences GetLayoutPreferencesForPath(string folderPath) { IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService(); - if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) + + var layout = LayoutPreferences.DefaultLayoutPreferences; + + if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences || userSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences) { folderPath = folderPath.TrimPath(); var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath); - return ReadLayoutPreferencesFromDb(folderPath, folderFRN) + + layout = ReadLayoutPreferencesFromDb(folderPath, folderFRN) ?? ReadLayoutPreferencesFromAds(folderPath, folderFRN) ?? GetDefaultLayoutPreferences(folderPath); + + if (!userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) + { + var defaultLayout = userSettingsService.FoldersSettingsService.DefaultLayoutMode; + layout.LayoutMode = defaultLayout is FolderLayoutModes.Adaptive ? FolderLayoutModes.DetailsView : defaultLayout; + layout.IsAdaptiveLayoutOverridden = defaultLayout is not FolderLayoutModes.Adaptive; + layout.GridViewSize = userSettingsService.LayoutSettingsService.DefaultGridViewSize; + layout.ColumnsViewModel = new ColumnsViewModel(); + layout.ColumnsViewModel.DateCreatedColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowDateCreatedColumn; + layout.ColumnsViewModel.DateModifiedColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowDateColumn; + layout.ColumnsViewModel.ItemTypeColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowTypeColumn; + layout.ColumnsViewModel.SizeColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowSizeColumn; + layout.ColumnsViewModel.TagColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowFileTagColumn; + + layout.ColumnsViewModel.NameColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.NameColumnWidth; + layout.ColumnsViewModel.DateModifiedColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.DateModifiedColumnWidth; + layout.ColumnsViewModel.DateCreatedColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.DateCreatedColumnWidth; + layout.ColumnsViewModel.ItemTypeColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.TypeColumnWidth; + layout.ColumnsViewModel.SizeColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.SizeColumnWidth; + layout.ColumnsViewModel.TagColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.TagColumnWidth; + } + + if (!userSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences) + { + layout.DirectorySortOption = userSettingsService.LayoutSettingsService.DefaultDirectorySortOption; + layout.DirectorySortDirection = userSettingsService.LayoutSettingsService.DefaultDirectorySortDirection; + layout.DirectoryGroupOption = userSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption; + layout.SortDirectoriesAlongsideFiles = userSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; + } } - return LayoutPreferences.DefaultLayoutPreferences; + return layout; } public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferences prefs) { IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService(); - if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) - { - var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath); - WriteLayoutPreferencesToDb(folderPath.TrimPath(), folderFRN, prefs); - } - else + if(!userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) { userSettingsService.FoldersSettingsService.DefaultLayoutMode = prefs.LayoutMode; userSettingsService.LayoutSettingsService.DefaultGridViewSize = prefs.GridViewSize; + + userSettingsService.FoldersSettingsService.ShowDateColumn = !prefs.ColumnsViewModel.DateModifiedColumn.UserCollapsed; + userSettingsService.FoldersSettingsService.ShowDateCreatedColumn = !prefs.ColumnsViewModel.DateCreatedColumn.UserCollapsed; + userSettingsService.FoldersSettingsService.ShowTypeColumn = !prefs.ColumnsViewModel.ItemTypeColumn.UserCollapsed; + userSettingsService.FoldersSettingsService.ShowSizeColumn = !prefs.ColumnsViewModel.SizeColumn.UserCollapsed; + userSettingsService.FoldersSettingsService.ShowFileTagColumn = !prefs.ColumnsViewModel.TagColumn.UserCollapsed; + + userSettingsService.FoldersSettingsService.NameColumnWidth = prefs.ColumnsViewModel.NameColumn.UserLengthPixels; + userSettingsService.FoldersSettingsService.DateModifiedColumnWidth = prefs.ColumnsViewModel.DateModifiedColumn.UserLengthPixels; + userSettingsService.FoldersSettingsService.DateCreatedColumnWidth = prefs.ColumnsViewModel.DateCreatedColumn.UserLengthPixels; + userSettingsService.FoldersSettingsService.TypeColumnWidth = prefs.ColumnsViewModel.ItemTypeColumn.UserLengthPixels; + userSettingsService.FoldersSettingsService.SizeColumnWidth = prefs.ColumnsViewModel.SizeColumn.UserLengthPixels; + userSettingsService.FoldersSettingsService.TagColumnWidth = prefs.ColumnsViewModel.TagColumn.UserLengthPixels; + } + + if (!userSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences) + { // Do not save OriginalPath as global sort option (only works in recycle bin) if (prefs.DirectorySortOption != SortOption.OriginalFolder && prefs.DirectorySortOption != SortOption.DateDeleted && @@ -328,19 +373,12 @@ public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferen } userSettingsService.LayoutSettingsService.DefaultDirectorySortDirection = prefs.DirectorySortDirection; userSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles; + } - userSettingsService.FoldersSettingsService.ShowDateColumn = !prefs.ColumnsViewModel.DateModifiedColumn.UserCollapsed; - userSettingsService.FoldersSettingsService.ShowDateCreatedColumn = !prefs.ColumnsViewModel.DateCreatedColumn.UserCollapsed; - userSettingsService.FoldersSettingsService.ShowTypeColumn = !prefs.ColumnsViewModel.ItemTypeColumn.UserCollapsed; - userSettingsService.FoldersSettingsService.ShowSizeColumn = !prefs.ColumnsViewModel.SizeColumn.UserCollapsed; - userSettingsService.FoldersSettingsService.ShowFileTagColumn = !prefs.ColumnsViewModel.TagColumn.UserCollapsed; - - userSettingsService.FoldersSettingsService.NameColumnWidth = prefs.ColumnsViewModel.NameColumn.UserLengthPixels; - userSettingsService.FoldersSettingsService.DateModifiedColumnWidth = prefs.ColumnsViewModel.DateModifiedColumn.UserLengthPixels; - userSettingsService.FoldersSettingsService.DateCreatedColumnWidth = prefs.ColumnsViewModel.DateCreatedColumn.UserLengthPixels; - userSettingsService.FoldersSettingsService.TypeColumnWidth = prefs.ColumnsViewModel.ItemTypeColumn.UserLengthPixels; - userSettingsService.FoldersSettingsService.SizeColumnWidth = prefs.ColumnsViewModel.SizeColumn.UserLengthPixels; - userSettingsService.FoldersSettingsService.TagColumnWidth = prefs.ColumnsViewModel.TagColumn.UserLengthPixels; + if(userSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences || userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) + { + var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath); + WriteLayoutPreferencesToDb(folderPath.TrimPath(), folderFRN, prefs); } } @@ -499,10 +537,22 @@ public void OnDefaultPreferencesChanged(string folderPath, string settingsName) case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles): SortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles; break; + case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption): + DirectorySortOption = prefs.DirectorySortOption; + break; + case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection): + DirectorySortDirection = prefs.DirectorySortDirection; + break; + case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption): + DirectoryGroupOption = prefs.DirectoryGroupOption; + break; case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences): LayoutPreference = prefs; // TODO: update layout break; + case nameof(UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences): + LayoutPreference = prefs; + break; } } diff --git a/src/Files.App/ViewModels/ItemViewModel.cs b/src/Files.App/ViewModels/ItemViewModel.cs index 483157c1e0a0..3d166f7930c8 100644 --- a/src/Files.App/ViewModels/ItemViewModel.cs +++ b/src/Files.App/ViewModels/ItemViewModel.cs @@ -496,7 +496,11 @@ await dispatcherQueue.EnqueueAsync(() => RefreshItems(null); }); break; + case nameof(UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences): + case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption): + case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection): case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles): + case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption): case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences): await dispatcherQueue.EnqueueAsync(() => { diff --git a/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs index bed13a10439d..7216f8408c62 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs @@ -112,6 +112,9 @@ public PreferencesViewModel() AddDateTimeOptions(); SelectedDateTimeFormatIndex = (int)Enum.Parse(typeof(DateTimeFormats), DateTimeFormat.ToString()); + SelectedDefaultSortingIndex = DefaultSortOption == SortOption.FileTag ? 5 : (int)DefaultSortOption; + SelectedDefaultSortDirectionIndex = (int)DefaultSortDirection; + SelectedDefaultGroupingIndex = DefaultGroupOption == GroupOption.FileTag ? 6 : (int)DefaultGroupOption; dispatcherQueue = DispatcherQueue.GetForCurrentThread(); @@ -462,6 +465,19 @@ public bool SelectFilesOnHover } } + public bool EnableOverridingSortingPreferences + { + get => UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences; + set + { + if (value != UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences) + { + UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences = value; + OnPropertyChanged(); + } + } + } + public bool ListAndSortDirectoriesAlongsideFiles { get => UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; @@ -475,6 +491,87 @@ public bool ListAndSortDirectoriesAlongsideFiles } } + private int selectedDefaultSortingIndex; + public int SelectedDefaultSortingIndex + { + get => selectedDefaultSortingIndex; + set + { + if (SetProperty(ref selectedDefaultSortingIndex, value)) + { + OnPropertyChanged(nameof(SelectedDefaultSortingIndex)); + DefaultSortOption = value < 5 ? (SortOption)value : SortOption.FileTag; + } + } + } + + private int selectedDefaultSortDirectionIndex; + public int SelectedDefaultSortDirectionIndex + { + get => selectedDefaultSortDirectionIndex; + set + { + if (SetProperty(ref selectedDefaultSortDirectionIndex, value)) + { + OnPropertyChanged(nameof(SelectedDefaultSortDirectionIndex)); + DefaultSortDirection = (SortDirection)value; + } + } + } + + private int selectedDefaultGroupingIndex; + public int SelectedDefaultGroupingIndex + { + get => selectedDefaultGroupingIndex; + set + { + if (SetProperty(ref selectedDefaultGroupingIndex, value)) + { + OnPropertyChanged(nameof(SelectedDefaultGroupingIndex)); + DefaultGroupOption = value < 6 ? (GroupOption)value : GroupOption.FileTag; + } + } + } + + public SortOption DefaultSortOption + { + get => UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption; + set + { + if (value != UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption) + { + UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption = value; + OnPropertyChanged(); + } + } + } + + public SortDirection DefaultSortDirection + { + get => UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection; + set + { + if (value != UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection) + { + UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection = value; + OnPropertyChanged(); + } + } + } + + public GroupOption DefaultGroupOption + { + get => UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption; + set + { + if (value != UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption) + { + UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption = value; + OnPropertyChanged(); + } + } + } + public bool SearchUnindexedItems { get => UserSettingsService.PreferencesSettingsService.SearchUnindexedItems; diff --git a/src/Files.App/Views/SettingsPages/Preferences.xaml b/src/Files.App/Views/SettingsPages/Preferences.xaml index e3f9dc700646..d1dac80bef89 100644 --- a/src/Files.App/Views/SettingsPages/Preferences.xaml +++ b/src/Files.App/Views/SettingsPages/Preferences.xaml @@ -116,6 +116,33 @@ Style="{StaticResource RightAlignedToggleSwitchStyle}" /> + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs b/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs index d10a5b80213d..b6a8cdaefb9d 100644 --- a/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs +++ b/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs @@ -15,5 +15,7 @@ public interface ILayoutSettingsService : IBaseSettingsService, INotifyPropertyC bool DefaultSortDirectoriesAlongsideFiles { get; set; } GroupOption DefaultDirectoryGroupOption { get; set; } + + bool EnableOverridingSortingPreferences { get; set; } } } From 818efb76ad27a5934fd792875b6629a6d4a679b6 Mon Sep 17 00:00:00 2001 From: manfromarce Date: Tue, 29 Nov 2022 11:11:47 +0100 Subject: [PATCH 02/30] Changes to match new requirements --- .../LayoutPreferences/LayoutPreferences.cs | 6 +- .../Settings/FoldersSettingsService.cs | 19 ++++ .../Settings/LayoutSettingsService.cs | 24 ----- src/Files.App/Strings/en-US/Resources.resw | 3 - .../ViewModels/FolderSettingsViewModel.cs | 100 +++++------------- src/Files.App/ViewModels/ItemViewModel.cs | 7 +- .../SettingsViewModels/FoldersViewModel.cs | 84 +++++++++++++++ .../PreferencesViewModel.cs | 100 +----------------- .../Views/SettingsPages/Folders.xaml | 40 +++++++ .../Views/SettingsPages/Preferences.xaml | 62 ++--------- .../Settings/IFoldersSettingsService.cs | 15 +++ .../Settings/ILayoutSettingsService.cs | 9 -- 12 files changed, 196 insertions(+), 273 deletions(-) diff --git a/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs b/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs index f3ab7be69d42..63eb8c658b9c 100644 --- a/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs +++ b/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs @@ -28,9 +28,9 @@ public LayoutPreferences() this.LayoutMode = defaultLayout is FolderLayoutModes.Adaptive ? FolderLayoutModes.DetailsView : defaultLayout; this.GridViewSize = UserSettingsService.LayoutSettingsService.DefaultGridViewSize; - this.DirectorySortOption = UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption; - this.DirectoryGroupOption = UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption; - this.DirectorySortDirection = UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection; + this.DirectorySortOption = UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption; + this.DirectoryGroupOption = UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption; + this.DirectorySortDirection = UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection; this.SortDirectoriesAlongsideFiles = UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; this.IsAdaptiveLayoutOverridden = defaultLayout is not FolderLayoutModes.Adaptive; diff --git a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs index 804e0d6bc6c2..f3793e2c4236 100644 --- a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs +++ b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs @@ -207,6 +207,25 @@ public bool CalculateFolderSizes get => Get(false); set => Set(value); } + + public SortDirection DefaultDirectorySortDirection + { + get => (SortDirection)Get((long)SortDirection.Ascending); + set => Set((long)value); + } + + public SortOption DefaultDirectorySortOption + { + get => (SortOption)Get((long)SortOption.Name); + set => Set((long)value); + } + + public GroupOption DefaultDirectoryGroupOption + { + get => (GroupOption)Get((long)GroupOption.None); + set => Set((long)value); + } + protected override void RaiseOnSettingChangedEvent(object sender, SettingChangedEventArgs e) { switch (e.SettingName) diff --git a/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs b/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs index 62759e3ba0a0..202a692ede87 100644 --- a/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs +++ b/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs @@ -12,40 +12,16 @@ public LayoutSettingsService(ISettingsSharingContext settingsSharingContext) RegisterSettingsContext(settingsSharingContext); } - public bool EnableOverridingSortingPreferences - { - get => Get(true); - set => Set(value); - } - public int DefaultGridViewSize { get => (int)Get((long)Constants.Browser.GridViewBrowser.GridViewSizeSmall); set => Set((long)value); } - public SortDirection DefaultDirectorySortDirection - { - get => (SortDirection)Get((long)SortDirection.Ascending); - set => Set((long)value); - } - - public SortOption DefaultDirectorySortOption - { - get => (SortOption)Get((long)SortOption.Name); - set => Set((long)value); - } - public bool DefaultSortDirectoriesAlongsideFiles { get => Get(false); set => Set(value); } - - public GroupOption DefaultDirectoryGroupOption - { - get => (GroupOption)Get((long)GroupOption.None); - set => Set((long)value); - } } } diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 676943aae40c..b9181f4d2811 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -2865,9 +2865,6 @@ Sorting and grouping - - Enable overriding sorting preferences in individual directories - Archive diff --git a/src/Files.App/ViewModels/FolderSettingsViewModel.cs b/src/Files.App/ViewModels/FolderSettingsViewModel.cs index 4feaa7c162a2..495e2afc8489 100644 --- a/src/Files.App/ViewModels/FolderSettingsViewModel.cs +++ b/src/Files.App/ViewModels/FolderSettingsViewModel.cs @@ -287,59 +287,47 @@ public ColumnsViewModel ColumnsViewModel private static LayoutPreferences GetLayoutPreferencesForPath(string folderPath) { IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService(); - - var layout = LayoutPreferences.DefaultLayoutPreferences; - - if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences || userSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences) + if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) { folderPath = folderPath.TrimPath(); var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath); - - layout = ReadLayoutPreferencesFromDb(folderPath, folderFRN) + return ReadLayoutPreferencesFromDb(folderPath, folderFRN) ?? ReadLayoutPreferencesFromAds(folderPath, folderFRN) ?? GetDefaultLayoutPreferences(folderPath); - - if (!userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) - { - var defaultLayout = userSettingsService.FoldersSettingsService.DefaultLayoutMode; - layout.LayoutMode = defaultLayout is FolderLayoutModes.Adaptive ? FolderLayoutModes.DetailsView : defaultLayout; - layout.IsAdaptiveLayoutOverridden = defaultLayout is not FolderLayoutModes.Adaptive; - layout.GridViewSize = userSettingsService.LayoutSettingsService.DefaultGridViewSize; - layout.ColumnsViewModel = new ColumnsViewModel(); - layout.ColumnsViewModel.DateCreatedColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowDateCreatedColumn; - layout.ColumnsViewModel.DateModifiedColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowDateColumn; - layout.ColumnsViewModel.ItemTypeColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowTypeColumn; - layout.ColumnsViewModel.SizeColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowSizeColumn; - layout.ColumnsViewModel.TagColumn.UserCollapsed = !userSettingsService.FoldersSettingsService.ShowFileTagColumn; - - layout.ColumnsViewModel.NameColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.NameColumnWidth; - layout.ColumnsViewModel.DateModifiedColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.DateModifiedColumnWidth; - layout.ColumnsViewModel.DateCreatedColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.DateCreatedColumnWidth; - layout.ColumnsViewModel.ItemTypeColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.TypeColumnWidth; - layout.ColumnsViewModel.SizeColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.SizeColumnWidth; - layout.ColumnsViewModel.TagColumn.UserLengthPixels = userSettingsService.FoldersSettingsService.TagColumnWidth; - } - - if (!userSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences) - { - layout.DirectorySortOption = userSettingsService.LayoutSettingsService.DefaultDirectorySortOption; - layout.DirectorySortDirection = userSettingsService.LayoutSettingsService.DefaultDirectorySortDirection; - layout.DirectoryGroupOption = userSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption; - layout.SortDirectoriesAlongsideFiles = userSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; - } } - return layout; + return LayoutPreferences.DefaultLayoutPreferences; } public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferences prefs) { IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService(); - if(!userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) + if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) + { + var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath); + WriteLayoutPreferencesToDb(folderPath.TrimPath(), folderFRN, prefs); + } + else { userSettingsService.FoldersSettingsService.DefaultLayoutMode = prefs.LayoutMode; userSettingsService.LayoutSettingsService.DefaultGridViewSize = prefs.GridViewSize; + // Do not save OriginalPath as global sort option (only works in recycle bin) + if (prefs.DirectorySortOption != SortOption.OriginalFolder && + prefs.DirectorySortOption != SortOption.DateDeleted && + prefs.DirectorySortOption != SortOption.SyncStatus) + { + userSettingsService.FoldersSettingsService.DefaultDirectorySortOption = prefs.DirectorySortOption; + } + if (prefs.DirectoryGroupOption != GroupOption.OriginalFolder && + prefs.DirectoryGroupOption != GroupOption.DateDeleted && + prefs.DirectoryGroupOption != GroupOption.FolderPath && + prefs.DirectoryGroupOption != GroupOption.SyncStatus) + { + userSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption = prefs.DirectoryGroupOption; + } + userSettingsService.FoldersSettingsService.DefaultDirectorySortDirection = prefs.DirectorySortDirection; + userSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles; userSettingsService.FoldersSettingsService.ShowDateColumn = !prefs.ColumnsViewModel.DateModifiedColumn.UserCollapsed; userSettingsService.FoldersSettingsService.ShowDateCreatedColumn = !prefs.ColumnsViewModel.DateCreatedColumn.UserCollapsed; @@ -360,32 +348,6 @@ public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferen userSettingsService.FoldersSettingsService.OriginalPathColumnWidth = prefs.ColumnsViewModel.OriginalPathColumn.UserLengthPixels; userSettingsService.FoldersSettingsService.SyncStatusColumnWidth = prefs.ColumnsViewModel.StatusColumn.UserLengthPixels; } - - if (!userSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences) - { - // Do not save OriginalPath as global sort option (only works in recycle bin) - if (prefs.DirectorySortOption != SortOption.OriginalFolder && - prefs.DirectorySortOption != SortOption.DateDeleted && - prefs.DirectorySortOption != SortOption.SyncStatus) - { - userSettingsService.LayoutSettingsService.DefaultDirectorySortOption = prefs.DirectorySortOption; - } - if (prefs.DirectoryGroupOption != GroupOption.OriginalFolder && - prefs.DirectoryGroupOption != GroupOption.DateDeleted && - prefs.DirectoryGroupOption != GroupOption.FolderPath && - prefs.DirectoryGroupOption != GroupOption.SyncStatus) - { - userSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption = prefs.DirectoryGroupOption; - } - userSettingsService.LayoutSettingsService.DefaultDirectorySortDirection = prefs.DirectorySortDirection; - userSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles; - } - - if(userSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences || userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences) - { - var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath); - WriteLayoutPreferencesToDb(folderPath.TrimPath(), folderFRN, prefs); - } } private static LayoutPreferences ReadLayoutPreferencesFromAds(string folderPath, ulong? frn) @@ -544,22 +506,10 @@ public void OnDefaultPreferencesChanged(string folderPath, string settingsName) case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles): SortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles; break; - case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption): - DirectorySortOption = prefs.DirectorySortOption; - break; - case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection): - DirectorySortDirection = prefs.DirectorySortDirection; - break; - case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption): - DirectoryGroupOption = prefs.DirectoryGroupOption; - break; case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences): LayoutPreference = prefs; // TODO: update layout break; - case nameof(UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences): - LayoutPreference = prefs; - break; } } diff --git a/src/Files.App/ViewModels/ItemViewModel.cs b/src/Files.App/ViewModels/ItemViewModel.cs index d01da55606a6..844fc3751907 100644 --- a/src/Files.App/ViewModels/ItemViewModel.cs +++ b/src/Files.App/ViewModels/ItemViewModel.cs @@ -497,11 +497,10 @@ await dispatcherQueue.EnqueueAsync(() => RefreshItems(null); }); break; - case nameof(UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences): - case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption): - case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection): + case nameof(UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption): + case nameof(UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection): + case nameof(UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption): case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles): - case nameof(UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption): case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences): await dispatcherQueue.EnqueueAsync(() => { diff --git a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs index e5e6f7185dad..abfdcdbea521 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs @@ -20,6 +20,9 @@ public FoldersViewModel() ShowResetLayoutPreferencesTipCommand = new RelayCommand(() => IsResetLayoutPreferencesTipOpen = true); SelectedDefaultLayoutModeIndex = (int)DefaultLayoutMode; + SelectedDefaultSortingIndex = DefaultSortOption == SortOption.FileTag ? 5 : (int)DefaultSortOption; + SelectedDefaultSortDirectionIndex = (int)DefaultSortDirection; + SelectedDefaultGroupingIndex = DefaultGroupOption == GroupOption.FileTag ? 6 : (int)DefaultGroupOption; } // Properties @@ -239,6 +242,87 @@ public bool CalculateFolderSizes } } + private int selectedDefaultSortingIndex; + public int SelectedDefaultSortingIndex + { + get => selectedDefaultSortingIndex; + set + { + if (SetProperty(ref selectedDefaultSortingIndex, value)) + { + OnPropertyChanged(nameof(SelectedDefaultSortingIndex)); + DefaultSortOption = value < 5 ? (SortOption)value : SortOption.FileTag; + } + } + } + + private int selectedDefaultSortDirectionIndex; + public int SelectedDefaultSortDirectionIndex + { + get => selectedDefaultSortDirectionIndex; + set + { + if (SetProperty(ref selectedDefaultSortDirectionIndex, value)) + { + OnPropertyChanged(nameof(SelectedDefaultSortDirectionIndex)); + DefaultSortDirection = (SortDirection)value; + } + } + } + + private int selectedDefaultGroupingIndex; + public int SelectedDefaultGroupingIndex + { + get => selectedDefaultGroupingIndex; + set + { + if (SetProperty(ref selectedDefaultGroupingIndex, value)) + { + OnPropertyChanged(nameof(SelectedDefaultGroupingIndex)); + DefaultGroupOption = value < 6 ? (GroupOption)value : GroupOption.FileTag; + } + } + } + + public SortOption DefaultSortOption + { + get => UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption; + set + { + if (value != UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption) + { + UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption = value; + OnPropertyChanged(); + } + } + } + + public SortDirection DefaultSortDirection + { + get => UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection; + set + { + if (value != UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection) + { + UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection = value; + OnPropertyChanged(); + } + } + } + + public GroupOption DefaultGroupOption + { + get => UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption; + set + { + if (value != UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption) + { + UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption = value; + OnPropertyChanged(); + } + } + } + // Local methods public void ResetLayoutPreferences() diff --git a/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs index 7216f8408c62..3df9b14ea0a2 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs @@ -112,9 +112,6 @@ public PreferencesViewModel() AddDateTimeOptions(); SelectedDateTimeFormatIndex = (int)Enum.Parse(typeof(DateTimeFormats), DateTimeFormat.ToString()); - SelectedDefaultSortingIndex = DefaultSortOption == SortOption.FileTag ? 5 : (int)DefaultSortOption; - SelectedDefaultSortDirectionIndex = (int)DefaultSortDirection; - SelectedDefaultGroupingIndex = DefaultGroupOption == GroupOption.FileTag ? 6 : (int)DefaultGroupOption; dispatcherQueue = DispatcherQueue.GetForCurrentThread(); @@ -465,19 +462,6 @@ public bool SelectFilesOnHover } } - public bool EnableOverridingSortingPreferences - { - get => UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences; - set - { - if (value != UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences) - { - UserSettingsService.LayoutSettingsService.EnableOverridingSortingPreferences = value; - OnPropertyChanged(); - } - } - } - public bool ListAndSortDirectoriesAlongsideFiles { get => UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; @@ -491,87 +475,6 @@ public bool ListAndSortDirectoriesAlongsideFiles } } - private int selectedDefaultSortingIndex; - public int SelectedDefaultSortingIndex - { - get => selectedDefaultSortingIndex; - set - { - if (SetProperty(ref selectedDefaultSortingIndex, value)) - { - OnPropertyChanged(nameof(SelectedDefaultSortingIndex)); - DefaultSortOption = value < 5 ? (SortOption)value : SortOption.FileTag; - } - } - } - - private int selectedDefaultSortDirectionIndex; - public int SelectedDefaultSortDirectionIndex - { - get => selectedDefaultSortDirectionIndex; - set - { - if (SetProperty(ref selectedDefaultSortDirectionIndex, value)) - { - OnPropertyChanged(nameof(SelectedDefaultSortDirectionIndex)); - DefaultSortDirection = (SortDirection)value; - } - } - } - - private int selectedDefaultGroupingIndex; - public int SelectedDefaultGroupingIndex - { - get => selectedDefaultGroupingIndex; - set - { - if (SetProperty(ref selectedDefaultGroupingIndex, value)) - { - OnPropertyChanged(nameof(SelectedDefaultGroupingIndex)); - DefaultGroupOption = value < 6 ? (GroupOption)value : GroupOption.FileTag; - } - } - } - - public SortOption DefaultSortOption - { - get => UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption; - set - { - if (value != UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption) - { - UserSettingsService.LayoutSettingsService.DefaultDirectorySortOption = value; - OnPropertyChanged(); - } - } - } - - public SortDirection DefaultSortDirection - { - get => UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection; - set - { - if (value != UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection) - { - UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection = value; - OnPropertyChanged(); - } - } - } - - public GroupOption DefaultGroupOption - { - get => UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption; - set - { - if (value != UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption) - { - UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupOption = value; - OnPropertyChanged(); - } - } - } - public bool SearchUnindexedItems { get => UserSettingsService.PreferencesSettingsService.SearchUnindexedItems; @@ -608,7 +511,7 @@ public string Text { if (Path == "Home".GetLocalizedResource()) return "Home".GetLocalizedResource(); - return (Path == CommonPaths.RecycleBinPath) + return (Path == CommonPaths.RecycleBinPath) ? ApplicationData.Current.LocalSettings.Values.Get("RecycleBin_Title", "Recycle Bin") : Path; } @@ -663,4 +566,3 @@ public DateTimeFormatItem(DateTimeFormats style, DateTimeOffset sampleDate1, Dat } } } - diff --git a/src/Files.App/Views/SettingsPages/Folders.xaml b/src/Files.App/Views/SettingsPages/Folders.xaml index 7982e0c02f7d..82a3338fcecf 100644 --- a/src/Files.App/Views/SettingsPages/Folders.xaml +++ b/src/Files.App/Views/SettingsPages/Folders.xaml @@ -120,6 +120,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Files.App/Views/SettingsPages/Preferences.xaml b/src/Files.App/Views/SettingsPages/Preferences.xaml index d1dac80bef89..67d5be8b3536 100644 --- a/src/Files.App/Views/SettingsPages/Preferences.xaml +++ b/src/Files.App/Views/SettingsPages/Preferences.xaml @@ -116,33 +116,6 @@ Style="{StaticResource RightAlignedToggleSwitchStyle}" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -302,4 +252,4 @@ VerticalAlignment="Bottom" ShowDialog="{x:Bind ViewModel.ShowRestartControl, Mode=TwoWay}" /> - + \ No newline at end of file diff --git a/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs b/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs index 665f4b04034f..3287b15d1780 100644 --- a/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs +++ b/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs @@ -139,5 +139,20 @@ public interface IFoldersSettingsService : IBaseSettingsService, INotifyProperty /// Gets or sets a value indicating whether or not to show folder size. /// bool CalculateFolderSizes { get; set; } + + /// + /// Gets or sets a value indicating the default sorting option. + /// + SortOption DefaultDirectorySortOption { get; set; } + + /// + /// Gets or sets a value indicating the default sort direction (ascending / descending). + /// + SortDirection DefaultDirectorySortDirection { get; set; } + + /// + /// Gets or sets a value indicating the default grouping option. + /// + GroupOption DefaultDirectoryGroupOption { get; set; } } } diff --git a/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs b/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs index b6a8cdaefb9d..86d1a0b2d0bc 100644 --- a/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs +++ b/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs @@ -7,15 +7,6 @@ public interface ILayoutSettingsService : IBaseSettingsService, INotifyPropertyC { int DefaultGridViewSize { get; set; } - // move to folder settings and add UI to settings pages - SortDirection DefaultDirectorySortDirection { get; set; } - - SortOption DefaultDirectorySortOption { get; set; } - bool DefaultSortDirectoriesAlongsideFiles { get; set; } - - GroupOption DefaultDirectoryGroupOption { get; set; } - - bool EnableOverridingSortingPreferences { get; set; } } } From 33c9e7d951e28330dd1a16ae52f5a2d4b5f0e458 Mon Sep 17 00:00:00 2001 From: manfromarce Date: Tue, 29 Nov 2022 11:15:33 +0100 Subject: [PATCH 03/30] Update FolderSettingsViewModel comment --- src/Files.App/ViewModels/FolderSettingsViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App/ViewModels/FolderSettingsViewModel.cs b/src/Files.App/ViewModels/FolderSettingsViewModel.cs index 495e2afc8489..d0fa442bf751 100644 --- a/src/Files.App/ViewModels/FolderSettingsViewModel.cs +++ b/src/Files.App/ViewModels/FolderSettingsViewModel.cs @@ -312,7 +312,7 @@ public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferen { userSettingsService.FoldersSettingsService.DefaultLayoutMode = prefs.LayoutMode; userSettingsService.LayoutSettingsService.DefaultGridViewSize = prefs.GridViewSize; - // Do not save OriginalPath as global sort option (only works in recycle bin) + // Do not save options which only work in recycle bin or cloud folders as global if (prefs.DirectorySortOption != SortOption.OriginalFolder && prefs.DirectorySortOption != SortOption.DateDeleted && prefs.DirectorySortOption != SortOption.SyncStatus) From c98a3c5b47c99992e6e38a7408ca326fb86ddc43 Mon Sep 17 00:00:00 2001 From: manfromarce Date: Tue, 29 Nov 2022 11:52:24 +0100 Subject: [PATCH 04/30] Swap SyncStatus and FileTag order --- src/Files.App/Helpers/ContextFlyoutItemHelper.cs | 16 ++++++++-------- .../UserControls/InnerNavigationToolbar.xaml | 4 ++-- .../SettingsViewModels/FoldersViewModel.cs | 8 ++++---- src/Files.Shared/Enums/GroupOption.cs | 2 +- src/Files.Shared/Enums/SortOption.cs | 6 +++--- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Files.App/Helpers/ContextFlyoutItemHelper.cs b/src/Files.App/Helpers/ContextFlyoutItemHelper.cs index dbbd2847dfe8..af70598078f7 100644 --- a/src/Files.App/Helpers/ContextFlyoutItemHelper.cs +++ b/src/Files.App/Helpers/ContextFlyoutItemHelper.cs @@ -275,14 +275,6 @@ public static List GetBaseLayoutMenuItems(Curren ItemType = ItemType.Toggle }, new ContextMenuFlyoutItemViewModel() - { - Text = "SyncStatus".GetLocalizedResource(), - IsChecked = itemViewModel.IsSortedBySyncStatus, - Command = new RelayCommand(() => itemViewModel.IsSortedBySyncStatus = true), - ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, - ItemType = ItemType.Toggle - }, - new ContextMenuFlyoutItemViewModel() { Text = "FileTags".GetLocalizedResource(), IsChecked = itemViewModel.IsSortedByFileTag, @@ -292,6 +284,14 @@ public static List GetBaseLayoutMenuItems(Curren ItemType = ItemType.Toggle }, new ContextMenuFlyoutItemViewModel() + { + Text = "SyncStatus".GetLocalizedResource(), + IsChecked = itemViewModel.IsSortedBySyncStatus, + Command = new RelayCommand(() => itemViewModel.IsSortedBySyncStatus = true), + ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, + ItemType = ItemType.Toggle + }, + new ContextMenuFlyoutItemViewModel() { Text = "BaseLayoutContextFlyoutSortByOriginalPath/Text".GetLocalizedResource(), IsChecked = itemViewModel.IsSortedByOriginalPath, diff --git a/src/Files.App/UserControls/InnerNavigationToolbar.xaml b/src/Files.App/UserControls/InnerNavigationToolbar.xaml index cb26f5fe323e..d5e9d06ddf7f 100644 --- a/src/Files.App/UserControls/InnerNavigationToolbar.xaml +++ b/src/Files.App/UserControls/InnerNavigationToolbar.xaml @@ -482,11 +482,11 @@ + - + - IsResetLayoutPreferencesTipOpen = true); SelectedDefaultLayoutModeIndex = (int)DefaultLayoutMode; - SelectedDefaultSortingIndex = DefaultSortOption == SortOption.FileTag ? 5 : (int)DefaultSortOption; + SelectedDefaultSortingIndex = (int)DefaultSortOption; SelectedDefaultSortDirectionIndex = (int)DefaultSortDirection; - SelectedDefaultGroupingIndex = DefaultGroupOption == GroupOption.FileTag ? 6 : (int)DefaultGroupOption; + SelectedDefaultGroupingIndex = (int)DefaultGroupOption; } // Properties @@ -251,7 +251,7 @@ public int SelectedDefaultSortingIndex if (SetProperty(ref selectedDefaultSortingIndex, value)) { OnPropertyChanged(nameof(SelectedDefaultSortingIndex)); - DefaultSortOption = value < 5 ? (SortOption)value : SortOption.FileTag; + DefaultSortOption = (SortOption)value; } } } @@ -279,7 +279,7 @@ public int SelectedDefaultGroupingIndex if (SetProperty(ref selectedDefaultGroupingIndex, value)) { OnPropertyChanged(nameof(SelectedDefaultGroupingIndex)); - DefaultGroupOption = value < 6 ? (GroupOption)value : GroupOption.FileTag; + DefaultGroupOption = (GroupOption)value; } } } diff --git a/src/Files.Shared/Enums/GroupOption.cs b/src/Files.Shared/Enums/GroupOption.cs index c432f6ce6ba2..0199af8b7e17 100644 --- a/src/Files.Shared/Enums/GroupOption.cs +++ b/src/Files.Shared/Enums/GroupOption.cs @@ -8,8 +8,8 @@ public enum GroupOption : byte DateCreated, Size, FileType, - SyncStatus, // Cloud drive FileTag, + SyncStatus, // Cloud drive OriginalFolder, // Recycle bin DateDeleted, // Recycle bin FolderPath, // Libraries diff --git a/src/Files.Shared/Enums/SortOption.cs b/src/Files.Shared/Enums/SortOption.cs index f6f8bf6ebde5..a382d4ef737e 100644 --- a/src/Files.Shared/Enums/SortOption.cs +++ b/src/Files.Shared/Enums/SortOption.cs @@ -7,9 +7,9 @@ public enum SortOption : byte DateCreated, Size, FileType, - SyncStatus, FileTag, - OriginalFolder, - DateDeleted + SyncStatus, // Cloud drive + OriginalFolder, // Recycle bin + DateDeleted // Recycle bin } } \ No newline at end of file From 7489fc7bbb6e8a7c57efb7c04a826a57a55f20c0 Mon Sep 17 00:00:00 2001 From: manfromarce Date: Thu, 8 Dec 2022 09:58:49 +0100 Subject: [PATCH 05/30] Revert swapping SyncStatus and Tag --- src/Files.App/Helpers/ContextFlyoutItemHelper.cs | 16 ++++++++-------- .../UserControls/InnerNavigationToolbar.xaml | 2 +- src/Files.Shared/Enums/GroupOption.cs | 2 +- src/Files.Shared/Enums/SortOption.cs | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Files.App/Helpers/ContextFlyoutItemHelper.cs b/src/Files.App/Helpers/ContextFlyoutItemHelper.cs index af70598078f7..26e87ba7c474 100644 --- a/src/Files.App/Helpers/ContextFlyoutItemHelper.cs +++ b/src/Files.App/Helpers/ContextFlyoutItemHelper.cs @@ -284,14 +284,6 @@ public static List GetBaseLayoutMenuItems(Curren ItemType = ItemType.Toggle }, new ContextMenuFlyoutItemViewModel() - { - Text = "SyncStatus".GetLocalizedResource(), - IsChecked = itemViewModel.IsSortedBySyncStatus, - Command = new RelayCommand(() => itemViewModel.IsSortedBySyncStatus = true), - ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, - ItemType = ItemType.Toggle - }, - new ContextMenuFlyoutItemViewModel() { Text = "BaseLayoutContextFlyoutSortByOriginalPath/Text".GetLocalizedResource(), IsChecked = itemViewModel.IsSortedByOriginalPath, @@ -301,6 +293,14 @@ public static List GetBaseLayoutMenuItems(Curren ItemType = ItemType.Toggle, }, new ContextMenuFlyoutItemViewModel() + { + Text = "SyncStatus".GetLocalizedResource(), + IsChecked = itemViewModel.IsSortedBySyncStatus, + Command = new RelayCommand(() => itemViewModel.IsSortedBySyncStatus = true), + ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, + ItemType = ItemType.Toggle + }, + new ContextMenuFlyoutItemViewModel() { Text = "DateDeleted".GetLocalizedResource(), IsChecked = itemViewModel.IsSortedByDateDeleted, diff --git a/src/Files.App/UserControls/InnerNavigationToolbar.xaml b/src/Files.App/UserControls/InnerNavigationToolbar.xaml index d5e9d06ddf7f..c1043f779a7a 100644 --- a/src/Files.App/UserControls/InnerNavigationToolbar.xaml +++ b/src/Files.App/UserControls/InnerNavigationToolbar.xaml @@ -482,11 +482,11 @@ - + Date: Thu, 8 Dec 2022 10:07:34 +0100 Subject: [PATCH 06/30] Revert few unnecessary changes --- .../Helpers/ContextFlyoutItemHelper.cs | 18 +- .../UserControls/InnerNavigationToolbar.xaml | 2 +- .../PreferencesViewModel.cs | 1085 +++++++++-------- .../Views/SettingsPages/Preferences.xaml | 3 +- 4 files changed, 555 insertions(+), 553 deletions(-) diff --git a/src/Files.App/Helpers/ContextFlyoutItemHelper.cs b/src/Files.App/Helpers/ContextFlyoutItemHelper.cs index 26e87ba7c474..e78e0cdcabb1 100644 --- a/src/Files.App/Helpers/ContextFlyoutItemHelper.cs +++ b/src/Files.App/Helpers/ContextFlyoutItemHelper.cs @@ -424,15 +424,6 @@ public static List GetBaseLayoutMenuItems(Curren ItemType = ItemType.Toggle, }, new ContextMenuFlyoutItemViewModel() - { - Text = "SyncStatus".GetLocalizedResource(), - IsChecked = currentInstanceViewModel.FolderSettings.DirectoryGroupOption == GroupOption.SyncStatus, - ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, - Command = currentInstanceViewModel.FolderSettings.ChangeGroupOptionCommand, - CommandParameter = GroupOption.SyncStatus, - ItemType = ItemType.Toggle, - }, - new ContextMenuFlyoutItemViewModel() { Text = "FileTags".GetLocalizedResource(), IsChecked = currentInstanceViewModel.FolderSettings.DirectoryGroupOption == GroupOption.FileTag, @@ -443,6 +434,15 @@ public static List GetBaseLayoutMenuItems(Curren ItemType = ItemType.Toggle, }, new ContextMenuFlyoutItemViewModel() + { + Text = "SyncStatus".GetLocalizedResource(), + IsChecked = currentInstanceViewModel.FolderSettings.DirectoryGroupOption == GroupOption.SyncStatus, + ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, + Command = currentInstanceViewModel.FolderSettings.ChangeGroupOptionCommand, + CommandParameter = GroupOption.SyncStatus, + ItemType = ItemType.Toggle, + }, + new ContextMenuFlyoutItemViewModel() { Text = "NavToolbarArrangementOptionOriginalFolder/Text".GetLocalizedResource(), IsChecked = currentInstanceViewModel.FolderSettings.DirectoryGroupOption == GroupOption.OriginalFolder, diff --git a/src/Files.App/UserControls/InnerNavigationToolbar.xaml b/src/Files.App/UserControls/InnerNavigationToolbar.xaml index c1043f779a7a..cb26f5fe323e 100644 --- a/src/Files.App/UserControls/InnerNavigationToolbar.xaml +++ b/src/Files.App/UserControls/InnerNavigationToolbar.xaml @@ -503,11 +503,11 @@ - + (); - - private bool disposed; - private ReadOnlyCollection addFlyoutItemsSource; - - // Commands - - public AsyncRelayCommand OpenFilesAtStartupCommand { get; } - public AsyncRelayCommand ChangePageCommand { get; } - public RelayCommand RemovePageCommand { get; } - public RelayCommand AddPageCommand { get; } - - // Properties - - private bool showRestartControl; - public bool ShowRestartControl - { - get => showRestartControl; - set => SetProperty(ref showRestartControl, value); - } - - private int selectedPageIndex = -1; - public int SelectedPageIndex - { - get => selectedPageIndex; - set - { - if (SetProperty(ref selectedPageIndex, value)) - IsPageListEditEnabled = value >= 0; - } - } - - private bool isPageListEditEnabled; - public bool IsPageListEditEnabled - { - get => isPageListEditEnabled; - set => SetProperty(ref isPageListEditEnabled, value); - } - - private int selectedDateTimeFormatIndex; - public int SelectedDateTimeFormatIndex - { - get => selectedDateTimeFormatIndex; - set - { - if (SetProperty(ref selectedDateTimeFormatIndex, value)) - { - OnPropertyChanged(nameof(SelectedDateTimeFormatIndex)); - DateTimeFormat = (DateTimeFormats)value; - } - } - } - - private int selectedAppLanguageIndex; - public int SelectedAppLanguageIndex - { - get => selectedAppLanguageIndex; - set - { - if (SetProperty(ref selectedAppLanguageIndex, value)) - { - OnPropertyChanged(nameof(SelectedAppLanguageIndex)); - - if (ApplicationLanguages.PrimaryLanguageOverride != AppLanguages[value].LanguagID) - ShowRestartControl = true; - - ApplicationLanguages.PrimaryLanguageOverride = AppLanguages[value].LanguagID; - } - } - } - - // Lists - - public List DateFormats { get; set; } - public ObservableCollection AppLanguages { get; set; } - - public PreferencesViewModel() - { - OpenFilesAtStartupCommand = new AsyncRelayCommand(OpenFilesAtStartup); - ChangePageCommand = new AsyncRelayCommand(ChangePage); - RemovePageCommand = new RelayCommand(RemovePage); - AddPageCommand = new RelayCommand(async (path) => await AddPage(path)); - - AddSupportedAppLanguages(); - - AddDateTimeOptions(); - SelectedDateTimeFormatIndex = (int)Enum.Parse(typeof(DateTimeFormats), DateTimeFormat.ToString()); - - dispatcherQueue = DispatcherQueue.GetForCurrentThread(); - - if (UserSettingsService.PreferencesSettingsService.TabsOnStartupList is not null) - PagesOnStartupList = new ObservableCollection(UserSettingsService.PreferencesSettingsService.TabsOnStartupList.Select((p) => new PageOnStartupViewModel(p))); - else - PagesOnStartupList = new ObservableCollection(); - - PagesOnStartupList.CollectionChanged += PagesOnStartupList_CollectionChanged; - - _ = InitStartupSettingsRecentFoldersFlyout(); - _ = DetectOpenFilesAtStartup(); - } - - private void AddDateTimeOptions() - { - DateTimeOffset sampleDate1 = DateTime.Now; - DateTimeOffset sampleDate2 = new DateTime(sampleDate1.Year - 5, 12, 31, 14, 30, 0); - var styles = new DateTimeFormats[] { DateTimeFormats.Application, DateTimeFormats.System, DateTimeFormats.Universal }; - DateFormats = styles.Select(style => new DateTimeFormatItem(style, sampleDate1, sampleDate2)).ToList(); - } - - private void AddSupportedAppLanguages() - { - var appLanguages = ApplicationLanguages.ManifestLanguages - .Append(string.Empty) // add default language id - .Select(language => new AppLanguageItem(language)) - .OrderBy(language => language.LanguagID is not "") // default language on top - .ThenBy(language => language.LanguageName); - AppLanguages = new ObservableCollection(appLanguages); - - string languageID = ApplicationLanguages.PrimaryLanguageOverride; - SelectedAppLanguageIndex = AppLanguages - .IndexOf(AppLanguages.FirstOrDefault(dl => dl.LanguagID == languageID) ?? AppLanguages.First()); - } - - private async Task InitStartupSettingsRecentFoldersFlyout() - { - var recentsItem = new MenuFlyoutSubItemViewModel("JumpListRecentGroupHeader".GetLocalizedResource()); - recentsItem.Items.Add(new MenuFlyoutItemViewModel("Home".GetLocalizedResource()) - { - Command = AddPageCommand, - CommandParameter = "Home".GetLocalizedResource(), - Tooltip = "Home".GetLocalizedResource() - }); - - await App.RecentItemsManager.UpdateRecentFoldersAsync(); // ensure recent folders aren't stale since we don't update them with a watcher - await PopulateRecentItems(recentsItem).ContinueWith(_ => - { - AddFlyoutItemsSource = new List() { - new MenuFlyoutItemViewModel("Browse".GetLocalizedResource()) { Command = AddPageCommand }, - recentsItem, - }.AsReadOnly(); - }, TaskScheduler.FromCurrentSynchronizationContext()); - } - - private Task PopulateRecentItems(MenuFlyoutSubItemViewModel menu) - { - try - { - var recentFolders = App.RecentItemsManager.RecentFolders; - - // add separator - if (recentFolders.Any()) - menu.Items.Add(new MenuFlyoutSeparatorViewModel()); - - foreach (var recentFolder in recentFolders) - { - var menuItem = new MenuFlyoutItemViewModel(recentFolder.Name) - { - Command = AddPageCommand, - CommandParameter = recentFolder.RecentPath, - Tooltip = recentFolder.RecentPath - }; - menu.Items.Add(menuItem); - } - } - catch (Exception ex) - { - App.Logger.Info(ex, "Could not fetch recent items"); - } - - return Task.CompletedTask; - } - - private void PagesOnStartupList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) - { - if (PagesOnStartupList.Count > 0) - UserSettingsService.PreferencesSettingsService.TabsOnStartupList = PagesOnStartupList.Select((p) => p.Path).ToList(); - else - UserSettingsService.PreferencesSettingsService.TabsOnStartupList = null; - } - - public int SelectedStartupSettingIndex => ContinueLastSessionOnStartUp ? 1 : OpenASpecificPageOnStartup ? 2 : 0; - - public bool OpenNewTabPageOnStartup - { - get => UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup; - set - { - if (value != UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup) - { - UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup = value; - OnPropertyChanged(); - } - } - } - - public bool ContinueLastSessionOnStartUp - { - get => UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp; - set - { - if (value != UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp) - { - UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp = value; - OnPropertyChanged(); - } - } - } - - public bool OpenASpecificPageOnStartup - { - get => UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup; - set - { - if (value != UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup) - { - UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup = value; - OnPropertyChanged(); - } - } - } - - public ObservableCollection PagesOnStartupList { get; set; } - - public ReadOnlyCollection AddFlyoutItemsSource - { - get => addFlyoutItemsSource; - set => SetProperty(ref addFlyoutItemsSource, value); - } - - public bool AlwaysOpenANewInstance - { - get => UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance; - set - { - if (value != UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance) - { - UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance = value; - ApplicationData.Current.LocalSettings.Values["AlwaysOpenANewInstance"] = value; // Needed in Program.cs - OnPropertyChanged(); - } - } - } - - private async Task ChangePage() - { - var folderPicker = this.InitializeWithWindow(new FolderPicker()); - folderPicker.FileTypeFilter.Add("*"); - StorageFolder folder = await folderPicker.PickSingleFolderAsync(); - - if (folder is not null) - { - if (SelectedPageIndex >= 0) - PagesOnStartupList[SelectedPageIndex] = new PageOnStartupViewModel(folder.Path); - } - } - - // WINUI3 - private FolderPicker InitializeWithWindow(FolderPicker obj) - { - WinRT.Interop.InitializeWithWindow.Initialize(obj, App.WindowHandle); - return obj; - } - - private void RemovePage() - { - int index = SelectedPageIndex; - if (index >= 0) - { - PagesOnStartupList.RemoveAt(index); - if (index > 0) - SelectedPageIndex = index - 1; - else if (PagesOnStartupList.Count > 0) - SelectedPageIndex = 0; - } - } - - private async Task AddPage(string path = null) - { - if (string.IsNullOrWhiteSpace(path)) - { - var folderPicker = this.InitializeWithWindow(new FolderPicker()); - folderPicker.FileTypeFilter.Add("*"); - - var folder = await folderPicker.PickSingleFolderAsync(); - if (folder is not null) - path = folder.Path; - } - - if (path is not null && PagesOnStartupList is not null) - PagesOnStartupList.Add(new PageOnStartupViewModel(path)); - } - - public string DateFormatSample - => string.Format("DateFormatSample".GetLocalizedResource(), DateFormats[SelectedDateTimeFormatIndex].Sample1, DateFormats[SelectedDateTimeFormatIndex].Sample2); - - private DispatcherQueue dispatcherQueue; - - public bool ShowConfirmDeleteDialog - { - get => UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog; - set - { - if (value != UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog) - { - UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog = value; - OnPropertyChanged(); - } - } - } - - public DateTimeFormats DateTimeFormat - { - get => UserSettingsService.PreferencesSettingsService.DateTimeFormat; - set - { - if (value != UserSettingsService.PreferencesSettingsService.DateTimeFormat) - { - UserSettingsService.PreferencesSettingsService.DateTimeFormat = value; - OnPropertyChanged(); - } - } - } - - private bool openInLogin; - - public bool OpenInLogin - { - get => openInLogin; - set => SetProperty(ref openInLogin, value); - } - - private bool canOpenInLogin; - - public bool CanOpenInLogin - { - get => canOpenInLogin; - set => SetProperty(ref canOpenInLogin, value); - } - - public async Task OpenFilesAtStartup() - { - var stateMode = await ReadState(); - - bool state = stateMode switch - { - StartupTaskState.Enabled => true, - StartupTaskState.EnabledByPolicy => true, - StartupTaskState.DisabledByPolicy => false, - StartupTaskState.DisabledByUser => false, - _ => false, - }; - - if (state != OpenInLogin) - { - StartupTask startupTask = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB"); - if (OpenInLogin) - await startupTask.RequestEnableAsync(); - else - startupTask.Disable(); - await DetectOpenFilesAtStartup(); - } - } - - public async Task DetectOpenFilesAtStartup() - { - var stateMode = await ReadState(); - - switch (stateMode) - { - case StartupTaskState.Disabled: - CanOpenInLogin = true; - OpenInLogin = false; - break; - case StartupTaskState.Enabled: - CanOpenInLogin = true; - OpenInLogin = true; - break; - case StartupTaskState.DisabledByPolicy: - CanOpenInLogin = false; - OpenInLogin = false; - break; - case StartupTaskState.DisabledByUser: - CanOpenInLogin = false; - OpenInLogin = false; - break; - case StartupTaskState.EnabledByPolicy: - CanOpenInLogin = false; - OpenInLogin = true; - break; - } - } - - public async Task ReadState() - { - var state = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB"); - return state.State; - } - - public bool ShowFileExtensions - { - get => UserSettingsService.PreferencesSettingsService.ShowFileExtensions; - set - { - if (value != UserSettingsService.PreferencesSettingsService.ShowFileExtensions) - { - UserSettingsService.PreferencesSettingsService.ShowFileExtensions = value; - OnPropertyChanged(); - } - } - } - - public bool ShowThumbnails - { - get => UserSettingsService.PreferencesSettingsService.ShowThumbnails; - set - { - if (value != UserSettingsService.PreferencesSettingsService.ShowThumbnails) - { - UserSettingsService.PreferencesSettingsService.ShowThumbnails = value; - OnPropertyChanged(); - } - } - } - - public bool SelectFilesOnHover - { - get => UserSettingsService.PreferencesSettingsService.SelectFilesOnHover; - set - { - if (value != UserSettingsService.PreferencesSettingsService.SelectFilesOnHover) - { - UserSettingsService.PreferencesSettingsService.SelectFilesOnHover = value; - OnPropertyChanged(); - } - } - } - - public bool ListAndSortDirectoriesAlongsideFiles - { - get => UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; - set - { - if (value != UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles) - { - UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = value; - OnPropertyChanged(); - } - } - } - - public bool SearchUnindexedItems - { - get => UserSettingsService.PreferencesSettingsService.SearchUnindexedItems; - set - { - if (value != UserSettingsService.PreferencesSettingsService.SearchUnindexedItems) - { - UserSettingsService.PreferencesSettingsService.SearchUnindexedItems = value; - OnPropertyChanged(); - } - } - } - - public void Dispose() - { - if (!disposed) - { - disposed = true; - GC.SuppressFinalize(this); - } - } - - ~PreferencesViewModel() - { - Dispose(); - } - } - - public class PageOnStartupViewModel - { - public string Text - { - get - { - if (Path == "Home".GetLocalizedResource()) - return "Home".GetLocalizedResource(); - return (Path == CommonPaths.RecycleBinPath) - ? ApplicationData.Current.LocalSettings.Values.Get("RecycleBin_Title", "Recycle Bin") - : Path; - } - } - - public string Path { get; } - - internal PageOnStartupViewModel(string path) => Path = path; - } - - public class AppLanguageItem - { - public string LanguagID { get; set; } - public string LanguageName { get; set; } - - public AppLanguageItem(string languagID) - { - if (!string.IsNullOrEmpty(languagID)) - { - var info = new CultureInfo(languagID); - LanguagID = info.Name; - LanguageName = info.NativeName; - } - else - { - LanguagID = string.Empty; - var systemDefaultLanguageOptionStr = "SettingsPreferencesSystemDefaultLanguageOption".GetLocalizedResource(); - LanguageName = string.IsNullOrEmpty(systemDefaultLanguageOptionStr) ? "System Default" : systemDefaultLanguageOptionStr; - } - } - - public override string ToString() - { - return LanguageName; - } - } - - public class DateTimeFormatItem - { - public string Label { get; } - public string Sample1 { get; } - public string Sample2 { get; } - - public DateTimeFormatItem(DateTimeFormats style, DateTimeOffset sampleDate1, DateTimeOffset sampleDate2) - { - var factory = Ioc.Default.GetRequiredService(); - var formatter = factory.GetDateTimeFormatter(style); - - Label = formatter.Name; - Sample1 = formatter.ToShortLabel(sampleDate1); - Sample2 = formatter.ToShortLabel(sampleDate2); - } - } + public class PreferencesViewModel : ObservableObject, IDisposable + { + private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); + + private bool disposed; + private ReadOnlyCollection addFlyoutItemsSource; + + // Commands + + public AsyncRelayCommand OpenFilesAtStartupCommand { get; } + public AsyncRelayCommand ChangePageCommand { get; } + public RelayCommand RemovePageCommand { get; } + public RelayCommand AddPageCommand { get; } + + // Properties + + private bool showRestartControl; + public bool ShowRestartControl + { + get => showRestartControl; + set => SetProperty(ref showRestartControl, value); + } + + private int selectedPageIndex = -1; + public int SelectedPageIndex + { + get => selectedPageIndex; + set + { + if (SetProperty(ref selectedPageIndex, value)) + IsPageListEditEnabled = value >= 0; + } + } + + private bool isPageListEditEnabled; + public bool IsPageListEditEnabled + { + get => isPageListEditEnabled; + set => SetProperty(ref isPageListEditEnabled, value); + } + + private int selectedDateTimeFormatIndex; + public int SelectedDateTimeFormatIndex + { + get => selectedDateTimeFormatIndex; + set + { + if (SetProperty(ref selectedDateTimeFormatIndex, value)) + { + OnPropertyChanged(nameof(SelectedDateTimeFormatIndex)); + DateTimeFormat = (DateTimeFormats)value; + } + } + } + + private int selectedAppLanguageIndex; + public int SelectedAppLanguageIndex + { + get => selectedAppLanguageIndex; + set + { + if (SetProperty(ref selectedAppLanguageIndex, value)) + { + OnPropertyChanged(nameof(SelectedAppLanguageIndex)); + + if (ApplicationLanguages.PrimaryLanguageOverride != AppLanguages[value].LanguagID) + ShowRestartControl = true; + + ApplicationLanguages.PrimaryLanguageOverride = AppLanguages[value].LanguagID; + } + } + } + + // Lists + + public List DateFormats { get; set; } + public ObservableCollection AppLanguages { get; set; } + + public PreferencesViewModel() + { + OpenFilesAtStartupCommand = new AsyncRelayCommand(OpenFilesAtStartup); + ChangePageCommand = new AsyncRelayCommand(ChangePage); + RemovePageCommand = new RelayCommand(RemovePage); + AddPageCommand = new RelayCommand(async (path) => await AddPage(path)); + + AddSupportedAppLanguages(); + + AddDateTimeOptions(); + SelectedDateTimeFormatIndex = (int)Enum.Parse(typeof(DateTimeFormats), DateTimeFormat.ToString()); + + dispatcherQueue = DispatcherQueue.GetForCurrentThread(); + + if (UserSettingsService.PreferencesSettingsService.TabsOnStartupList is not null) + PagesOnStartupList = new ObservableCollection(UserSettingsService.PreferencesSettingsService.TabsOnStartupList.Select((p) => new PageOnStartupViewModel(p))); + else + PagesOnStartupList = new ObservableCollection(); + + PagesOnStartupList.CollectionChanged += PagesOnStartupList_CollectionChanged; + + _ = InitStartupSettingsRecentFoldersFlyout(); + _ = DetectOpenFilesAtStartup(); + } + + private void AddDateTimeOptions() + { + DateTimeOffset sampleDate1 = DateTime.Now; + DateTimeOffset sampleDate2 = new DateTime(sampleDate1.Year - 5, 12, 31, 14, 30, 0); + var styles = new DateTimeFormats[] { DateTimeFormats.Application, DateTimeFormats.System, DateTimeFormats.Universal }; + DateFormats = styles.Select(style => new DateTimeFormatItem(style, sampleDate1, sampleDate2)).ToList(); + } + + private void AddSupportedAppLanguages() + { + var appLanguages = ApplicationLanguages.ManifestLanguages + .Append(string.Empty) // add default language id + .Select(language => new AppLanguageItem(language)) + .OrderBy(language => language.LanguagID is not "") // default language on top + .ThenBy(language => language.LanguageName); + AppLanguages = new ObservableCollection(appLanguages); + + string languageID = ApplicationLanguages.PrimaryLanguageOverride; + SelectedAppLanguageIndex = AppLanguages + .IndexOf(AppLanguages.FirstOrDefault(dl => dl.LanguagID == languageID) ?? AppLanguages.First()); + } + + private async Task InitStartupSettingsRecentFoldersFlyout() + { + var recentsItem = new MenuFlyoutSubItemViewModel("JumpListRecentGroupHeader".GetLocalizedResource()); + recentsItem.Items.Add(new MenuFlyoutItemViewModel("Home".GetLocalizedResource()) + { + Command = AddPageCommand, + CommandParameter = "Home".GetLocalizedResource(), + Tooltip = "Home".GetLocalizedResource() + }); + + await App.RecentItemsManager.UpdateRecentFoldersAsync(); // ensure recent folders aren't stale since we don't update them with a watcher + await PopulateRecentItems(recentsItem).ContinueWith(_ => + { + AddFlyoutItemsSource = new List() { + new MenuFlyoutItemViewModel("Browse".GetLocalizedResource()) { Command = AddPageCommand }, + recentsItem, + }.AsReadOnly(); + }, TaskScheduler.FromCurrentSynchronizationContext()); + } + + private Task PopulateRecentItems(MenuFlyoutSubItemViewModel menu) + { + try + { + var recentFolders = App.RecentItemsManager.RecentFolders; + + // add separator + if (recentFolders.Any()) + menu.Items.Add(new MenuFlyoutSeparatorViewModel()); + + foreach (var recentFolder in recentFolders) + { + var menuItem = new MenuFlyoutItemViewModel(recentFolder.Name) + { + Command = AddPageCommand, + CommandParameter = recentFolder.RecentPath, + Tooltip = recentFolder.RecentPath + }; + menu.Items.Add(menuItem); + } + } + catch (Exception ex) + { + App.Logger.Info(ex, "Could not fetch recent items"); + } + + return Task.CompletedTask; + } + + private void PagesOnStartupList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + if (PagesOnStartupList.Count > 0) + UserSettingsService.PreferencesSettingsService.TabsOnStartupList = PagesOnStartupList.Select((p) => p.Path).ToList(); + else + UserSettingsService.PreferencesSettingsService.TabsOnStartupList = null; + } + + public int SelectedStartupSettingIndex => ContinueLastSessionOnStartUp ? 1 : OpenASpecificPageOnStartup ? 2 : 0; + + public bool OpenNewTabPageOnStartup + { + get => UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup; + set + { + if (value != UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup) + { + UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup = value; + OnPropertyChanged(); + } + } + } + + public bool ContinueLastSessionOnStartUp + { + get => UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp; + set + { + if (value != UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp) + { + UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp = value; + OnPropertyChanged(); + } + } + } + + public bool OpenASpecificPageOnStartup + { + get => UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup; + set + { + if (value != UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup) + { + UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup = value; + OnPropertyChanged(); + } + } + } + + public ObservableCollection PagesOnStartupList { get; set; } + + public ReadOnlyCollection AddFlyoutItemsSource + { + get => addFlyoutItemsSource; + set => SetProperty(ref addFlyoutItemsSource, value); + } + + public bool AlwaysOpenANewInstance + { + get => UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance; + set + { + if (value != UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance) + { + UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance = value; + ApplicationData.Current.LocalSettings.Values["AlwaysOpenANewInstance"] = value; // Needed in Program.cs + OnPropertyChanged(); + } + } + } + + private async Task ChangePage() + { + var folderPicker = this.InitializeWithWindow(new FolderPicker()); + folderPicker.FileTypeFilter.Add("*"); + StorageFolder folder = await folderPicker.PickSingleFolderAsync(); + + if (folder is not null) + { + if (SelectedPageIndex >= 0) + PagesOnStartupList[SelectedPageIndex] = new PageOnStartupViewModel(folder.Path); + } + } + + // WINUI3 + private FolderPicker InitializeWithWindow(FolderPicker obj) + { + WinRT.Interop.InitializeWithWindow.Initialize(obj, App.WindowHandle); + return obj; + } + + private void RemovePage() + { + int index = SelectedPageIndex; + if (index >= 0) + { + PagesOnStartupList.RemoveAt(index); + if (index > 0) + SelectedPageIndex = index - 1; + else if (PagesOnStartupList.Count > 0) + SelectedPageIndex = 0; + } + } + + private async Task AddPage(string path = null) + { + if (string.IsNullOrWhiteSpace(path)) + { + var folderPicker = this.InitializeWithWindow(new FolderPicker()); + folderPicker.FileTypeFilter.Add("*"); + + var folder = await folderPicker.PickSingleFolderAsync(); + if (folder is not null) + path = folder.Path; + } + + if (path is not null && PagesOnStartupList is not null) + PagesOnStartupList.Add(new PageOnStartupViewModel(path)); + } + + public string DateFormatSample + => string.Format("DateFormatSample".GetLocalizedResource(), DateFormats[SelectedDateTimeFormatIndex].Sample1, DateFormats[SelectedDateTimeFormatIndex].Sample2); + + private DispatcherQueue dispatcherQueue; + + public bool ShowConfirmDeleteDialog + { + get => UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog; + set + { + if (value != UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog) + { + UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog = value; + OnPropertyChanged(); + } + } + } + + public DateTimeFormats DateTimeFormat + { + get => UserSettingsService.PreferencesSettingsService.DateTimeFormat; + set + { + if (value != UserSettingsService.PreferencesSettingsService.DateTimeFormat) + { + UserSettingsService.PreferencesSettingsService.DateTimeFormat = value; + OnPropertyChanged(); + } + } + } + + private bool openInLogin; + + public bool OpenInLogin + { + get => openInLogin; + set => SetProperty(ref openInLogin, value); + } + + private bool canOpenInLogin; + + public bool CanOpenInLogin + { + get => canOpenInLogin; + set => SetProperty(ref canOpenInLogin, value); + } + + public async Task OpenFilesAtStartup() + { + var stateMode = await ReadState(); + + bool state = stateMode switch + { + StartupTaskState.Enabled => true, + StartupTaskState.EnabledByPolicy => true, + StartupTaskState.DisabledByPolicy => false, + StartupTaskState.DisabledByUser => false, + _ => false, + }; + + if (state != OpenInLogin) + { + StartupTask startupTask = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB"); + if (OpenInLogin) + await startupTask.RequestEnableAsync(); + else + startupTask.Disable(); + await DetectOpenFilesAtStartup(); + } + } + + public async Task DetectOpenFilesAtStartup() + { + var stateMode = await ReadState(); + + switch (stateMode) + { + case StartupTaskState.Disabled: + CanOpenInLogin = true; + OpenInLogin = false; + break; + case StartupTaskState.Enabled: + CanOpenInLogin = true; + OpenInLogin = true; + break; + case StartupTaskState.DisabledByPolicy: + CanOpenInLogin = false; + OpenInLogin = false; + break; + case StartupTaskState.DisabledByUser: + CanOpenInLogin = false; + OpenInLogin = false; + break; + case StartupTaskState.EnabledByPolicy: + CanOpenInLogin = false; + OpenInLogin = true; + break; + } + } + + public async Task ReadState() + { + var state = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB"); + return state.State; + } + + public bool ShowFileExtensions + { + get => UserSettingsService.PreferencesSettingsService.ShowFileExtensions; + set + { + if (value != UserSettingsService.PreferencesSettingsService.ShowFileExtensions) + { + UserSettingsService.PreferencesSettingsService.ShowFileExtensions = value; + OnPropertyChanged(); + } + } + } + + public bool ShowThumbnails + { + get => UserSettingsService.PreferencesSettingsService.ShowThumbnails; + set + { + if (value != UserSettingsService.PreferencesSettingsService.ShowThumbnails) + { + UserSettingsService.PreferencesSettingsService.ShowThumbnails = value; + OnPropertyChanged(); + } + } + } + + public bool SelectFilesOnHover + { + get => UserSettingsService.PreferencesSettingsService.SelectFilesOnHover; + set + { + if (value != UserSettingsService.PreferencesSettingsService.SelectFilesOnHover) + { + UserSettingsService.PreferencesSettingsService.SelectFilesOnHover = value; + OnPropertyChanged(); + } + } + } + + public bool ListAndSortDirectoriesAlongsideFiles + { + get => UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; + set + { + if (value != UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles) + { + UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = value; + OnPropertyChanged(); + } + } + } + + public bool SearchUnindexedItems + { + get => UserSettingsService.PreferencesSettingsService.SearchUnindexedItems; + set + { + if (value != UserSettingsService.PreferencesSettingsService.SearchUnindexedItems) + { + UserSettingsService.PreferencesSettingsService.SearchUnindexedItems = value; + OnPropertyChanged(); + } + } + } + + public void Dispose() + { + if (!disposed) + { + disposed = true; + GC.SuppressFinalize(this); + } + } + + ~PreferencesViewModel() + { + Dispose(); + } + } + + public class PageOnStartupViewModel + { + public string Text + { + get + { + if (Path == "Home".GetLocalizedResource()) + return "Home".GetLocalizedResource(); + return (Path == CommonPaths.RecycleBinPath) + ? ApplicationData.Current.LocalSettings.Values.Get("RecycleBin_Title", "Recycle Bin") + : Path; + } + } + + public string Path { get; } + + internal PageOnStartupViewModel(string path) => Path = path; + } + + public class AppLanguageItem + { + public string LanguagID { get; set; } + public string LanguageName { get; set; } + + public AppLanguageItem(string languagID) + { + if (!string.IsNullOrEmpty(languagID)) + { + var info = new CultureInfo(languagID); + LanguagID = info.Name; + LanguageName = info.NativeName; + } + else + { + LanguagID = string.Empty; + var systemDefaultLanguageOptionStr = "SettingsPreferencesSystemDefaultLanguageOption".GetLocalizedResource(); + LanguageName = string.IsNullOrEmpty(systemDefaultLanguageOptionStr) ? "System Default" : systemDefaultLanguageOptionStr; + } + } + + public override string ToString() + { + return LanguageName; + } + } + + public class DateTimeFormatItem + { + public string Label { get; } + public string Sample1 { get; } + public string Sample2 { get; } + + public DateTimeFormatItem(DateTimeFormats style, DateTimeOffset sampleDate1, DateTimeOffset sampleDate2) + { + var factory = Ioc.Default.GetRequiredService(); + var formatter = factory.GetDateTimeFormatter(style); + + Label = formatter.Name; + Sample1 = formatter.ToShortLabel(sampleDate1); + Sample2 = formatter.ToShortLabel(sampleDate2); + } + } } + diff --git a/src/Files.App/Views/SettingsPages/Preferences.xaml b/src/Files.App/Views/SettingsPages/Preferences.xaml index 67d5be8b3536..43df54236789 100644 --- a/src/Files.App/Views/SettingsPages/Preferences.xaml +++ b/src/Files.App/Views/SettingsPages/Preferences.xaml @@ -252,4 +252,5 @@ VerticalAlignment="Bottom" ShowDialog="{x:Bind ViewModel.ShowRestartControl, Mode=TwoWay}" /> - \ No newline at end of file + + \ No newline at end of file From 3e722b83c011bd8b35de1070eeb0af8c490cf705 Mon Sep 17 00:00:00 2001 From: manfromarce Date: Thu, 8 Dec 2022 10:17:58 +0100 Subject: [PATCH 07/30] Fix spacing --- .../PreferencesViewModel.cs | 1084 ++++++++--------- .../Views/SettingsPages/Preferences.xaml | 1 - 2 files changed, 542 insertions(+), 543 deletions(-) diff --git a/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs index 395a62f0479e..896b9917c664 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/PreferencesViewModel.cs @@ -23,547 +23,547 @@ namespace Files.App.ViewModels.SettingsViewModels { - public class PreferencesViewModel : ObservableObject, IDisposable - { - private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); - - private bool disposed; - private ReadOnlyCollection addFlyoutItemsSource; - - // Commands - - public AsyncRelayCommand OpenFilesAtStartupCommand { get; } - public AsyncRelayCommand ChangePageCommand { get; } - public RelayCommand RemovePageCommand { get; } - public RelayCommand AddPageCommand { get; } - - // Properties - - private bool showRestartControl; - public bool ShowRestartControl - { - get => showRestartControl; - set => SetProperty(ref showRestartControl, value); - } - - private int selectedPageIndex = -1; - public int SelectedPageIndex - { - get => selectedPageIndex; - set - { - if (SetProperty(ref selectedPageIndex, value)) - IsPageListEditEnabled = value >= 0; - } - } - - private bool isPageListEditEnabled; - public bool IsPageListEditEnabled - { - get => isPageListEditEnabled; - set => SetProperty(ref isPageListEditEnabled, value); - } - - private int selectedDateTimeFormatIndex; - public int SelectedDateTimeFormatIndex - { - get => selectedDateTimeFormatIndex; - set - { - if (SetProperty(ref selectedDateTimeFormatIndex, value)) - { - OnPropertyChanged(nameof(SelectedDateTimeFormatIndex)); - DateTimeFormat = (DateTimeFormats)value; - } - } - } - - private int selectedAppLanguageIndex; - public int SelectedAppLanguageIndex - { - get => selectedAppLanguageIndex; - set - { - if (SetProperty(ref selectedAppLanguageIndex, value)) - { - OnPropertyChanged(nameof(SelectedAppLanguageIndex)); - - if (ApplicationLanguages.PrimaryLanguageOverride != AppLanguages[value].LanguagID) - ShowRestartControl = true; - - ApplicationLanguages.PrimaryLanguageOverride = AppLanguages[value].LanguagID; - } - } - } - - // Lists - - public List DateFormats { get; set; } - public ObservableCollection AppLanguages { get; set; } - - public PreferencesViewModel() - { - OpenFilesAtStartupCommand = new AsyncRelayCommand(OpenFilesAtStartup); - ChangePageCommand = new AsyncRelayCommand(ChangePage); - RemovePageCommand = new RelayCommand(RemovePage); - AddPageCommand = new RelayCommand(async (path) => await AddPage(path)); - - AddSupportedAppLanguages(); - - AddDateTimeOptions(); - SelectedDateTimeFormatIndex = (int)Enum.Parse(typeof(DateTimeFormats), DateTimeFormat.ToString()); - - dispatcherQueue = DispatcherQueue.GetForCurrentThread(); - - if (UserSettingsService.PreferencesSettingsService.TabsOnStartupList is not null) - PagesOnStartupList = new ObservableCollection(UserSettingsService.PreferencesSettingsService.TabsOnStartupList.Select((p) => new PageOnStartupViewModel(p))); - else - PagesOnStartupList = new ObservableCollection(); - - PagesOnStartupList.CollectionChanged += PagesOnStartupList_CollectionChanged; - - _ = InitStartupSettingsRecentFoldersFlyout(); - _ = DetectOpenFilesAtStartup(); - } - - private void AddDateTimeOptions() - { - DateTimeOffset sampleDate1 = DateTime.Now; - DateTimeOffset sampleDate2 = new DateTime(sampleDate1.Year - 5, 12, 31, 14, 30, 0); - var styles = new DateTimeFormats[] { DateTimeFormats.Application, DateTimeFormats.System, DateTimeFormats.Universal }; - DateFormats = styles.Select(style => new DateTimeFormatItem(style, sampleDate1, sampleDate2)).ToList(); - } - - private void AddSupportedAppLanguages() - { - var appLanguages = ApplicationLanguages.ManifestLanguages - .Append(string.Empty) // add default language id - .Select(language => new AppLanguageItem(language)) - .OrderBy(language => language.LanguagID is not "") // default language on top - .ThenBy(language => language.LanguageName); - AppLanguages = new ObservableCollection(appLanguages); - - string languageID = ApplicationLanguages.PrimaryLanguageOverride; - SelectedAppLanguageIndex = AppLanguages - .IndexOf(AppLanguages.FirstOrDefault(dl => dl.LanguagID == languageID) ?? AppLanguages.First()); - } - - private async Task InitStartupSettingsRecentFoldersFlyout() - { - var recentsItem = new MenuFlyoutSubItemViewModel("JumpListRecentGroupHeader".GetLocalizedResource()); - recentsItem.Items.Add(new MenuFlyoutItemViewModel("Home".GetLocalizedResource()) - { - Command = AddPageCommand, - CommandParameter = "Home".GetLocalizedResource(), - Tooltip = "Home".GetLocalizedResource() - }); - - await App.RecentItemsManager.UpdateRecentFoldersAsync(); // ensure recent folders aren't stale since we don't update them with a watcher - await PopulateRecentItems(recentsItem).ContinueWith(_ => - { - AddFlyoutItemsSource = new List() { - new MenuFlyoutItemViewModel("Browse".GetLocalizedResource()) { Command = AddPageCommand }, - recentsItem, - }.AsReadOnly(); - }, TaskScheduler.FromCurrentSynchronizationContext()); - } - - private Task PopulateRecentItems(MenuFlyoutSubItemViewModel menu) - { - try - { - var recentFolders = App.RecentItemsManager.RecentFolders; - - // add separator - if (recentFolders.Any()) - menu.Items.Add(new MenuFlyoutSeparatorViewModel()); - - foreach (var recentFolder in recentFolders) - { - var menuItem = new MenuFlyoutItemViewModel(recentFolder.Name) - { - Command = AddPageCommand, - CommandParameter = recentFolder.RecentPath, - Tooltip = recentFolder.RecentPath - }; - menu.Items.Add(menuItem); - } - } - catch (Exception ex) - { - App.Logger.Info(ex, "Could not fetch recent items"); - } - - return Task.CompletedTask; - } - - private void PagesOnStartupList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) - { - if (PagesOnStartupList.Count > 0) - UserSettingsService.PreferencesSettingsService.TabsOnStartupList = PagesOnStartupList.Select((p) => p.Path).ToList(); - else - UserSettingsService.PreferencesSettingsService.TabsOnStartupList = null; - } - - public int SelectedStartupSettingIndex => ContinueLastSessionOnStartUp ? 1 : OpenASpecificPageOnStartup ? 2 : 0; - - public bool OpenNewTabPageOnStartup - { - get => UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup; - set - { - if (value != UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup) - { - UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup = value; - OnPropertyChanged(); - } - } - } - - public bool ContinueLastSessionOnStartUp - { - get => UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp; - set - { - if (value != UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp) - { - UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp = value; - OnPropertyChanged(); - } - } - } - - public bool OpenASpecificPageOnStartup - { - get => UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup; - set - { - if (value != UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup) - { - UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup = value; - OnPropertyChanged(); - } - } - } - - public ObservableCollection PagesOnStartupList { get; set; } - - public ReadOnlyCollection AddFlyoutItemsSource - { - get => addFlyoutItemsSource; - set => SetProperty(ref addFlyoutItemsSource, value); - } - - public bool AlwaysOpenANewInstance - { - get => UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance; - set - { - if (value != UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance) - { - UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance = value; - ApplicationData.Current.LocalSettings.Values["AlwaysOpenANewInstance"] = value; // Needed in Program.cs - OnPropertyChanged(); - } - } - } - - private async Task ChangePage() - { - var folderPicker = this.InitializeWithWindow(new FolderPicker()); - folderPicker.FileTypeFilter.Add("*"); - StorageFolder folder = await folderPicker.PickSingleFolderAsync(); - - if (folder is not null) - { - if (SelectedPageIndex >= 0) - PagesOnStartupList[SelectedPageIndex] = new PageOnStartupViewModel(folder.Path); - } - } - - // WINUI3 - private FolderPicker InitializeWithWindow(FolderPicker obj) - { - WinRT.Interop.InitializeWithWindow.Initialize(obj, App.WindowHandle); - return obj; - } - - private void RemovePage() - { - int index = SelectedPageIndex; - if (index >= 0) - { - PagesOnStartupList.RemoveAt(index); - if (index > 0) - SelectedPageIndex = index - 1; - else if (PagesOnStartupList.Count > 0) - SelectedPageIndex = 0; - } - } - - private async Task AddPage(string path = null) - { - if (string.IsNullOrWhiteSpace(path)) - { - var folderPicker = this.InitializeWithWindow(new FolderPicker()); - folderPicker.FileTypeFilter.Add("*"); - - var folder = await folderPicker.PickSingleFolderAsync(); - if (folder is not null) - path = folder.Path; - } - - if (path is not null && PagesOnStartupList is not null) - PagesOnStartupList.Add(new PageOnStartupViewModel(path)); - } - - public string DateFormatSample - => string.Format("DateFormatSample".GetLocalizedResource(), DateFormats[SelectedDateTimeFormatIndex].Sample1, DateFormats[SelectedDateTimeFormatIndex].Sample2); - - private DispatcherQueue dispatcherQueue; - - public bool ShowConfirmDeleteDialog - { - get => UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog; - set - { - if (value != UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog) - { - UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog = value; - OnPropertyChanged(); - } - } - } - - public DateTimeFormats DateTimeFormat - { - get => UserSettingsService.PreferencesSettingsService.DateTimeFormat; - set - { - if (value != UserSettingsService.PreferencesSettingsService.DateTimeFormat) - { - UserSettingsService.PreferencesSettingsService.DateTimeFormat = value; - OnPropertyChanged(); - } - } - } - - private bool openInLogin; - - public bool OpenInLogin - { - get => openInLogin; - set => SetProperty(ref openInLogin, value); - } - - private bool canOpenInLogin; - - public bool CanOpenInLogin - { - get => canOpenInLogin; - set => SetProperty(ref canOpenInLogin, value); - } - - public async Task OpenFilesAtStartup() - { - var stateMode = await ReadState(); - - bool state = stateMode switch - { - StartupTaskState.Enabled => true, - StartupTaskState.EnabledByPolicy => true, - StartupTaskState.DisabledByPolicy => false, - StartupTaskState.DisabledByUser => false, - _ => false, - }; - - if (state != OpenInLogin) - { - StartupTask startupTask = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB"); - if (OpenInLogin) - await startupTask.RequestEnableAsync(); - else - startupTask.Disable(); - await DetectOpenFilesAtStartup(); - } - } - - public async Task DetectOpenFilesAtStartup() - { - var stateMode = await ReadState(); - - switch (stateMode) - { - case StartupTaskState.Disabled: - CanOpenInLogin = true; - OpenInLogin = false; - break; - case StartupTaskState.Enabled: - CanOpenInLogin = true; - OpenInLogin = true; - break; - case StartupTaskState.DisabledByPolicy: - CanOpenInLogin = false; - OpenInLogin = false; - break; - case StartupTaskState.DisabledByUser: - CanOpenInLogin = false; - OpenInLogin = false; - break; - case StartupTaskState.EnabledByPolicy: - CanOpenInLogin = false; - OpenInLogin = true; - break; - } - } - - public async Task ReadState() - { - var state = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB"); - return state.State; - } - - public bool ShowFileExtensions - { - get => UserSettingsService.PreferencesSettingsService.ShowFileExtensions; - set - { - if (value != UserSettingsService.PreferencesSettingsService.ShowFileExtensions) - { - UserSettingsService.PreferencesSettingsService.ShowFileExtensions = value; - OnPropertyChanged(); - } - } - } - - public bool ShowThumbnails - { - get => UserSettingsService.PreferencesSettingsService.ShowThumbnails; - set - { - if (value != UserSettingsService.PreferencesSettingsService.ShowThumbnails) - { - UserSettingsService.PreferencesSettingsService.ShowThumbnails = value; - OnPropertyChanged(); - } - } - } - - public bool SelectFilesOnHover - { - get => UserSettingsService.PreferencesSettingsService.SelectFilesOnHover; - set - { - if (value != UserSettingsService.PreferencesSettingsService.SelectFilesOnHover) - { - UserSettingsService.PreferencesSettingsService.SelectFilesOnHover = value; - OnPropertyChanged(); - } - } - } - - public bool ListAndSortDirectoriesAlongsideFiles - { - get => UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; - set - { - if (value != UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles) - { - UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = value; - OnPropertyChanged(); - } - } - } - - public bool SearchUnindexedItems - { - get => UserSettingsService.PreferencesSettingsService.SearchUnindexedItems; - set - { - if (value != UserSettingsService.PreferencesSettingsService.SearchUnindexedItems) - { - UserSettingsService.PreferencesSettingsService.SearchUnindexedItems = value; - OnPropertyChanged(); - } - } - } - - public void Dispose() - { - if (!disposed) - { - disposed = true; - GC.SuppressFinalize(this); - } - } - - ~PreferencesViewModel() - { - Dispose(); - } - } - - public class PageOnStartupViewModel - { - public string Text - { - get - { - if (Path == "Home".GetLocalizedResource()) - return "Home".GetLocalizedResource(); - return (Path == CommonPaths.RecycleBinPath) - ? ApplicationData.Current.LocalSettings.Values.Get("RecycleBin_Title", "Recycle Bin") - : Path; - } - } - - public string Path { get; } - - internal PageOnStartupViewModel(string path) => Path = path; - } - - public class AppLanguageItem - { - public string LanguagID { get; set; } - public string LanguageName { get; set; } - - public AppLanguageItem(string languagID) - { - if (!string.IsNullOrEmpty(languagID)) - { - var info = new CultureInfo(languagID); - LanguagID = info.Name; - LanguageName = info.NativeName; - } - else - { - LanguagID = string.Empty; - var systemDefaultLanguageOptionStr = "SettingsPreferencesSystemDefaultLanguageOption".GetLocalizedResource(); - LanguageName = string.IsNullOrEmpty(systemDefaultLanguageOptionStr) ? "System Default" : systemDefaultLanguageOptionStr; - } - } - - public override string ToString() - { - return LanguageName; - } - } - - public class DateTimeFormatItem - { - public string Label { get; } - public string Sample1 { get; } - public string Sample2 { get; } - - public DateTimeFormatItem(DateTimeFormats style, DateTimeOffset sampleDate1, DateTimeOffset sampleDate2) - { - var factory = Ioc.Default.GetRequiredService(); - var formatter = factory.GetDateTimeFormatter(style); - - Label = formatter.Name; - Sample1 = formatter.ToShortLabel(sampleDate1); - Sample2 = formatter.ToShortLabel(sampleDate2); - } - } + public class PreferencesViewModel : ObservableObject, IDisposable + { + private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); + + private bool disposed; + private ReadOnlyCollection addFlyoutItemsSource; + + // Commands + + public AsyncRelayCommand OpenFilesAtStartupCommand { get; } + public AsyncRelayCommand ChangePageCommand { get; } + public RelayCommand RemovePageCommand { get; } + public RelayCommand AddPageCommand { get; } + + // Properties + + private bool showRestartControl; + public bool ShowRestartControl + { + get => showRestartControl; + set => SetProperty(ref showRestartControl, value); + } + + private int selectedPageIndex = -1; + public int SelectedPageIndex + { + get => selectedPageIndex; + set + { + if (SetProperty(ref selectedPageIndex, value)) + IsPageListEditEnabled = value >= 0; + } + } + + private bool isPageListEditEnabled; + public bool IsPageListEditEnabled + { + get => isPageListEditEnabled; + set => SetProperty(ref isPageListEditEnabled, value); + } + + private int selectedDateTimeFormatIndex; + public int SelectedDateTimeFormatIndex + { + get => selectedDateTimeFormatIndex; + set + { + if (SetProperty(ref selectedDateTimeFormatIndex, value)) + { + OnPropertyChanged(nameof(SelectedDateTimeFormatIndex)); + DateTimeFormat = (DateTimeFormats)value; + } + } + } + + private int selectedAppLanguageIndex; + public int SelectedAppLanguageIndex + { + get => selectedAppLanguageIndex; + set + { + if (SetProperty(ref selectedAppLanguageIndex, value)) + { + OnPropertyChanged(nameof(SelectedAppLanguageIndex)); + + if (ApplicationLanguages.PrimaryLanguageOverride != AppLanguages[value].LanguagID) + ShowRestartControl = true; + + ApplicationLanguages.PrimaryLanguageOverride = AppLanguages[value].LanguagID; + } + } + } + + // Lists + + public List DateFormats { get; set; } + public ObservableCollection AppLanguages { get; set; } + + public PreferencesViewModel() + { + OpenFilesAtStartupCommand = new AsyncRelayCommand(OpenFilesAtStartup); + ChangePageCommand = new AsyncRelayCommand(ChangePage); + RemovePageCommand = new RelayCommand(RemovePage); + AddPageCommand = new RelayCommand(async (path) => await AddPage(path)); + + AddSupportedAppLanguages(); + + AddDateTimeOptions(); + SelectedDateTimeFormatIndex = (int)Enum.Parse(typeof(DateTimeFormats), DateTimeFormat.ToString()); + + dispatcherQueue = DispatcherQueue.GetForCurrentThread(); + + if (UserSettingsService.PreferencesSettingsService.TabsOnStartupList is not null) + PagesOnStartupList = new ObservableCollection(UserSettingsService.PreferencesSettingsService.TabsOnStartupList.Select((p) => new PageOnStartupViewModel(p))); + else + PagesOnStartupList = new ObservableCollection(); + + PagesOnStartupList.CollectionChanged += PagesOnStartupList_CollectionChanged; + + _ = InitStartupSettingsRecentFoldersFlyout(); + _ = DetectOpenFilesAtStartup(); + } + + private void AddDateTimeOptions() + { + DateTimeOffset sampleDate1 = DateTime.Now; + DateTimeOffset sampleDate2 = new DateTime(sampleDate1.Year - 5, 12, 31, 14, 30, 0); + var styles = new DateTimeFormats[] { DateTimeFormats.Application, DateTimeFormats.System, DateTimeFormats.Universal }; + DateFormats = styles.Select(style => new DateTimeFormatItem(style, sampleDate1, sampleDate2)).ToList(); + } + + private void AddSupportedAppLanguages() + { + var appLanguages = ApplicationLanguages.ManifestLanguages + .Append(string.Empty) // add default language id + .Select(language => new AppLanguageItem(language)) + .OrderBy(language => language.LanguagID is not "") // default language on top + .ThenBy(language => language.LanguageName); + AppLanguages = new ObservableCollection(appLanguages); + + string languageID = ApplicationLanguages.PrimaryLanguageOverride; + SelectedAppLanguageIndex = AppLanguages + .IndexOf(AppLanguages.FirstOrDefault(dl => dl.LanguagID == languageID) ?? AppLanguages.First()); + } + + private async Task InitStartupSettingsRecentFoldersFlyout() + { + var recentsItem = new MenuFlyoutSubItemViewModel("JumpListRecentGroupHeader".GetLocalizedResource()); + recentsItem.Items.Add(new MenuFlyoutItemViewModel("Home".GetLocalizedResource()) + { + Command = AddPageCommand, + CommandParameter = "Home".GetLocalizedResource(), + Tooltip = "Home".GetLocalizedResource() + }); + + await App.RecentItemsManager.UpdateRecentFoldersAsync(); // ensure recent folders aren't stale since we don't update them with a watcher + await PopulateRecentItems(recentsItem).ContinueWith(_ => + { + AddFlyoutItemsSource = new List() { + new MenuFlyoutItemViewModel("Browse".GetLocalizedResource()) { Command = AddPageCommand }, + recentsItem, + }.AsReadOnly(); + }, TaskScheduler.FromCurrentSynchronizationContext()); + } + + private Task PopulateRecentItems(MenuFlyoutSubItemViewModel menu) + { + try + { + var recentFolders = App.RecentItemsManager.RecentFolders; + + // add separator + if (recentFolders.Any()) + menu.Items.Add(new MenuFlyoutSeparatorViewModel()); + + foreach (var recentFolder in recentFolders) + { + var menuItem = new MenuFlyoutItemViewModel(recentFolder.Name) + { + Command = AddPageCommand, + CommandParameter = recentFolder.RecentPath, + Tooltip = recentFolder.RecentPath + }; + menu.Items.Add(menuItem); + } + } + catch (Exception ex) + { + App.Logger.Info(ex, "Could not fetch recent items"); + } + + return Task.CompletedTask; + } + + private void PagesOnStartupList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + { + if (PagesOnStartupList.Count > 0) + UserSettingsService.PreferencesSettingsService.TabsOnStartupList = PagesOnStartupList.Select((p) => p.Path).ToList(); + else + UserSettingsService.PreferencesSettingsService.TabsOnStartupList = null; + } + + public int SelectedStartupSettingIndex => ContinueLastSessionOnStartUp ? 1 : OpenASpecificPageOnStartup ? 2 : 0; + + public bool OpenNewTabPageOnStartup + { + get => UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup; + set + { + if (value != UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup) + { + UserSettingsService.PreferencesSettingsService.OpenNewTabOnStartup = value; + OnPropertyChanged(); + } + } + } + + public bool ContinueLastSessionOnStartUp + { + get => UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp; + set + { + if (value != UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp) + { + UserSettingsService.PreferencesSettingsService.ContinueLastSessionOnStartUp = value; + OnPropertyChanged(); + } + } + } + + public bool OpenASpecificPageOnStartup + { + get => UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup; + set + { + if (value != UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup) + { + UserSettingsService.PreferencesSettingsService.OpenSpecificPageOnStartup = value; + OnPropertyChanged(); + } + } + } + + public ObservableCollection PagesOnStartupList { get; set; } + + public ReadOnlyCollection AddFlyoutItemsSource + { + get => addFlyoutItemsSource; + set => SetProperty(ref addFlyoutItemsSource, value); + } + + public bool AlwaysOpenANewInstance + { + get => UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance; + set + { + if (value != UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance) + { + UserSettingsService.PreferencesSettingsService.AlwaysOpenNewInstance = value; + ApplicationData.Current.LocalSettings.Values["AlwaysOpenANewInstance"] = value; // Needed in Program.cs + OnPropertyChanged(); + } + } + } + + private async Task ChangePage() + { + var folderPicker = this.InitializeWithWindow(new FolderPicker()); + folderPicker.FileTypeFilter.Add("*"); + StorageFolder folder = await folderPicker.PickSingleFolderAsync(); + + if (folder is not null) + { + if (SelectedPageIndex >= 0) + PagesOnStartupList[SelectedPageIndex] = new PageOnStartupViewModel(folder.Path); + } + } + + // WINUI3 + private FolderPicker InitializeWithWindow(FolderPicker obj) + { + WinRT.Interop.InitializeWithWindow.Initialize(obj, App.WindowHandle); + return obj; + } + + private void RemovePage() + { + int index = SelectedPageIndex; + if (index >= 0) + { + PagesOnStartupList.RemoveAt(index); + if (index > 0) + SelectedPageIndex = index - 1; + else if (PagesOnStartupList.Count > 0) + SelectedPageIndex = 0; + } + } + + private async Task AddPage(string path = null) + { + if (string.IsNullOrWhiteSpace(path)) + { + var folderPicker = this.InitializeWithWindow(new FolderPicker()); + folderPicker.FileTypeFilter.Add("*"); + + var folder = await folderPicker.PickSingleFolderAsync(); + if (folder is not null) + path = folder.Path; + } + + if (path is not null && PagesOnStartupList is not null) + PagesOnStartupList.Add(new PageOnStartupViewModel(path)); + } + + public string DateFormatSample + => string.Format("DateFormatSample".GetLocalizedResource(), DateFormats[SelectedDateTimeFormatIndex].Sample1, DateFormats[SelectedDateTimeFormatIndex].Sample2); + + private DispatcherQueue dispatcherQueue; + + public bool ShowConfirmDeleteDialog + { + get => UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog; + set + { + if (value != UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog) + { + UserSettingsService.PreferencesSettingsService.ShowConfirmDeleteDialog = value; + OnPropertyChanged(); + } + } + } + + public DateTimeFormats DateTimeFormat + { + get => UserSettingsService.PreferencesSettingsService.DateTimeFormat; + set + { + if (value != UserSettingsService.PreferencesSettingsService.DateTimeFormat) + { + UserSettingsService.PreferencesSettingsService.DateTimeFormat = value; + OnPropertyChanged(); + } + } + } + + private bool openInLogin; + + public bool OpenInLogin + { + get => openInLogin; + set => SetProperty(ref openInLogin, value); + } + + private bool canOpenInLogin; + + public bool CanOpenInLogin + { + get => canOpenInLogin; + set => SetProperty(ref canOpenInLogin, value); + } + + public async Task OpenFilesAtStartup() + { + var stateMode = await ReadState(); + + bool state = stateMode switch + { + StartupTaskState.Enabled => true, + StartupTaskState.EnabledByPolicy => true, + StartupTaskState.DisabledByPolicy => false, + StartupTaskState.DisabledByUser => false, + _ => false, + }; + + if (state != OpenInLogin) + { + StartupTask startupTask = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB"); + if (OpenInLogin) + await startupTask.RequestEnableAsync(); + else + startupTask.Disable(); + await DetectOpenFilesAtStartup(); + } + } + + public async Task DetectOpenFilesAtStartup() + { + var stateMode = await ReadState(); + + switch (stateMode) + { + case StartupTaskState.Disabled: + CanOpenInLogin = true; + OpenInLogin = false; + break; + case StartupTaskState.Enabled: + CanOpenInLogin = true; + OpenInLogin = true; + break; + case StartupTaskState.DisabledByPolicy: + CanOpenInLogin = false; + OpenInLogin = false; + break; + case StartupTaskState.DisabledByUser: + CanOpenInLogin = false; + OpenInLogin = false; + break; + case StartupTaskState.EnabledByPolicy: + CanOpenInLogin = false; + OpenInLogin = true; + break; + } + } + + public async Task ReadState() + { + var state = await StartupTask.GetAsync("3AA55462-A5FA-4933-88C4-712D0B6CDEBB"); + return state.State; + } + + public bool ShowFileExtensions + { + get => UserSettingsService.PreferencesSettingsService.ShowFileExtensions; + set + { + if (value != UserSettingsService.PreferencesSettingsService.ShowFileExtensions) + { + UserSettingsService.PreferencesSettingsService.ShowFileExtensions = value; + OnPropertyChanged(); + } + } + } + + public bool ShowThumbnails + { + get => UserSettingsService.PreferencesSettingsService.ShowThumbnails; + set + { + if (value != UserSettingsService.PreferencesSettingsService.ShowThumbnails) + { + UserSettingsService.PreferencesSettingsService.ShowThumbnails = value; + OnPropertyChanged(); + } + } + } + + public bool SelectFilesOnHover + { + get => UserSettingsService.PreferencesSettingsService.SelectFilesOnHover; + set + { + if (value != UserSettingsService.PreferencesSettingsService.SelectFilesOnHover) + { + UserSettingsService.PreferencesSettingsService.SelectFilesOnHover = value; + OnPropertyChanged(); + } + } + } + + public bool ListAndSortDirectoriesAlongsideFiles + { + get => UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; + set + { + if (value != UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles) + { + UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = value; + OnPropertyChanged(); + } + } + } + + public bool SearchUnindexedItems + { + get => UserSettingsService.PreferencesSettingsService.SearchUnindexedItems; + set + { + if (value != UserSettingsService.PreferencesSettingsService.SearchUnindexedItems) + { + UserSettingsService.PreferencesSettingsService.SearchUnindexedItems = value; + OnPropertyChanged(); + } + } + } + + public void Dispose() + { + if (!disposed) + { + disposed = true; + GC.SuppressFinalize(this); + } + } + + ~PreferencesViewModel() + { + Dispose(); + } + } + + public class PageOnStartupViewModel + { + public string Text + { + get + { + if (Path == "Home".GetLocalizedResource()) + return "Home".GetLocalizedResource(); + return (Path == CommonPaths.RecycleBinPath) + ? ApplicationData.Current.LocalSettings.Values.Get("RecycleBin_Title", "Recycle Bin") + : Path; + } + } + + public string Path { get; } + + internal PageOnStartupViewModel(string path) => Path = path; + } + + public class AppLanguageItem + { + public string LanguagID { get; set; } + public string LanguageName { get; set; } + + public AppLanguageItem(string languagID) + { + if (!string.IsNullOrEmpty(languagID)) + { + var info = new CultureInfo(languagID); + LanguagID = info.Name; + LanguageName = info.NativeName; + } + else + { + LanguagID = string.Empty; + var systemDefaultLanguageOptionStr = "SettingsPreferencesSystemDefaultLanguageOption".GetLocalizedResource(); + LanguageName = string.IsNullOrEmpty(systemDefaultLanguageOptionStr) ? "System Default" : systemDefaultLanguageOptionStr; + } + } + + public override string ToString() + { + return LanguageName; + } + } + + public class DateTimeFormatItem + { + public string Label { get; } + public string Sample1 { get; } + public string Sample2 { get; } + + public DateTimeFormatItem(DateTimeFormats style, DateTimeOffset sampleDate1, DateTimeOffset sampleDate2) + { + var factory = Ioc.Default.GetRequiredService(); + var formatter = factory.GetDateTimeFormatter(style); + + Label = formatter.Name; + Sample1 = formatter.ToShortLabel(sampleDate1); + Sample2 = formatter.ToShortLabel(sampleDate2); + } + } } diff --git a/src/Files.App/Views/SettingsPages/Preferences.xaml b/src/Files.App/Views/SettingsPages/Preferences.xaml index 43df54236789..e3f9dc700646 100644 --- a/src/Files.App/Views/SettingsPages/Preferences.xaml +++ b/src/Files.App/Views/SettingsPages/Preferences.xaml @@ -253,4 +253,3 @@ ShowDialog="{x:Bind ViewModel.ShowRestartControl, Mode=TwoWay}" /> - \ No newline at end of file From 51dd7c8f19290d9614bab90c036307658f82f650 Mon Sep 17 00:00:00 2001 From: manfromarce Date: Thu, 8 Dec 2022 10:30:48 +0100 Subject: [PATCH 08/30] Remove DefaultSortDirection changes --- .../Helpers/ContextFlyoutItemHelper.cs | 34 +++++++++---------- .../LayoutPreferences/LayoutPreferences.cs | 2 +- .../Settings/FoldersSettingsService.cs | 6 ---- .../Settings/LayoutSettingsService.cs | 6 ++++ .../ViewModels/FolderSettingsViewModel.cs | 2 +- src/Files.App/ViewModels/ItemViewModel.cs | 1 - .../SettingsViewModels/FoldersViewModel.cs | 28 --------------- .../Views/SettingsPages/Folders.xaml | 7 ---- .../Settings/IFoldersSettingsService.cs | 5 --- .../Settings/ILayoutSettingsService.cs | 2 ++ 10 files changed, 27 insertions(+), 66 deletions(-) diff --git a/src/Files.App/Helpers/ContextFlyoutItemHelper.cs b/src/Files.App/Helpers/ContextFlyoutItemHelper.cs index e78e0cdcabb1..dbbd2847dfe8 100644 --- a/src/Files.App/Helpers/ContextFlyoutItemHelper.cs +++ b/src/Files.App/Helpers/ContextFlyoutItemHelper.cs @@ -275,6 +275,14 @@ public static List GetBaseLayoutMenuItems(Curren ItemType = ItemType.Toggle }, new ContextMenuFlyoutItemViewModel() + { + Text = "SyncStatus".GetLocalizedResource(), + IsChecked = itemViewModel.IsSortedBySyncStatus, + Command = new RelayCommand(() => itemViewModel.IsSortedBySyncStatus = true), + ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, + ItemType = ItemType.Toggle + }, + new ContextMenuFlyoutItemViewModel() { Text = "FileTags".GetLocalizedResource(), IsChecked = itemViewModel.IsSortedByFileTag, @@ -293,14 +301,6 @@ public static List GetBaseLayoutMenuItems(Curren ItemType = ItemType.Toggle, }, new ContextMenuFlyoutItemViewModel() - { - Text = "SyncStatus".GetLocalizedResource(), - IsChecked = itemViewModel.IsSortedBySyncStatus, - Command = new RelayCommand(() => itemViewModel.IsSortedBySyncStatus = true), - ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, - ItemType = ItemType.Toggle - }, - new ContextMenuFlyoutItemViewModel() { Text = "DateDeleted".GetLocalizedResource(), IsChecked = itemViewModel.IsSortedByDateDeleted, @@ -425,21 +425,21 @@ public static List GetBaseLayoutMenuItems(Curren }, new ContextMenuFlyoutItemViewModel() { - Text = "FileTags".GetLocalizedResource(), - IsChecked = currentInstanceViewModel.FolderSettings.DirectoryGroupOption == GroupOption.FileTag, - ShowInRecycleBin = true, - ShowInSearchPage = true, + Text = "SyncStatus".GetLocalizedResource(), + IsChecked = currentInstanceViewModel.FolderSettings.DirectoryGroupOption == GroupOption.SyncStatus, + ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, Command = currentInstanceViewModel.FolderSettings.ChangeGroupOptionCommand, - CommandParameter = GroupOption.FileTag, + CommandParameter = GroupOption.SyncStatus, ItemType = ItemType.Toggle, }, new ContextMenuFlyoutItemViewModel() { - Text = "SyncStatus".GetLocalizedResource(), - IsChecked = currentInstanceViewModel.FolderSettings.DirectoryGroupOption == GroupOption.SyncStatus, - ShowItem = currentInstanceViewModel.IsPageTypeCloudDrive, + Text = "FileTags".GetLocalizedResource(), + IsChecked = currentInstanceViewModel.FolderSettings.DirectoryGroupOption == GroupOption.FileTag, + ShowInRecycleBin = true, + ShowInSearchPage = true, Command = currentInstanceViewModel.FolderSettings.ChangeGroupOptionCommand, - CommandParameter = GroupOption.SyncStatus, + CommandParameter = GroupOption.FileTag, ItemType = ItemType.Toggle, }, new ContextMenuFlyoutItemViewModel() diff --git a/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs b/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs index 63eb8c658b9c..d7362590bc9c 100644 --- a/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs +++ b/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs @@ -30,7 +30,7 @@ public LayoutPreferences() this.GridViewSize = UserSettingsService.LayoutSettingsService.DefaultGridViewSize; this.DirectorySortOption = UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption; this.DirectoryGroupOption = UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption; - this.DirectorySortDirection = UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection; + this.DirectorySortDirection = UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection; this.SortDirectoriesAlongsideFiles = UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; this.IsAdaptiveLayoutOverridden = defaultLayout is not FolderLayoutModes.Adaptive; diff --git a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs index f3793e2c4236..d74728783ac3 100644 --- a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs +++ b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs @@ -208,12 +208,6 @@ public bool CalculateFolderSizes set => Set(value); } - public SortDirection DefaultDirectorySortDirection - { - get => (SortDirection)Get((long)SortDirection.Ascending); - set => Set((long)value); - } - public SortOption DefaultDirectorySortOption { get => (SortOption)Get((long)SortOption.Name); diff --git a/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs b/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs index 202a692ede87..453205d1768d 100644 --- a/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs +++ b/src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs @@ -18,6 +18,12 @@ public int DefaultGridViewSize set => Set((long)value); } + public SortDirection DefaultDirectorySortDirection + { + get => (SortDirection)Get((long)SortDirection.Ascending); + set => Set((long)value); + } + public bool DefaultSortDirectoriesAlongsideFiles { get => Get(false); diff --git a/src/Files.App/ViewModels/FolderSettingsViewModel.cs b/src/Files.App/ViewModels/FolderSettingsViewModel.cs index d0fa442bf751..39be52c32535 100644 --- a/src/Files.App/ViewModels/FolderSettingsViewModel.cs +++ b/src/Files.App/ViewModels/FolderSettingsViewModel.cs @@ -326,7 +326,7 @@ public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferen { userSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption = prefs.DirectoryGroupOption; } - userSettingsService.FoldersSettingsService.DefaultDirectorySortDirection = prefs.DirectorySortDirection; + userSettingsService.LayoutSettingsService.DefaultDirectorySortDirection = prefs.DirectorySortDirection; userSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles; userSettingsService.FoldersSettingsService.ShowDateColumn = !prefs.ColumnsViewModel.DateModifiedColumn.UserCollapsed; diff --git a/src/Files.App/ViewModels/ItemViewModel.cs b/src/Files.App/ViewModels/ItemViewModel.cs index 844fc3751907..cee122fb6b9f 100644 --- a/src/Files.App/ViewModels/ItemViewModel.cs +++ b/src/Files.App/ViewModels/ItemViewModel.cs @@ -498,7 +498,6 @@ await dispatcherQueue.EnqueueAsync(() => }); break; case nameof(UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption): - case nameof(UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection): case nameof(UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption): case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles): case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences): diff --git a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs index ec50d023fac3..729bdd1adffd 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs @@ -21,7 +21,6 @@ public FoldersViewModel() SelectedDefaultLayoutModeIndex = (int)DefaultLayoutMode; SelectedDefaultSortingIndex = (int)DefaultSortOption; - SelectedDefaultSortDirectionIndex = (int)DefaultSortDirection; SelectedDefaultGroupingIndex = (int)DefaultGroupOption; } @@ -256,20 +255,6 @@ public int SelectedDefaultSortingIndex } } - private int selectedDefaultSortDirectionIndex; - public int SelectedDefaultSortDirectionIndex - { - get => selectedDefaultSortDirectionIndex; - set - { - if (SetProperty(ref selectedDefaultSortDirectionIndex, value)) - { - OnPropertyChanged(nameof(SelectedDefaultSortDirectionIndex)); - DefaultSortDirection = (SortDirection)value; - } - } - } - private int selectedDefaultGroupingIndex; public int SelectedDefaultGroupingIndex { @@ -297,19 +282,6 @@ public SortOption DefaultSortOption } } - public SortDirection DefaultSortDirection - { - get => UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection; - set - { - if (value != UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection) - { - UserSettingsService.FoldersSettingsService.DefaultDirectorySortDirection = value; - OnPropertyChanged(); - } - } - } - public GroupOption DefaultGroupOption { get => UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption; diff --git a/src/Files.App/Views/SettingsPages/Folders.xaml b/src/Files.App/Views/SettingsPages/Folders.xaml index 82a3338fcecf..3f99402359c9 100644 --- a/src/Files.App/Views/SettingsPages/Folders.xaml +++ b/src/Files.App/Views/SettingsPages/Folders.xaml @@ -138,13 +138,6 @@ - - - - - - - diff --git a/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs b/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs index 3287b15d1780..135a37d5f544 100644 --- a/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs +++ b/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs @@ -145,11 +145,6 @@ public interface IFoldersSettingsService : IBaseSettingsService, INotifyProperty /// SortOption DefaultDirectorySortOption { get; set; } - /// - /// Gets or sets a value indicating the default sort direction (ascending / descending). - /// - SortDirection DefaultDirectorySortDirection { get; set; } - /// /// Gets or sets a value indicating the default grouping option. /// diff --git a/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs b/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs index 86d1a0b2d0bc..ae6b2b27d10a 100644 --- a/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs +++ b/src/Files.Backend/Services/Settings/ILayoutSettingsService.cs @@ -7,6 +7,8 @@ public interface ILayoutSettingsService : IBaseSettingsService, INotifyPropertyC { int DefaultGridViewSize { get; set; } + SortDirection DefaultDirectorySortDirection { get; set; } + bool DefaultSortDirectoriesAlongsideFiles { get; set; } } } From 6145fdd08908cf5f5684eb43e5fe1653044170aa Mon Sep 17 00:00:00 2001 From: manfromarce Date: Thu, 8 Dec 2022 10:45:06 +0100 Subject: [PATCH 09/30] Fix combobox index when FileTag is set as default sort/group option --- .../ViewModels/SettingsViewModels/FoldersViewModel.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs index 729bdd1adffd..6e8139b5d329 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs @@ -10,6 +10,9 @@ public class FoldersViewModel : ObservableObject { private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); + private readonly int FileTagSortingIndex = 5; + private readonly int FileTagGroupingIndex = 6; + // Commands public RelayCommand ResetLayoutPreferencesCommand { get; } public RelayCommand ShowResetLayoutPreferencesTipCommand { get; } @@ -20,8 +23,8 @@ public FoldersViewModel() ShowResetLayoutPreferencesTipCommand = new RelayCommand(() => IsResetLayoutPreferencesTipOpen = true); SelectedDefaultLayoutModeIndex = (int)DefaultLayoutMode; - SelectedDefaultSortingIndex = (int)DefaultSortOption; - SelectedDefaultGroupingIndex = (int)DefaultGroupOption; + SelectedDefaultSortingIndex = DefaultSortOption == SortOption.FileTag ? FileTagSortingIndex : (int)DefaultSortOption; + SelectedDefaultGroupingIndex = DefaultGroupOption == GroupOption.FileTag ? FileTagGroupingIndex : (int)DefaultGroupOption; } // Properties @@ -250,7 +253,7 @@ public int SelectedDefaultSortingIndex if (SetProperty(ref selectedDefaultSortingIndex, value)) { OnPropertyChanged(nameof(SelectedDefaultSortingIndex)); - DefaultSortOption = (SortOption)value; + DefaultSortOption = value == FileTagSortingIndex ? SortOption.FileTag : (SortOption)value; } } } @@ -264,7 +267,7 @@ public int SelectedDefaultGroupingIndex if (SetProperty(ref selectedDefaultGroupingIndex, value)) { OnPropertyChanged(nameof(SelectedDefaultGroupingIndex)); - DefaultGroupOption = (GroupOption)value; + DefaultGroupOption = value == FileTagGroupingIndex ? GroupOption.FileTag : (GroupOption)value; } } } From 3de1f590b1aac522b87db8d7b9edc169ed487bdb Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 8 Dec 2022 11:20:50 -0500 Subject: [PATCH 10/30] Strings --- src/Files.App/Strings/en-US/Resources.resw | 60 ++++++++++--------- .../Views/SettingsPages/Folders.xaml | 12 ++-- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index b9181f4d2811..9a6f1cb76ada 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -1,17 +1,17 @@  - @@ -2934,4 +2934,10 @@ Sync status column + + Group by + + + Sort by + \ No newline at end of file diff --git a/src/Files.App/Views/SettingsPages/Folders.xaml b/src/Files.App/Views/SettingsPages/Folders.xaml index 3f99402359c9..9e175450eab9 100644 --- a/src/Files.App/Views/SettingsPages/Folders.xaml +++ b/src/Files.App/Views/SettingsPages/Folders.xaml @@ -120,15 +120,16 @@ - + - - + + + @@ -138,8 +139,9 @@ - - + + + From cd32ec23d31190795901d656e71c47f2f5912fa7 Mon Sep 17 00:00:00 2001 From: Manfredi <45036600+manfromarce@users.noreply.github.com> Date: Thu, 8 Dec 2022 21:14:07 +0100 Subject: [PATCH 11/30] Update src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs Co-authored-by: Yair <39923744+yaira2@users.noreply.github.com> --- .../ServicesImplementation/Settings/FoldersSettingsService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs index d74728783ac3..eed341e3e0ee 100644 --- a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs +++ b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs @@ -208,7 +208,7 @@ public bool CalculateFolderSizes set => Set(value); } - public SortOption DefaultDirectorySortOption + public SortOption DefaultSortOption { get => (SortOption)Get((long)SortOption.Name); set => Set((long)value); From 9dcdf026efb3a023f86c4712acff2d364159802c Mon Sep 17 00:00:00 2001 From: Manfredi <45036600+manfromarce@users.noreply.github.com> Date: Thu, 8 Dec 2022 21:14:21 +0100 Subject: [PATCH 12/30] Update src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs Co-authored-by: Yair <39923744+yaira2@users.noreply.github.com> --- .../ServicesImplementation/Settings/FoldersSettingsService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs index eed341e3e0ee..0f0b107f8b4d 100644 --- a/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs +++ b/src/Files.App/ServicesImplementation/Settings/FoldersSettingsService.cs @@ -214,7 +214,7 @@ public SortOption DefaultSortOption set => Set((long)value); } - public GroupOption DefaultDirectoryGroupOption + public GroupOption DefaultGroupOption { get => (GroupOption)Get((long)GroupOption.None); set => Set((long)value); From 097a731f8b982018ac27eb233fb312b82d258aad Mon Sep 17 00:00:00 2001 From: manfromarce Date: Thu, 8 Dec 2022 21:54:21 +0100 Subject: [PATCH 13/30] Rename into DefaultSortOption and DefaultGroupOption --- .../Helpers/LayoutPreferences/LayoutPreferences.cs | 4 ++-- src/Files.App/ViewModels/FolderSettingsViewModel.cs | 4 ++-- src/Files.App/ViewModels/ItemViewModel.cs | 4 ++-- .../SettingsViewModels/FoldersViewModel.cs | 12 ++++++------ .../Services/Settings/IFoldersSettingsService.cs | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs b/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs index d7362590bc9c..572ed982e2d6 100644 --- a/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs +++ b/src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs @@ -28,8 +28,8 @@ public LayoutPreferences() this.LayoutMode = defaultLayout is FolderLayoutModes.Adaptive ? FolderLayoutModes.DetailsView : defaultLayout; this.GridViewSize = UserSettingsService.LayoutSettingsService.DefaultGridViewSize; - this.DirectorySortOption = UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption; - this.DirectoryGroupOption = UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption; + this.DirectorySortOption = UserSettingsService.FoldersSettingsService.DefaultSortOption; + this.DirectoryGroupOption = UserSettingsService.FoldersSettingsService.DefaultGroupOption; this.DirectorySortDirection = UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection; this.SortDirectoriesAlongsideFiles = UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles; this.IsAdaptiveLayoutOverridden = defaultLayout is not FolderLayoutModes.Adaptive; diff --git a/src/Files.App/ViewModels/FolderSettingsViewModel.cs b/src/Files.App/ViewModels/FolderSettingsViewModel.cs index 39be52c32535..ef50c82cf2f8 100644 --- a/src/Files.App/ViewModels/FolderSettingsViewModel.cs +++ b/src/Files.App/ViewModels/FolderSettingsViewModel.cs @@ -317,14 +317,14 @@ public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferen prefs.DirectorySortOption != SortOption.DateDeleted && prefs.DirectorySortOption != SortOption.SyncStatus) { - userSettingsService.FoldersSettingsService.DefaultDirectorySortOption = prefs.DirectorySortOption; + userSettingsService.FoldersSettingsService.DefaultSortOption = prefs.DirectorySortOption; } if (prefs.DirectoryGroupOption != GroupOption.OriginalFolder && prefs.DirectoryGroupOption != GroupOption.DateDeleted && prefs.DirectoryGroupOption != GroupOption.FolderPath && prefs.DirectoryGroupOption != GroupOption.SyncStatus) { - userSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption = prefs.DirectoryGroupOption; + userSettingsService.FoldersSettingsService.DefaultGroupOption = prefs.DirectoryGroupOption; } userSettingsService.LayoutSettingsService.DefaultDirectorySortDirection = prefs.DirectorySortDirection; userSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles; diff --git a/src/Files.App/ViewModels/ItemViewModel.cs b/src/Files.App/ViewModels/ItemViewModel.cs index cee122fb6b9f..bee620a072ad 100644 --- a/src/Files.App/ViewModels/ItemViewModel.cs +++ b/src/Files.App/ViewModels/ItemViewModel.cs @@ -497,8 +497,8 @@ await dispatcherQueue.EnqueueAsync(() => RefreshItems(null); }); break; - case nameof(UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption): - case nameof(UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption): + case nameof(UserSettingsService.FoldersSettingsService.DefaultSortOption): + case nameof(UserSettingsService.FoldersSettingsService.DefaultGroupOption): case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles): case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences): await dispatcherQueue.EnqueueAsync(() => diff --git a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs index 6e8139b5d329..947895f7e242 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs @@ -274,12 +274,12 @@ public int SelectedDefaultGroupingIndex public SortOption DefaultSortOption { - get => UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption; + get => UserSettingsService.FoldersSettingsService.DefaultSortOption; set { - if (value != UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption) + if (value != UserSettingsService.FoldersSettingsService.DefaultSortOption) { - UserSettingsService.FoldersSettingsService.DefaultDirectorySortOption = value; + UserSettingsService.FoldersSettingsService.DefaultSortOption = value; OnPropertyChanged(); } } @@ -287,12 +287,12 @@ public SortOption DefaultSortOption public GroupOption DefaultGroupOption { - get => UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption; + get => UserSettingsService.FoldersSettingsService.DefaultGroupOption; set { - if (value != UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption) + if (value != UserSettingsService.FoldersSettingsService.DefaultGroupOption) { - UserSettingsService.FoldersSettingsService.DefaultDirectoryGroupOption = value; + UserSettingsService.FoldersSettingsService.DefaultGroupOption = value; OnPropertyChanged(); } } diff --git a/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs b/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs index 135a37d5f544..5319e8f85d58 100644 --- a/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs +++ b/src/Files.Backend/Services/Settings/IFoldersSettingsService.cs @@ -143,11 +143,11 @@ public interface IFoldersSettingsService : IBaseSettingsService, INotifyProperty /// /// Gets or sets a value indicating the default sorting option. /// - SortOption DefaultDirectorySortOption { get; set; } + SortOption DefaultSortOption { get; set; } /// /// Gets or sets a value indicating the default grouping option. /// - GroupOption DefaultDirectoryGroupOption { get; set; } + GroupOption DefaultGroupOption { get; set; } } } From 8f54d5c44ef0427dd6afbfa84dc3700caf245c67 Mon Sep 17 00:00:00 2001 From: manfromarce Date: Thu, 8 Dec 2022 22:00:16 +0100 Subject: [PATCH 14/30] Update FoldersViewModel --- .../SettingsViewModels/FoldersViewModel.cs | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs index 947895f7e242..7f2d9212862c 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs @@ -24,7 +24,7 @@ public FoldersViewModel() SelectedDefaultLayoutModeIndex = (int)DefaultLayoutMode; SelectedDefaultSortingIndex = DefaultSortOption == SortOption.FileTag ? FileTagSortingIndex : (int)DefaultSortOption; - SelectedDefaultGroupingIndex = DefaultGroupOption == GroupOption.FileTag ? FileTagGroupingIndex : (int)DefaultGroupOption; + SelectedDefaultGroupingIndex = UserSettingsService.FoldersSettingsService.DefaultGroupOption == GroupOption.FileTag ? FileTagGroupingIndex : (int)UserSettingsService.FoldersSettingsService.DefaultGroupOption; } // Properties @@ -267,7 +267,7 @@ public int SelectedDefaultGroupingIndex if (SetProperty(ref selectedDefaultGroupingIndex, value)) { OnPropertyChanged(nameof(SelectedDefaultGroupingIndex)); - DefaultGroupOption = value == FileTagGroupingIndex ? GroupOption.FileTag : (GroupOption)value; + UserSettingsService.FoldersSettingsService.DefaultGroupOption = value == FileTagGroupingIndex ? GroupOption.FileTag : (GroupOption)value; } } } @@ -285,19 +285,6 @@ public SortOption DefaultSortOption } } - public GroupOption DefaultGroupOption - { - get => UserSettingsService.FoldersSettingsService.DefaultGroupOption; - set - { - if (value != UserSettingsService.FoldersSettingsService.DefaultGroupOption) - { - UserSettingsService.FoldersSettingsService.DefaultGroupOption = value; - OnPropertyChanged(); - } - } - } - // Local methods public void ResetLayoutPreferences() From 14ece5b902740c68dfd92bd5a0fa0af3b4b04629 Mon Sep 17 00:00:00 2001 From: Manfredi <45036600+manfromarce@users.noreply.github.com> Date: Fri, 9 Dec 2022 10:47:47 +0100 Subject: [PATCH 15/30] Update FoldersViewModel.cs --- .../SettingsViewModels/FoldersViewModel.cs | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs index 7f2d9212862c..369745520115 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs @@ -23,7 +23,7 @@ public FoldersViewModel() ShowResetLayoutPreferencesTipCommand = new RelayCommand(() => IsResetLayoutPreferencesTipOpen = true); SelectedDefaultLayoutModeIndex = (int)DefaultLayoutMode; - SelectedDefaultSortingIndex = DefaultSortOption == SortOption.FileTag ? FileTagSortingIndex : (int)DefaultSortOption; + SelectedDefaultSortingIndex = UserSettingsService.FoldersSettingsService.DefaultSortOption == SortOption.FileTag ? FileTagSortingIndex : (int)UserSettingsService.FoldersSettingsService.DefaultSortOption; SelectedDefaultGroupingIndex = UserSettingsService.FoldersSettingsService.DefaultGroupOption == GroupOption.FileTag ? FileTagGroupingIndex : (int)UserSettingsService.FoldersSettingsService.DefaultGroupOption; } @@ -253,7 +253,7 @@ public int SelectedDefaultSortingIndex if (SetProperty(ref selectedDefaultSortingIndex, value)) { OnPropertyChanged(nameof(SelectedDefaultSortingIndex)); - DefaultSortOption = value == FileTagSortingIndex ? SortOption.FileTag : (SortOption)value; + UserSettingsService.FoldersSettingsService.DefaultSortOption = value == FileTagSortingIndex ? SortOption.FileTag : (SortOption)value; } } } @@ -271,20 +271,7 @@ public int SelectedDefaultGroupingIndex } } } - - public SortOption DefaultSortOption - { - get => UserSettingsService.FoldersSettingsService.DefaultSortOption; - set - { - if (value != UserSettingsService.FoldersSettingsService.DefaultSortOption) - { - UserSettingsService.FoldersSettingsService.DefaultSortOption = value; - OnPropertyChanged(); - } - } - } - + // Local methods public void ResetLayoutPreferences() From 08cfee51a3c5c6288d29c9bd26091017c85fbbf4 Mon Sep 17 00:00:00 2001 From: manfromarce Date: Sun, 11 Dec 2022 11:20:00 +0100 Subject: [PATCH 16/30] Add comment --- src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs index 369745520115..936e7a513e6f 100644 --- a/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs +++ b/src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs @@ -10,6 +10,8 @@ public class FoldersViewModel : ObservableObject { private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); + + //FileTag combobox indexes (required to hide SyncStatus) private readonly int FileTagSortingIndex = 5; private readonly int FileTagGroupingIndex = 6; From 1bf150fa305ae17797b88fe5b0007e5a24e89db8 Mon Sep 17 00:00:00 2001 From: Manfredi <45036600+manfromarce@users.noreply.github.com> Date: Sun, 11 Dec 2022 20:41:53 +0100 Subject: [PATCH 17/30] Update src/Files.App/Strings/en-US/Resources.resw Co-authored-by: Quaint Mako <110472580+QuaintMako@users.noreply.github.com> --- src/Files.App/Strings/en-US/Resources.resw | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 9a6f1cb76ada..1e9bed1cc375 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -1,8 +1,8 @@  -