Loading fix, CopyPath, Open in explorer

This commit is contained in:
2022-05-25 14:05:14 +02:00
parent 06f79ddfa9
commit 96158160bd
12 changed files with 96 additions and 8 deletions

View File

@@ -0,0 +1,6 @@
namespace FileTime.App.Core.Services;
public interface ISystemClipboardService
{
Task CopyToClipboardAsync(string text);
}

View File

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

View File

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

View File

@@ -1,4 +1,3 @@
using System.Reactive.Linq;
using System.Text.Json; using System.Text.Json;
using FileTime.App.Core.Models; using FileTime.App.Core.Models;
using FileTime.App.Core.ViewModels; using FileTime.App.Core.ViewModels;

View File

@@ -7,7 +7,6 @@ using FileTime.Core.Services;
using FileTime.Core.Timeline; using FileTime.Core.Timeline;
using FileTime.Providers.Local; using FileTime.Providers.Local;
using InitableService; using InitableService;
using Microsoft.Extensions.DependencyInjection;
namespace FileTime.App.Core.Services.UserCommandHandler; namespace FileTime.App.Core.Services.UserCommandHandler;

View File

@@ -0,0 +1,39 @@
using System.Diagnostics;
using FileTime.App.Core.UserCommand;
using FileTime.App.Core.ViewModels;
using FileTime.Core.Models;
namespace FileTime.App.Core.Services.UserCommandHandler;
public class ToolUserCommandHandlerService : UserCommandHandlerServiceBase
{
private readonly ISystemClipboardService _systemClipboardService;
private IContainer? _currentLocation;
private IItemViewModel? _currentSelectedItem;
public ToolUserCommandHandlerService(IAppState appState, ISystemClipboardService systemClipboardService) : base(appState)
{
_systemClipboardService = systemClipboardService;
SaveCurrentLocation(l => _currentLocation = l);
SaveCurrentSelectedItem(i => _currentSelectedItem = i);
AddCommandHandlers(new IUserCommandHandler[]
{
new TypeUserCommandHandler<OpenInDefaultFileExplorerCommand>(OpenInDefaultFileExplorer),
new TypeUserCommandHandler<CopyNativePathCommand>(CopyNativePath),
});
}
private async Task CopyNativePath()
{
if (_currentSelectedItem?.BaseItem?.NativePath is null) return;
await _systemClipboardService.CopyToClipboardAsync(_currentSelectedItem.BaseItem.NativePath.Path);
}
private Task OpenInDefaultFileExplorer()
{
if (_currentLocation?.NativePath is null) return Task.CompletedTask;
Process.Start("explorer.exe", "\"" + _currentLocation.NativePath.Path + "\"");
return Task.CompletedTask;
}
}

View File

@@ -33,6 +33,7 @@ public static class Startup
{ {
return serviceCollection return serviceCollection
.AddSingleton<IUserCommandHandler, NavigationUserCommandHandlerService>() .AddSingleton<IUserCommandHandler, NavigationUserCommandHandlerService>()
.AddSingleton<IUserCommandHandler, ItemManipulationUserCommandHandlerService>(); .AddSingleton<IUserCommandHandler, ItemManipulationUserCommandHandlerService>()
.AddSingleton<IUserCommandHandler, ToolUserCommandHandlerService>();
} }
} }

View File

@@ -13,6 +13,7 @@ public class DefaultIdentifiableCommandHandlerRegister : IStartupHandler
AddUserCommand(CloseTabCommand.Instance); AddUserCommand(CloseTabCommand.Instance);
AddUserCommand(CopyCommand.Instance); AddUserCommand(CopyCommand.Instance);
AddUserCommand(CopyNativePathCommand.Instance);
AddUserCommand(CreateContainer.Instance); AddUserCommand(CreateContainer.Instance);
AddUserCommand(CreateElement.Instance); AddUserCommand(CreateElement.Instance);
AddUserCommand(EnterRapidTravelCommand.Instance); AddUserCommand(EnterRapidTravelCommand.Instance);
@@ -28,6 +29,7 @@ public class DefaultIdentifiableCommandHandlerRegister : IStartupHandler
AddUserCommand(MoveCursorToLastCommand.Instance); AddUserCommand(MoveCursorToLastCommand.Instance);
AddUserCommand(MoveCursorUpCommand.Instance); AddUserCommand(MoveCursorUpCommand.Instance);
AddUserCommand(MoveCursorUpPageCommand.Instance); AddUserCommand(MoveCursorUpPageCommand.Instance);
AddUserCommand(OpenInDefaultFileExplorerCommand.Instance);
AddUserCommand(OpenSelectedCommand.Instance); AddUserCommand(OpenSelectedCommand.Instance);
AddUserCommand(PasteCommand.Merge); AddUserCommand(PasteCommand.Merge);
AddUserCommand(PasteCommand.Overwrite); AddUserCommand(PasteCommand.Overwrite);

View File

