Refactor MarkedItems to DeclarativeProperty

This commit is contained in:
2023-08-02 09:59:53 +02:00
parent c2fbc32159
commit 5508828717
7 changed files with 24 additions and 25 deletions

View File

@@ -1,17 +1,16 @@
using System.Collections.ObjectModel;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using System.Text.RegularExpressions;
using DeclarativeProperty;
using DynamicData;
using FileTime.App.Core.Interactions;
using FileTime.App.Core.Models;
using FileTime.App.Core.Models.Enums;
using FileTime.App.Core.UserCommand;
using FileTime.App.Core.ViewModels;
using FileTime.Core.Command;
using FileTime.Core.Command.CreateContainer;
using FileTime.Core.Command.Move;
using FileTime.Core.Extensions;
using FileTime.Core.Interactions;
using FileTime.Core.Models;
using FileTime.Core.Timeline;
@@ -34,7 +33,7 @@ public class ItemManipulationUserCommandHandlerService : UserCommandHandlerServi
private readonly ICommandScheduler _commandScheduler;
private readonly IServiceProvider _serviceProvider;
private readonly ISystemClipboardService _systemClipboardService;
private readonly BindedCollection<FullName>? _markedItems;
private readonly IDeclarativeProperty<ObservableCollection<FullName>> _markedItems;
private IDeclarativeProperty<IContainer?>? _currentLocation;
public ItemManipulationUserCommandHandlerService(
@@ -61,7 +60,7 @@ public class ItemManipulationUserCommandHandlerService : UserCommandHandlerServi
SaveCurrentLocation(l => _currentLocation = l);
SaveCurrentSelectedItem(i => _currentSelectedItem = i);
_markedItems = appState.SelectedTab.Select(t => t?.MarkedItems).ToBindedCollection();
_markedItems = appState.SelectedTab.Map(t => t?.MarkedItems).Switch();
AddCommandHandlers(new IUserCommandHandler[]
{
@@ -80,9 +79,9 @@ public class ItemManipulationUserCommandHandlerService : UserCommandHandlerServi
private async Task CopyFilesToClipboardAsync()
{
var list = new List<FullName>();
if ((_markedItems?.Collection?.Count ?? 0) > 0)
if ((_markedItems.Value?.Count ?? 0) > 0)
{
list.AddRange(_markedItems!.Collection!);
list.AddRange(_markedItems.Value!);
}
else if(_currentSelectedItem?.Value?.BaseItem?.FullName is { } selectedItemName)
{
@@ -128,9 +127,9 @@ public class ItemManipulationUserCommandHandlerService : UserCommandHandlerServi
_clipboardService.Clear();
_clipboardService.SetCommand<FileTime.Core.Command.Copy.CopyCommandFactory>();
if ((_markedItems?.Collection?.Count ?? 0) > 0)
if ((_markedItems.Value?.Count ?? 0) > 0)
{
foreach (var item in _markedItems!.Collection!)
foreach (var item in _markedItems.Value!)
{
_clipboardService.AddContent(item);
}
@@ -214,12 +213,12 @@ public class ItemManipulationUserCommandHandlerService : UserCommandHandlerServi
private async Task RenameAsync(RenameCommand command)
{
List<ItemToMove> itemsToMove = new();
if ((_markedItems?.Collection?.Count ?? 0) > 0)
if ((_markedItems.Value?.Count ?? 0) > 0)
{
BehaviorSubject<string> templateRegexValue = new(string.Empty);
BehaviorSubject<string> newNameSchemaValue = new(string.Empty);
var itemsToRename = new List<FullName>(_markedItems!.Collection!);
var itemsToRename = new List<FullName>(_markedItems.Value!);
var itemPreviews = itemsToRename
.Select(item =>
@@ -406,9 +405,9 @@ public class ItemManipulationUserCommandHandlerService : UserCommandHandlerServi
IList<FullName>? itemsToDelete = null;
var shouldDelete = false;
string? questionText = null;
if ((_markedItems?.Collection?.Count ?? 0) > 0)
if ((_markedItems.Value?.Count ?? 0) > 0)
{
itemsToDelete = new List<FullName>(_markedItems!.Collection!);
itemsToDelete = new List<FullName>(_markedItems.Value!);
}
else if (_currentSelectedItem?.Value?.BaseItem?.FullName is not null)
{

View File

@@ -54,9 +54,6 @@ public abstract class UserCommandHandlerServiceBase : IUserCommandHandler
protected IDisposable SaveCurrentItems(Action<IDeclarativeProperty<ObservableCollection<IItemViewModel>?>?> handler)
=> RunWithAppState(appState => appState.SelectedTab.Select(t => t?.CurrentItems).Subscribe(handler));
protected IDisposable SaveMarkedItems(Action<IChangeSet<FullName>> handler)
=> RunWithAppState(appState => appState.SelectedTab.Select(t => t == null ? Observable.Empty<IChangeSet<FullName>>() : t.MarkedItems).Switch().Subscribe(handler));
protected IDisposable SaveCurrentPointInTime(Action<PointInTime> handler)
=> RunWithTimelessContentProvider(timelessContentProvider => timelessContentProvider.CurrentPointInTime.Subscribe(handler));

View File

@@ -25,7 +25,7 @@ public abstract partial class ItemViewModel : IItemViewModel
[Property] private IDeclarativeProperty<bool> _isSelected;
[Property] private IObservable<bool>? _isMarked;
[Property] private IDeclarativeProperty<bool>? _isMarked;
[Property] private IObservable<ItemViewMode> _viewMode;
@@ -68,8 +68,8 @@ public abstract partial class ItemViewModel : IItemViewModel
DisplayNameText = item.DisplayName;
IsMarked = itemViewModelType is ItemViewModelType.Main
? parentTab.MarkedItems.ToCollection().Select(m => m.Any(i => i.Path == item.FullName?.Path))
: Observable.Return(false);
? parentTab.MarkedItems.Map(m => m.Any(i => i.Path == item.FullName?.Path))
: new DeclarativeProperty<bool>(false);
IsSelected = itemViewModelType is ItemViewModelType.Main
? parentTab.CurrentSelectedItem.Map(EqualsTo)

View File

@@ -29,7 +29,7 @@ public partial class TabViewModel : ITabViewModel
private readonly IAppState _appState;
private readonly ITimelessContentProvider _timelessContentProvider;
private readonly IRefreshSmoothnessCalculator _refreshSmoothnessCalculator;
private readonly SourceList<FullName> _markedItems = new();
private readonly ObservableCollection<FullName> _markedItems = new();
private readonly List<IDisposable> _disposables = new();
private bool _disposed;
private OcConsumer? _currentItemsConsumer;
@@ -45,7 +45,7 @@ public partial class TabViewModel : ITabViewModel
public IDeclarativeProperty<IItemViewModel?> CurrentSelectedItem { get; private set; }
public IDeclarativeProperty<IContainerViewModel?> CurrentSelectedItemAsContainer { get; private set; }
public IDeclarativeProperty<ObservableCollection<IItemViewModel>?> CurrentItems { get; private set; }
public IObservable<IChangeSet<FullName>> MarkedItems { get; }
public IDeclarativeProperty<ObservableCollection<FullName>> MarkedItems { get; }
public IDeclarativeProperty<ObservableCollection<IItemViewModel>?> SelectedsChildren { get; private set; }
public IDeclarativeProperty<ObservableCollection<IItemViewModel>?> ParentsChildren { get; private set; }
public DeclarativeProperty<ItemOrdering?> Ordering { get; } = new(ItemOrdering.Name);
@@ -60,7 +60,7 @@ public partial class TabViewModel : ITabViewModel
_serviceProvider = serviceProvider;
_appState = appState;
MarkedItems = _markedItems.Connect().StartWithEmpty();
MarkedItems = _markedItems.Watch();
IsSelected = _appState.SelectedTab.Select(s => s == this);
_timelessContentProvider = timelessContentProvider;
_refreshSmoothnessCalculator = refreshSmoothnessCalculator;
@@ -240,14 +240,14 @@ public partial class TabViewModel : ITabViewModel
public void RemoveMarkedItem(FullName fullName)
{
var itemsToRemove = _markedItems.Items.Where(i => i.Path == fullName.Path).ToList();
var itemsToRemove = _markedItems.Where(i => i.Path == fullName.Path).ToList();
_markedItems.RemoveMany(itemsToRemove);
}
public void ToggleMarkedItem(FullName fullName)
{
if (_markedItems.Items.Any(i => i.Path == fullName.Path))
if (_markedItems.Any(i => i.Path == fullName.Path))
{
RemoveMarkedItem(fullName);
}