Refresh command

This commit is contained in:
2022-05-24 10:55:49 +02:00
parent b2db3675e8
commit 1adf5386b8
6 changed files with 38 additions and 5 deletions

View File

@@ -0,0 +1,13 @@
namespace FileTime.App.Core.UserCommand;
public sealed class RefreshCommand : IIdentifiableUserCommand
{
public const string CommandName = "refresh";
public static RefreshCommand Instance { get; } = new RefreshCommand();
private RefreshCommand()
{
}
public string UserCommandID => CommandName;
}

View File

@@ -54,10 +54,21 @@ public class NavigationUserCommandHandlerService : UserCommandHandlerServiceBase
new TypeUserCommandHandler<MoveCursorUpCommand>(MoveCursorUp), new TypeUserCommandHandler<MoveCursorUpCommand>(MoveCursorUp),
new TypeUserCommandHandler<OpenContainerCommand>(OpenContainer), new TypeUserCommandHandler<OpenContainerCommand>(OpenContainer),
new TypeUserCommandHandler<OpenSelectedCommand>(OpenSelected), new TypeUserCommandHandler<OpenSelectedCommand>(OpenSelected),
new TypeUserCommandHandler<RefreshCommand>(Refresh),
new TypeUserCommandHandler<SwitchToTabCommand>(SwitchToTab), new TypeUserCommandHandler<SwitchToTabCommand>(SwitchToTab),
}); });
} }
private async Task Refresh(RefreshCommand command)
{
if (_currentLocation?.FullName is null) return;
var refreshedItem = await _timelessContentProvider.GetItemByFullNameAsync(_currentLocation.FullName, PointInTime.Present);
if (refreshedItem is not IContainer refreshedContainer) return;
_selectedTab?.Tab?.ForceSetCurrentLocation(refreshedContainer);
}
private async Task OpenContainer(OpenContainerCommand command) private async Task OpenContainer(OpenContainerCommand command)
{ {
var resolvedPath = await command.Path.ResolveAsync(); var resolvedPath = await command.Path.ResolveAsync();

View File

@@ -24,6 +24,8 @@ public class DefaultIdentifiableCommandHandlerRegister : IStartupHandler
AddUserCommand(PasteCommand.Merge); AddUserCommand(PasteCommand.Merge);
AddUserCommand(PasteCommand.Overwrite); AddUserCommand(PasteCommand.Overwrite);
AddUserCommand(PasteCommand.Skip); AddUserCommand(PasteCommand.Skip);
AddUserCommand(RefreshCommand.Instance);
AddUserCommand(SwitchToTabCommand.SwitchToLastTab);
AddUserCommand(SwitchToTabCommand.SwitchToTab1); AddUserCommand(SwitchToTabCommand.SwitchToTab1);
AddUserCommand(SwitchToTabCommand.SwitchToTab2); AddUserCommand(SwitchToTabCommand.SwitchToTab2);
AddUserCommand(SwitchToTabCommand.SwitchToTab3); AddUserCommand(SwitchToTabCommand.SwitchToTab3);
@@ -32,7 +34,6 @@ public class DefaultIdentifiableCommandHandlerRegister : IStartupHandler
AddUserCommand(SwitchToTabCommand.SwitchToTab6); AddUserCommand(SwitchToTabCommand.SwitchToTab6);
AddUserCommand(SwitchToTabCommand.SwitchToTab7); AddUserCommand(SwitchToTabCommand.SwitchToTab7);
AddUserCommand(SwitchToTabCommand.SwitchToTab8); AddUserCommand(SwitchToTabCommand.SwitchToTab8);
AddUserCommand(SwitchToTabCommand.SwitchToLastTab);
} }
private void AddUserCommand(IIdentifiableUserCommand command) private void AddUserCommand(IIdentifiableUserCommand command)

View File

@@ -15,4 +15,5 @@ public interface ITab : IInitable<IContainer>, IDisposable
void RemoveItemFilter(ItemFilter filter); void RemoveItemFilter(ItemFilter filter);
void RemoveItemFilter(string name); void RemoveItemFilter(string name);
void SetSelectedItem(AbsolutePath newSelectedItem); void SetSelectedItem(AbsolutePath newSelectedItem);
void ForceSetCurrentLocation(IContainer newLocation);
} }

