/
githubmirror
/
Files
Обзор
Документация
Войти
/
githubmirror
/
Files
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Files.App/Services/SizeProvider/UserSizeProvider.cs
60 строк
2 KB
yair100
Feature: Added option to calculate folder size on demand (#18569)
10 июн 2026, 18:16
Не верифицирован
10 июн 2026, 18:16
b37001e
Код
Авторство
О чём код?
// Copyright (c) Files Community // Licensed under the MIT License. using Files.App.Services.SizeProvider; namespace Files.App.Services { public sealed partial class UserSizeProvider : ISizeProvider { private readonly IFoldersSettingsService folderPreferences = Ioc.Default.GetRequiredService<IFoldersSettingsService>(); private ISizeProvider provider; public event EventHandler<SizeChangedEventArgs> SizeChanged; public UserSizeProvider() { provider = GetProvider(); provider.SizeChanged += Provider_SizeChanged; folderPreferences.PropertyChanged += FolderPreferences_PropertyChanged; } public Task CleanAsync() => provider.CleanAsync(); public async Task ClearAsync() => await provider.ClearAsync(); public Task UpdateAsync(string path, CancellationToken cancellationToken) => provider.UpdateAsync(path, cancellationToken); public bool TryGetSize(string path, out ulong size) => provider.TryGetSize(path, out size); public void Dispose() { provider.Dispose(); folderPreferences.PropertyChanged -= FolderPreferences_PropertyChanged; } private ISizeProvider GetProvider() => new DrivesSizeProvider(); private async void FolderPreferences_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName is nameof(IFoldersSettingsService.CalculateFolderSizes)) { await provider.ClearAsync(); provider.SizeChanged -= Provider_SizeChanged; provider = GetProvider(); provider.SizeChanged += Provider_SizeChanged; } } private void Provider_SizeChanged(object sender, SizeChangedEventArgs e) => SizeChanged?.Invoke(this, e); } }