From 286c6d467af6c83e1fb262eb916c12602c42e86b Mon Sep 17 00:00:00 2001 From: Saravanan Ganapathi Date: Tue, 17 Feb 2026 23:46:08 +0530 Subject: [PATCH 1/3] Feature: Added thumbnail cache settings --- .../Data/Contracts/IGeneralSettingsService.cs | 9 ++++ .../Settings/GeneralSettingsService.cs | 13 ++++- src/Files.App/Strings/en-US/Resources.resw | 18 +++++++ .../ViewModels/Settings/AdvancedViewModel.cs | 53 +++++++++++++++++++ .../Views/Settings/AdvancedPage.xaml | 36 +++++++++++++ 5 files changed, 128 insertions(+), 1 deletion(-) diff --git a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs index 270924ee2fbf..a379ac22de33 100644 --- a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs +++ b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs @@ -326,6 +326,15 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty bool ShowFilterHeader { get; set; } /// + /// Gets or sets a value indicating whether thumbnail cache should be enabled. + /// + bool EnableThumbnailCache { get; set; } + + /// + /// Gets or sets the thumbnail cache size limit in MB. + /// + double ThumbnailCacheSizeLimit { get; set; } + /// Gets or sets a value indicating whether smooth scrolling is enabled. /// bool EnableSmoothScrolling { get; set; } diff --git a/src/Files.App/Services/Settings/GeneralSettingsService.cs b/src/Files.App/Services/Settings/GeneralSettingsService.cs index 63e68e7b98a0..4e527516445f 100644 --- a/src/Files.App/Services/Settings/GeneralSettingsService.cs +++ b/src/Files.App/Services/Settings/GeneralSettingsService.cs @@ -399,13 +399,24 @@ public bool ShowFilterHeader set => Set(value); } - /// + 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); diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 0f0330f5c51f..8aba54d7dd37 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -228,6 +228,24 @@ Advanced + + Cache thumbnails + + + Maximum disk space to use for thumbnail cache (100-5000 MiB). + + + Cache size limit + + + Clear cached thumbnails to free up space + + + Current cache size: + + + Clear cache + Continue where you left off diff --git a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs index 805035588f1a..2d99417dc759 100644 --- a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs @@ -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() @@ -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() @@ -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(); diff --git a/src/Files.App/Views/Settings/AdvancedPage.xaml b/src/Files.App/Views/Settings/AdvancedPage.xaml index 4a001c502182..c798c1a7d576 100644 --- a/src/Files.App/Views/Settings/AdvancedPage.xaml +++ b/src/Files.App/Views/Settings/AdvancedPage.xaml @@ -161,6 +161,41 @@ + + + + + + + + + + + + + + + + + + + + + + +