View File

@@ -11,6 +11,7 @@ public class Tab : ITab
{ {
private readonly ITimelessContentProvider _timelessContentProvider; private readonly ITimelessContentProvider _timelessContentProvider;
private readonly BehaviorSubject<IContainer?> _currentLocation = new(null); private readonly BehaviorSubject<IContainer?> _currentLocation = new(null);
private readonly BehaviorSubject<IContainer?> _currentLocationForced = new(null);
private readonly BehaviorSubject<AbsolutePath?> _currentSelectedItem = new(null); private readonly BehaviorSubject<AbsolutePath?> _currentSelectedItem = new(null);
private readonly SourceList<ItemFilter> _itemFilters = new(); private readonly SourceList<ItemFilter> _itemFilters = new();
private AbsolutePath? _currentSelectedItemCached; private AbsolutePath? _currentSelectedItemCached;
@@ -24,10 +25,15 @@ public class Tab : ITab
{ {
_timelessContentProvider = timelessContentProvider; _timelessContentProvider = timelessContentProvider;
_currentPointInTime = null!; _currentPointInTime = null!;
_timelessContentProvider.CurrentPointInTime.Subscribe(p => _currentPointInTime = p); _timelessContentProvider.CurrentPointInTime.Subscribe(p => _currentPointInTime = p);
CurrentLocation = _currentLocation.DistinctUntilChanged().Publish(null).RefCount(); CurrentLocation = _currentLocation
.DistinctUntilChanged()
.Merge(_currentLocationForced)
.Publish(null)
.RefCount();
CurrentItems = CurrentItems =
Observable.Merge( Observable.Merge(
Observable.CombineLatest( Observable.CombineLatest(
@@ -88,6 +94,7 @@ public class Tab : ITab
} }
public void SetCurrentLocation(IContainer newLocation) => _currentLocation.OnNext(newLocation); public void SetCurrentLocation(IContainer newLocation) => _currentLocation.OnNext(newLocation);
public void ForceSetCurrentLocation(IContainer newLocation) => _currentLocationForced.OnNext(newLocation);
public void SetSelectedItem(AbsolutePath newSelectedItem) => _currentSelectedItem.OnNext(newSelectedItem); public void SetSelectedItem(AbsolutePath newSelectedItem) => _currentSelectedItem.OnNext(newSelectedItem);

View File

@@ -73,7 +73,7 @@ public static class MainConfiguration
//new CommandBindingConfiguration(ConfigCommand.PinFavorite, new[] { Key.F, Key.P }), //new CommandBindingConfiguration(ConfigCommand.PinFavorite, new[] { Key.F, Key.P }),
//new CommandBindingConfiguration(ConfigCommand.PreviousTimelineBlock, Key.H ), //new CommandBindingConfiguration(ConfigCommand.PreviousTimelineBlock, Key.H ),
//new CommandBindingConfiguration(ConfigCommand.PreviousTimelineCommand, Key.K ), //new CommandBindingConfiguration(ConfigCommand.PreviousTimelineCommand, Key.K ),
//new CommandBindingConfiguration(ConfigCommand.Refresh, Key.R), new CommandBindingConfiguration(RefreshCommand.CommandName, Key.R),
//new CommandBindingConfiguration(ConfigCommand.Rename, Key.F2), //new CommandBindingConfiguration(ConfigCommand.Rename, Key.F2),
//new CommandBindingConfiguration(ConfigCommand.Rename, new[] { Key.C, Key.W }), //new CommandBindingConfiguration(ConfigCommand.Rename, new[] { Key.C, Key.W }),
//new CommandBindingConfiguration(ConfigCommand.RunCommand, new KeyConfig(Key.D4, shift: true)), //new CommandBindingConfiguration(ConfigCommand.RunCommand, new KeyConfig(Key.D4, shift: true)),