Skip to content

Feature: Added setting to sync folder preferences across directories #11085

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jan 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Files.App/Helpers/AdaptiveLayoutHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public static bool PredictLayoutMode(FolderSettingsViewModel folderSettings, str
{
IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService<IUserSettingsService>();

if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences
if (!userSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories
&& folderSettings.IsAdaptiveLayoutEnabled
&& !folderSettings.IsLayoutModeFixed)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ public FoldersSettingsService(ISettingsSharingContext settingsSharingContext)
RegisterSettingsContext(settingsSharingContext);
}

public bool EnableOverridingFolderPreferences
public bool SyncFolderPreferencesAcrossDirectories
{
get => Get(true);
get => Get(false);
set => Set(value);
}

Expand Down Expand Up @@ -260,7 +260,7 @@ protected override void RaiseOnSettingChangedEvent(object sender, SettingChanged
{
switch (e.SettingName)
{
case nameof(EnableOverridingFolderPreferences):
case nameof(SyncFolderPreferencesAcrossDirectories):
case nameof(DefaultLayoutMode):
case nameof(TagColumnWidth):
case nameof(NameColumnWidth):
Expand Down
16 changes: 2 additions & 14 deletions src/Files.App/Strings/en-US/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -1215,14 +1215,8 @@
<data name="SettingsSearchUnindexedItems" xml:space="preserve">
<value>Include unindexed items in search results</value>
</data>
<data name="ResetFolderPreferencesOverrides" xml:space="preserve">
<value>Reset folder overrides</value>
</data>
<data name="EnableOverridingFolderPreferencesDescription" xml:space="preserve">
<value>Changing the layout in a directory when this setting is turned off will update the layout for all directories.</value>
</data>
<data name="EnableOverridingFolderPreferences" xml:space="preserve">
<value>Enable overriding folder preferences in individual directories</value>
<data name="SyncFolderPreferencesAcrossDirectories" xml:space="preserve">
<value>Sync layout and sorting preferences across directories</value>
</data>
<data name="SettingsContextMenu.Text" xml:space="preserve">
<value>Customize the right click context menu</value>
Expand Down Expand Up @@ -2697,12 +2691,6 @@
<data name="Reset" xml:space="preserve">
<value>Reset</value>
</data>
<data name="ResetLayoutPreferences" xml:space="preserve">
<value>This action will reset all directories back to your default preferences.</value>
</data>
<data name="AreYouSure" xml:space="preserve">
<value>Are you sure?</value>
</data>
<data name="Lockscreen" xml:space="preserve">
<value>Lockscreen</value>
</data>
Expand Down
6 changes: 3 additions & 3 deletions src/Files.App/ViewModels/FolderSettingsViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ public ColumnsViewModel ColumnsViewModel
private static LayoutPreferences GetLayoutPreferencesForPath(string folderPath)
{
IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService<IUserSettingsService>();
if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences)
if (!userSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories)
{
folderPath = folderPath.TrimPath();
var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath);
Expand All @@ -303,7 +303,7 @@ public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferen
{
IUserSettingsService userSettingsService = Ioc.Default.GetRequiredService<IUserSettingsService>();

if (userSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences)
if (!userSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories)
{
var folderFRN = NativeFileOperationsHelper.GetFolderFRN(folderPath);
WriteLayoutPreferencesToDb(folderPath.TrimPath(), folderFRN, prefs);
Expand Down Expand Up @@ -506,7 +506,7 @@ public void OnDefaultPreferencesChanged(string folderPath, string settingsName)
case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles):
SortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles;
break;
case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences):
case nameof(UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories):
LayoutPreference = prefs;
// TODO: update layout
break;
Expand Down
2 changes: 1 addition & 1 deletion src/Files.App/ViewModels/ItemViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -500,7 +500,7 @@ await dispatcherQueue.EnqueueAsync(() =>
case nameof(UserSettingsService.FoldersSettingsService.DefaultSortOption):
case nameof(UserSettingsService.FoldersSettingsService.DefaultGroupOption):
case nameof(UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles):
case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences):
case nameof(UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories):
await dispatcherQueue.EnqueueAsync(() =>
{
folderSettings.OnDefaultPreferencesChanged(WorkingDirectory, e.SettingName);
Expand Down
23 changes: 5 additions & 18 deletions src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,16 @@ public class FoldersViewModel : ObservableObject
private readonly int FileTagSortingIndex = 5;
private readonly int FileTagGroupingIndex = 6;

// Commands
public RelayCommand ResetLayoutPreferencesCommand { get; }
public RelayCommand ShowResetLayoutPreferencesTipCommand { get; }

public FoldersViewModel()
{
ResetLayoutPreferencesCommand = new RelayCommand(ResetLayoutPreferences);
ShowResetLayoutPreferencesTipCommand = new RelayCommand(() => IsResetLayoutPreferencesTipOpen = true);

SelectedDefaultLayoutModeIndex = (int)DefaultLayoutMode;
SelectedDefaultSortingIndex = UserSettingsService.FoldersSettingsService.DefaultSortOption == SortOption.FileTag ? FileTagSortingIndex : (int)UserSettingsService.FoldersSettingsService.DefaultSortOption;
SelectedDefaultGroupingIndex = UserSettingsService.FoldersSettingsService.DefaultGroupOption == GroupOption.FileTag ? FileTagGroupingIndex : (int)UserSettingsService.FoldersSettingsService.DefaultGroupOption;
}

// Properties

private bool isResetLayoutPreferencesTipOpen;
public bool IsResetLayoutPreferencesTipOpen
{
get => isResetLayoutPreferencesTipOpen;
set => SetProperty(ref isResetLayoutPreferencesTipOpen, value);
}

private int selectedDefaultLayoutModeIndex;
public int SelectedDefaultLayoutModeIndex
{
Expand All @@ -52,14 +39,15 @@ public int SelectedDefaultLayoutModeIndex
}
}

public bool EnableOverridingFolderPreferences
public bool SyncFolderPreferencesAcrossDirectories
{
get => UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences;
get => UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories;
set
{
if (value != UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences)
if (value != UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories)
{
UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences = value;
UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories = value;
ResetLayoutPreferences();
OnPropertyChanged();
}
}
Expand Down Expand Up @@ -373,7 +361,6 @@ public void ResetLayoutPreferences()
// Is this proper practice?
var dbInstance = FolderSettingsViewModel.GetDbInstance();
dbInstance.ResetAll();
IsResetLayoutPreferencesTipOpen = false;
}
}
}
4 changes: 2 additions & 2 deletions src/Files.App/ViewModels/ToolbarViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ public bool IsLayoutAdaptive
&& IsAdaptiveLayoutEnabled;

public bool IsAdaptiveLayoutEnabled
=> UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences;
=> UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories;

private bool isUpdating;
public bool IsUpdating
Expand Down Expand Up @@ -446,7 +446,7 @@ private void UserSettingsService_OnSettingChangedEvent(object? sender, SettingCh
RefreshWidgetsRequested?.Invoke(this, EventArgs.Empty);
OnPropertyChanged(e.SettingName);
break;
case nameof(UserSettingsService.FoldersSettingsService.EnableOverridingFolderPreferences):
case nameof(UserSettingsService.FoldersSettingsService.SyncFolderPreferencesAcrossDirectories):
FolderSettings_LayoutPreferencesUpdateRequired(null, 0);
break;
}
Expand Down
39 changes: 4 additions & 35 deletions src/Files.App/Views/SettingsPages/Folders.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,48 +42,17 @@

<!-- Folder Overrides -->
<local:SettingsBlockControl
Title="{helpers:ResourceString Name=EnableOverridingFolderPreferences}"
Title="{helpers:ResourceString Name=SyncFolderPreferencesAcrossDirectories}"
HorizontalAlignment="Stretch"
Description="{helpers:ResourceString Name=EnableOverridingFolderPreferencesDescription}"
IsExpanded="True">
<local:SettingsBlockControl.Icon>
<FontIcon Glyph="&#xE2AC;" />
</local:SettingsBlockControl.Icon>

<ToggleSwitch
AutomationProperties.Name="{helpers:ResourceString Name=EnableOverridingFolderPreferences}"
IsOn="{x:Bind ViewModel.EnableOverridingFolderPreferences, Mode=TwoWay}"
AutomationProperties.Name="{helpers:ResourceString Name=SyncFolderPreferencesAcrossDirectories}"
IsOn="{x:Bind ViewModel.SyncFolderPreferencesAcrossDirectories, Mode=TwoWay}"
Style="{StaticResource RightAlignedToggleSwitchStyle}" />
<local:SettingsBlockControl.ExpandableContent>
<StackPanel>
<!-- Reset folder overrides -->
<local:SettingsBlockControl
x:Name="ResetLayoutPreferencesButton"
Title="{helpers:ResourceString Name=ResetFolderPreferencesOverrides}"
ButtonCommand="{x:Bind ViewModel.ShowResetLayoutPreferencesTipCommand, Mode=OneWay}"
IsClickable="True">
<local:SettingsBlockControl.Icon>
<FontIcon
FontSize="14"
Foreground="{ThemeResource TextFillColorPrimaryBrush}"
Glyph="&#xE104;" />
</local:SettingsBlockControl.Icon>
<FontIcon
HorizontalAlignment="Right"
FontSize="14"
Foreground="{ThemeResource TextFillColorPrimaryBrush}"
Glyph="&#xE2B4;" />
</local:SettingsBlockControl>
<muxc:TeachingTip
Title="{helpers:ResourceString Name=AreYouSure}"
ActionButtonCommand="{x:Bind ViewModel.ResetLayoutPreferencesCommand, Mode=OneWay}"
ActionButtonContent="{helpers:ResourceString Name=Confirm}"
IsLightDismissEnabled="True"
IsOpen="{x:Bind ViewModel.IsResetLayoutPreferencesTipOpen, Mode=TwoWay}"
Subtitle="{helpers:ResourceString Name=ResetLayoutPreferences}"
Target="{x:Bind ResetLayoutPreferencesButton}" />
</StackPanel>
</local:SettingsBlockControl.ExpandableContent>
</local:SettingsBlockControl>

<!-- Details layout columns -->
Expand Down Expand Up @@ -332,7 +301,7 @@
IsOn="{x:Bind ViewModel.SelectFilesOnHover, Mode=TwoWay}"
Style="{StaticResource RightAlignedToggleSwitchStyle}" />
</local:SettingsBlockControl>

<!-- Double click to go up -->
<local:SettingsBlockControl Title="{helpers:ResourceString Name=DoubleClickBlankSpaceToGoUp}" HorizontalAlignment="Stretch">
<local:SettingsBlockControl.Icon>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Files.Shared.Enums;
using Files.Sdk.Storage;
using Files.Shared.Enums;
using System.ComponentModel;

namespace Files.Backend.Services.Settings
Expand Down Expand Up @@ -101,9 +102,9 @@ public interface IFoldersSettingsService : IBaseSettingsService, INotifyProperty
double OriginalPathColumnWidth { get; set; }

/// <summary>
/// Enable overriding folder preferencess in individual directories
/// Sync folder preferences across all directories
/// </summary>
bool EnableOverridingFolderPreferences { get; set; }
bool SyncFolderPreferencesAcrossDirectories { get; set; }

/// <summary>
/// Gets or sets a value indicating whether or not hidden items should be visible.
Expand Down