mirror of
https://github.com/unclshura/splitter.git
synced 2026-06-21 16:12:01 +00:00
60 lines
1.7 KiB
C#
60 lines
1.7 KiB
C#
using System.Collections.ObjectModel;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
|
|
namespace Splitter_UI.ViewModels;
|
|
|
|
public partial class FileListViewModel : ObservableObject
|
|
{
|
|
private readonly IFileJobFactory _factory;
|
|
private readonly IAutoDecisionService _autoDecisionService;
|
|
public ObservableCollection<JobViewModel> Files { get; } = [];
|
|
public ObservableCollection<JobViewModel> SelectedFiles { get; } = [];
|
|
|
|
[ObservableProperty]
|
|
private JobViewModel? _selected;
|
|
|
|
public event Action<JobViewModel?>? SelectedFileChanged;
|
|
|
|
public FileListViewModel(IFileJobFactory factory, IAutoDecisionService autoDecisionService)
|
|
{
|
|
_factory = factory;
|
|
_autoDecisionService = autoDecisionService;
|
|
}
|
|
|
|
partial void OnSelectedChanged(JobViewModel? value)
|
|
=> SelectedFileChanged?.Invoke(value);
|
|
|
|
[RelayCommand]
|
|
private void AddFiles(IEnumerable<string> paths)
|
|
{
|
|
foreach (var path in paths)
|
|
{
|
|
// Probe + auto-detect + thumbnail
|
|
var job = new SingleJob { InputFile = path };
|
|
var vm = _factory.Create(job);
|
|
Files.Add(vm);
|
|
_autoDecisionService.ApplyAutoDecisions(vm);
|
|
}
|
|
|
|
Selected = Files.LastOrDefault();
|
|
}
|
|
|
|
internal void DeleteSelected()
|
|
{
|
|
if (SelectedFiles.Any())
|
|
{
|
|
var toDelete = SelectedFiles.ToList();
|
|
foreach (var item in toDelete)
|
|
Files.Remove(item);
|
|
}
|
|
else if ( Selected != null)
|
|
{
|
|
var sel = Selected;
|
|
Files.Remove(sel);
|
|
}
|
|
|
|
Selected = Files.LastOrDefault();
|
|
}
|
|
}
|