@@ -49,7 +49,7 @@ public static class MainConfiguration
//new CommandBindingConfiguration(ConfigCommand.Compress, new[] { Key.Y, Key.C }), //new CommandBindingConfiguration(ConfigCommand.Compress, new[] { Key.Y, Key.C }),
new CommandBindingConfiguration(CopyCommand.CommandName, new[] { Key.Y, Key.Y }), new CommandBindingConfiguration(CopyCommand.CommandName, new[] { Key.Y, Key.Y }),
//new CommandBindingConfiguration(ConfigCommand.CopyHash, new[] { Key.C, Key.H }), //new CommandBindingConfiguration(ConfigCommand.CopyHash, new[] { Key.C, Key.H }),
//new CommandBindingConfiguration(ConfigCommand.CopyPath, new[] { Key.C, Key.P }), new CommandBindingConfiguration(CopyNativePathCommand.CommandName, new[] { Key.C, Key.P }),
new CommandBindingConfiguration(CreateContainer.CommandName, Key.F7), new CommandBindingConfiguration(CreateContainer.CommandName, Key.F7),
new CommandBindingConfiguration(CreateContainer.CommandName, new[] { Key.C, Key.C }), new CommandBindingConfiguration(CreateContainer.CommandName, new[] { Key.C, Key.C }),
new CommandBindingConfiguration(CreateElement.CommandName, new[] { Key.C, Key.E }), new CommandBindingConfiguration(CreateElement.CommandName, new[] { Key.C, Key.E }),
@@ -69,7 +69,7 @@ public static class MainConfiguration
new CommandBindingConfiguration(MoveCursorToFirstCommand.CommandName, new[] { Key.G, Key.G }), new CommandBindingConfiguration(MoveCursorToFirstCommand.CommandName, new[] { Key.G, Key.G }),
//new CommandBindingConfiguration(ConfigCommand.NextTimelineBlock, Key.L ), //new CommandBindingConfiguration(ConfigCommand.NextTimelineBlock, Key.L ),
//new CommandBindingConfiguration(ConfigCommand.NextTimelineCommand, Key.J ), //new CommandBindingConfiguration(ConfigCommand.NextTimelineCommand, Key.J ),
//new CommandBindingConfiguration(ConfigCommand.OpenInFileBrowser, new[] { Key.O, Key.E }), new CommandBindingConfiguration(OpenInDefaultFileExplorerCommand.CommandName, new[] { Key.O, Key.E }),
new CommandBindingConfiguration(PasteCommand.PasteMergeCommandName, new[] { Key.P, Key.P }), new CommandBindingConfiguration(PasteCommand.PasteMergeCommandName, new[] { Key.P, Key.P }),
new CommandBindingConfiguration(PasteCommand.PasteOverwriteCommandName, new[] { Key.P, Key.O }), new CommandBindingConfiguration(PasteCommand.PasteOverwriteCommandName, new[] { Key.P, Key.O }),
new CommandBindingConfiguration(PasteCommand.PasteSkipCommandName, new[] { Key.P, Key.S }), new CommandBindingConfiguration(PasteCommand.PasteSkipCommandName, new[] { Key.P, Key.S }),

View File

@@ -39,6 +39,7 @@ public static class Startup
serviceCollection.TryAddSingleton<IIconProvider, MaterialIconProvider>(); serviceCollection.TryAddSingleton<IIconProvider, MaterialIconProvider>();
serviceCollection.TryAddSingleton<IModalService, ModalService>(); serviceCollection.TryAddSingleton<IModalService, ModalService>();
serviceCollection.TryAddSingleton<IDialogService, DialogService>(); serviceCollection.TryAddSingleton<IDialogService, DialogService>();
serviceCollection.TryAddSingleton<ISystemClipboardService, SystemClipboardService>();
serviceCollection.TryAddSingleton<IInputInterface>(s => s.GetRequiredService<IDialogService>()); serviceCollection.TryAddSingleton<IInputInterface>(s => s.GetRequiredService<IDialogService>());
return serviceCollection return serviceCollection

View File

@@ -0,0 +1,14 @@
using FileTime.App.Core.Services;
namespace FileTime.GuiApp.Services;
public class SystemClipboardService : ISystemClipboardService
{
public async Task CopyToClipboardAsync(string text)
{
if (global::Avalonia.Application.Current?.Clipboard is { } clipboard)
{
await clipboard.SetTextAsync(text);
}
}
}

View File

@@ -28,11 +28,12 @@
<Grid Background="{DynamicResource AppBackgroundBrush}"> <Grid Background="{DynamicResource AppBackgroundBrush}">
<Grid <Grid
x:DataType="vm:MainWindowViewModel"> x:DataType="vm:MainWindowViewModel"
IsVisible="{Binding Loading, Converter={x:Static BoolConverters.Not}, FallbackValue=False}">
<Grid <Grid
ColumnDefinitions="250,*" ColumnDefinitions="250,*"
RowDefinitions="Auto,*" RowDefinitions="Auto,*">
IsVisible="{Binding Loading, Converter={x:Static BoolConverters.Not}}">
<Grid PointerPressed="HeaderPointerPressed"> <Grid PointerPressed="HeaderPointerPressed">
<Rectangle Fill="#01000000" /> <Rectangle Fill="#01000000" />