Container size scan, improvements

This commit is contained in:
2023-08-03 00:00:45 +02:00
parent 1713973c3a
commit f4d361f767
57 changed files with 814 additions and 532 deletions

View File

@@ -1,4 +1,5 @@
using System.Reactive.Linq;
using DeclarativeProperty;
using FileTime.App.Core.ViewModels;
using FileTime.App.Core.ViewModels.ItemPreview;
using FileTime.Core.Models;
@@ -10,7 +11,7 @@ public class ItemPreviewService : IItemPreviewService
{
private readonly IServiceProvider _serviceProvider;
private readonly IEnumerable<IItemPreviewProvider> _itemPreviewProviders;
public IObservable<IItemPreviewViewModel?> ItemPreview { get; }
public IDeclarativeProperty<IItemPreviewViewModel?> ItemPreview { get; }
public ItemPreviewService(
IAppState appState,
@@ -21,18 +22,15 @@ public class ItemPreviewService : IItemPreviewService
_itemPreviewProviders = itemPreviewProviders;
ItemPreview = appState
.SelectedTab
.Select(t =>
t?.CurrentSelectedItem.Throttle(TimeSpan.FromMilliseconds(250))
?? Observable.Return<IItemViewModel?>(null))
.Map(t => t.CurrentSelectedItem)
.Switch()
.Select(item =>
.Debounce(TimeSpan.FromMilliseconds(250))
.Map(async (item, _) =>
item == null
? Observable.Return<IItemPreviewViewModel?>(null)
: Observable.FromAsync(async () => await Map(item))
? null
: await Map(item)
)
.Switch()
.Publish(null)
.RefCount();
.DistinctUntilChanged();
}
private async Task<IItemPreviewViewModel?> Map(IItemViewModel itemViewModel)

View File

@@ -112,6 +112,7 @@ public class TabPersistenceService : ITabPersistenceService
try
{
if (tab.Path == null) continue;
if (_contentProvidersNotToRestore.Any(p => tab.Path.StartsWith(p))) continue;
IContainer? container = null;
var path = FullName.CreateSafe(tab.Path);
@@ -186,7 +187,7 @@ public class TabPersistenceService : ITabPersistenceService
public void SaveStates(CancellationToken token = default)
{
var state = new PersistenceRoot(SerializeTabStates());
var settingsDirectory = new DirectoryInfo(string.Join(Path.DirectorySeparatorChar,
_settingsPath.Split(Path.DirectorySeparatorChar)[0..^1]));
if (!settingsDirectory.Exists) settingsDirectory.Create();

View File

@@ -332,7 +332,11 @@ public class NavigationUserCommandHandlerService : UserCommandHandlerServiceBase
}
else if (tabViewModel == null)
{
var tab = await _serviceProvider.GetAsyncInitableResolver<IContainer>(_currentLocation?.Value ?? _localContentProvider)
var newLocation = _currentLocation?.Value?.FullName is { } fullName
? (IContainer) await _timelessContentProvider.GetItemByFullNameAsync(fullName, PointInTime.Present)
: _localContentProvider;
var tab = await _serviceProvider.GetAsyncInitableResolver<IContainer>(newLocation)
.GetRequiredServiceAsync<ITab>();
var newTabViewModel = _serviceProvider.GetInitableResolver(tab, number).GetRequiredService<ITabViewModel>();

View File

@@ -66,7 +66,7 @@ public class ToolUserCommandHandlerService : UserCommandHandlerServiceBase
if (_currentLocation?.Value is null) return;
var searchTask = _containerScanSnapshotProvider.StartSizeScan(_currentLocation.Value);
var openContainerCommand = new OpenContainerCommand(new AbsolutePath(_timelessContentProvider, searchTask.SizeContainer));
var openContainerCommand = new OpenContainerCommand(new AbsolutePath(_timelessContentProvider, searchTask.SizeSizeScanContainer));
await _userCommandHandlerService.HandleCommandAsync(openContainerCommand);
}