Skip to content
Open
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
9 changes: 9 additions & 0 deletions src/Files.App/Data/Contracts/IGeneralSettingsService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,15 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty
bool ShowFilterHeader { get; set; }

/// <summary>
/// Gets or sets a value indicating whether thumbnail cache should be enabled.
/// </summary>
bool EnableThumbnailCache { get; set; }

/// <summary>
/// Gets or sets the thumbnail cache size limit in MB.
/// </summary>
double ThumbnailCacheSizeLimit { get; set; }

/// Gets or sets a value indicating whether smooth scrolling is enabled.
/// </summary>
bool EnableSmoothScrolling { get; set; }
Expand Down
13 changes: 12 additions & 1 deletion src/Files.App/Services/Settings/GeneralSettingsService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -399,13 +399,24 @@ public bool ShowFilterHeader
set => Set(value);
}

/// <inheritdoc/>
public bool EnableThumbnailCache
{
get => Get(true);
set => Set(value);
}

public bool EnableSmoothScrolling
{
get => Get(true);
set => Set(value);
}

public double ThumbnailCacheSizeLimit
{
get => Get(512d);
set => Set(value);
}

protected override void RaiseOnSettingChangedEvent(object sender, SettingChangedEventArgs e)
{
base.RaiseOnSettingChangedEvent(sender, e);
Expand Down
18 changes: 18 additions & 0 deletions src/Files.App/Strings/en-US/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,24 @@
<data name="Advanced" xml:space="preserve">
<value>Advanced</value>
</data>
<data name="CacheThumbnails" xml:space="preserve">
<value>Cache thumbnails</value>
</data>
<data name="CacheSizeLimitDescription" xml:space="preserve">
<value>Maximum disk space to use for thumbnail cache (100-5000 MiB).</value>
</data>
<data name="CacheSizeLimit" xml:space="preserve">
<value>Cache size limit</value>
</data>
<data name="ClearCachedThumbnails" xml:space="preserve">
<value>Clear cached thumbnails to free up space</value>
</data>
<data name="CurrentCacheSize" xml:space="preserve">
<value>Current cache size: </value>
</data>
<data name="ClearCache" xml:space="preserve">
<value>Clear cache</value>
</data>
<data name="SettingsOnStartupContinueWhereYouLeftOff.Content" xml:space="preserve">
<value>Continue where you left off</value>
</data>
Expand Down
53 changes: 53 additions & 0 deletions src/Files.App/ViewModels/Settings/AdvancedViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public sealed partial class AdvancedViewModel : ObservableObject
public ICommand ExportSettingsCommand { get; }
public ICommand ImportSettingsCommand { get; }
public AsyncRelayCommand OpenFilesOnWindowsStartupCommand { get; }
public ICommand ClearThumbnailCacheCommand { get; }


public AdvancedViewModel()
Expand All @@ -40,8 +41,10 @@ public AdvancedViewModel()
ExportSettingsCommand = new AsyncRelayCommand(ExportSettingsAsync);
ImportSettingsCommand = new AsyncRelayCommand(ImportSettingsAsync);
OpenFilesOnWindowsStartupCommand = new AsyncRelayCommand(OpenFilesOnWindowsStartupAsync);
ClearThumbnailCacheCommand = new AsyncRelayCommand(ClearThumbnailCacheAsync);

_ = DetectOpenFilesAtStartupAsync();
_ = UpdateCacheSizeAsync();
}

private async Task SetAsDefaultExplorerAsync()
Expand Down Expand Up @@ -356,6 +359,56 @@ public bool ShowFlattenOptions
}
}

public bool EnableThumbnailCache
{
get => UserSettingsService.GeneralSettingsService.EnableThumbnailCache;
set
{
if (value != UserSettingsService.GeneralSettingsService.EnableThumbnailCache)
{
UserSettingsService.GeneralSettingsService.EnableThumbnailCache = value;
OnPropertyChanged();
}
}
}

