Editor command
This commit is contained in:
@@ -9,6 +9,7 @@ using FileTime.Core.Enums;
|
||||
using FileTime.Core.Interactions;
|
||||
using FileTime.Core.Models;
|
||||
using FileTime.Core.Timeline;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace FileTime.App.Core.Services.UserCommandHandler;
|
||||
|
||||
@@ -22,6 +23,8 @@ public class ToolUserCommandHandlerService : UserCommandHandlerServiceBase
|
||||
private readonly IUserCommandHandlerService _userCommandHandlerService;
|
||||
private readonly IContentAccessorFactory _contentAccessorFactory;
|
||||
private readonly IContainerSizeScanProvider _containerSizeScanProvider;
|
||||
private readonly IProgramsService _programsService;
|
||||
private readonly ILogger<ToolUserCommandHandlerService> _logger;
|
||||
private IDeclarativeProperty<IContainer?>? _currentLocation;
|
||||
private IDeclarativeProperty<IItemViewModel?>? _currentSelectedItem;
|
||||
private ITabViewModel? _currentSelectedTab;
|
||||
@@ -35,7 +38,9 @@ public class ToolUserCommandHandlerService : UserCommandHandlerServiceBase
|
||||
ITimelessContentProvider timelessContentProvider,
|
||||
IUserCommandHandlerService userCommandHandlerService,
|
||||
IContentAccessorFactory contentAccessorFactory,
|
||||
IContainerSizeScanProvider containerSizeScanProvider) : base(appState)
|
||||
IContainerSizeScanProvider containerSizeScanProvider,
|
||||
IProgramsService programsService,
|
||||
ILogger<ToolUserCommandHandlerService> logger) : base(appState)
|
||||
{
|
||||
_systemClipboardService = systemClipboardService;
|
||||
_userCommunicationService = userCommunicationService;
|
||||
@@ -45,6 +50,8 @@ public class ToolUserCommandHandlerService : UserCommandHandlerServiceBase
|
||||
_userCommandHandlerService = userCommandHandlerService;
|
||||
_contentAccessorFactory = contentAccessorFactory;
|
||||
_containerSizeScanProvider = containerSizeScanProvider;
|
||||
_programsService = programsService;
|
||||
_logger = logger;
|
||||
SaveCurrentLocation(l => _currentLocation = l);
|
||||
SaveCurrentSelectedItem(i => _currentSelectedItem = i);
|
||||
SaveSelectedTab(t => _currentSelectedTab = t);
|
||||
@@ -54,16 +61,68 @@ public class ToolUserCommandHandlerService : UserCommandHandlerServiceBase
|
||||
new TypeUserCommandHandler<OpenInDefaultFileExplorerCommand>(OpenInDefaultFileExplorer),
|
||||
new TypeUserCommandHandler<CopyNativePathCommand>(CopyNativePath),
|
||||
new TypeUserCommandHandler<CopyBase64Command>(CopyBase64),
|
||||
new TypeUserCommandHandler<EditCommand>(Edit),
|
||||
new TypeUserCommandHandler<SearchCommand>(Search),
|
||||
new TypeUserCommandHandler<ScanSizeCommand>(ScanSize),
|
||||
new TypeUserCommandHandler<SortItemsCommand>(SortItems),
|
||||
});
|
||||
}
|
||||
|
||||
private Task Edit()
|
||||
{
|
||||
if ( _currentSelectedTab?.CurrentSelectedItem.Value?.BaseItem is not IElement {NativePath: { } filePath})
|
||||
return Task.CompletedTask;
|
||||
|
||||
var getNext = false;
|
||||
while (true)
|
||||
{
|
||||
string? execPath = null;
|
||||
try
|
||||
{
|
||||
var editorProgram = _programsService.GetEditorProgram(getNext);
|
||||
if (editorProgram is null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (editorProgram.Path is { } executablePath)
|
||||
{
|
||||
execPath = executablePath;
|
||||
if (string.IsNullOrWhiteSpace(editorProgram.Arguments))
|
||||
{
|
||||
Process.Start(executablePath, "\"" + filePath + "\"");
|
||||
}
|
||||
else
|
||||
{
|
||||
var parts = editorProgram.Arguments.Split("%%1");
|
||||
var arguments = string.Join("%%1", parts.Select(p => p.Replace("%1", "\"" + filePath + "\""))).Replace("%%1", "%1");
|
||||
Process.Start(executablePath, arguments);
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: else
|
||||
break;
|
||||
}
|
||||
catch (System.ComponentModel.Win32Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Error while running editor program, possible the executable path does not exists. {ExecutablePath}", execPath);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Unknown error while running editor program");
|
||||
}
|
||||
|
||||
getNext = true;
|
||||
}
|
||||
|
||||
//TODO: else
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private async Task ScanSize()
|
||||
{
|
||||
if (_currentLocation?.Value is null) return;
|
||||
|
||||
|
||||
var searchTask = _containerSizeScanProvider.StartSizeScan(_currentLocation.Value);
|
||||
var openContainerCommand = new OpenContainerCommand(new AbsolutePath(_timelessContentProvider, searchTask.SizeSizeScanContainer));
|
||||
await _userCommandHandlerService.HandleCommandAsync(openContainerCommand);
|
||||
|
||||
Reference in New Issue
Block a user