public double ThumbnailCacheSizeLimit
{
get => UserSettingsService.GeneralSettingsService.ThumbnailCacheSizeLimit;
set
{
if (value != UserSettingsService.GeneralSettingsService.ThumbnailCacheSizeLimit)
{
UserSettingsService.GeneralSettingsService.ThumbnailCacheSizeLimit = value;
OnPropertyChanged();
}
}
}

private string cacheSizeText = string.Empty;
public string CacheSizeText
{
get => cacheSizeText;
set => SetProperty(ref cacheSizeText, value);
}

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

private async Task ClearThumbnailCacheAsync()
{
//TODO: Clear thumbnail cache.
}

private async Task UpdateCacheSizeAsync()
{
//TODO: Get thumbnail cache size and update CacheSizeText and IsClearCacheButtonEnabled accordingly.
}

public async Task OpenFilesOnWindowsStartupAsync()
{
var stateMode = await ReadState();
Expand Down
35 changes: 35 additions & 0 deletions src/Files.App/Views/Settings/AdvancedPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,41 @@
</ToggleSwitch>
</wctcontrols:SettingsCard>

<!-- Thumbnail Caching -->
<wctcontrols:SettingsExpander Header="{helpers:ResourceString Name=CacheThumbnails}" IsExpanded="False">
<wctcontrols:SettingsExpander.HeaderIcon>
<FontIcon Glyph="&#xEDA2;" />
</wctcontrols:SettingsExpander.HeaderIcon>
<ToggleSwitch AutomationProperties.Name="{helpers:ResourceString Name=CacheThumbnails}" IsOn="{x:Bind ViewModel.EnableThumbnailCache, Mode=TwoWay}" />
<wctcontrols:SettingsExpander.Items>

<!-- Cache Size Limit -->
<wctcontrols:SettingsCard Header="{helpers:ResourceString Name=CacheSizeLimit}" IsEnabled="{x:Bind ViewModel.EnableThumbnailCache, Mode=OneWay}">
<wctcontrols:SettingsCard.Description>
<TextBlock Text="{helpers:ResourceString Name=CacheSizeLimitDescription}" TextWrapping="WrapWholeWords" />
</wctcontrols:SettingsCard.Description>
<NumberBox
AutomationProperties.Name="{helpers:ResourceString Name=CacheSizeLimit}"
Maximum="5000"
Minimum="100"
SpinButtonPlacementMode="Inline"
Value="{x:Bind ViewModel.ThumbnailCacheSizeLimit, Mode=TwoWay}" />
</wctcontrols:SettingsCard>
<wctcontrols:SettingsCard Header="{helpers:ResourceString Name=ClearCachedThumbnails}" IsEnabled="{x:Bind ViewModel.EnableThumbnailCache, Mode=OneWay}">
<wctcontrols:SettingsCard.Description>
<TextBlock>
<Run Text="{helpers:ResourceString Name=CurrentCacheSize}" />
<Run FontWeight="SemiBold" Text="{x:Bind ViewModel.CacheSizeText, Mode=OneWay}" />
</TextBlock>
</wctcontrols:SettingsCard.Description>
<Button
Command="{x:Bind ViewModel.ClearThumbnailCacheCommand}"
Content="{helpers:ResourceString Name=ClearCache}"
IsEnabled="{x:Bind ViewModel.IsClearCacheButtonEnabled, Mode=OneWay}" />
</wctcontrols:SettingsCard>
</wctcontrols:SettingsExpander.Items>
</wctcontrols:SettingsExpander>

<!-- Flatten options -->
<wctcontrols:SettingsCard Description="{helpers:ResourceString Name=ShowFlattenOptionsDescription}" Header="{helpers:ResourceString Name=ShowFlattenOptions}">
<wctcontrols:SettingsCard.HeaderIcon>
Expand Down
Loading