Files
EugeneTes 83597b8763 web UI
2026-03-19 09:03:41 +01:00

131 lines
3.6 KiB
C#

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using OpenCvSharp;
using VisionBuilder.UI.Common.Commands;
using VisionBuilder.UI.Common.Commands.Interfaces;
using VisionBuilder.UI.Common.Services;
using VisionBuilder.UI.Common.ViewModel.Classes;
using VisionBuilder.UI.Common.ViewModel.Interfaces.UI;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace VisionBuilder.UI.Common.ViewModel;
public partial class ErrorPreviewVM:ObservableObject
{
private ErrorsVM _errorsVm;
private ErrorData _errorData;
private readonly ILearningTool _learningTool;
private readonly IPasswordInputService _passwordInputService;
[ObservableProperty]
private string _recipeName;
private readonly UIConfiguration _uiConfiguration;
[ObservableProperty]
private bool _learnButtonVisible;
[ObservableProperty]
private bool _isNextImageEnabled;
[ObservableProperty]
private bool _isPreviousImageEnabled;
[ObservableProperty]
private string _imageName;
[ObservableProperty]
private Mat _imageAnalysis;
[ObservableProperty]
private bool _originalView = false;
public ErrorPreviewVM(ErrorsVM errorsVm, ErrorData errorData, string recipeName, UIConfiguration uiConfiguration, ILearningTool learningTool, IPasswordInputService passwordInputService)
{
_errorsVm = errorsVm;
_errorData = errorData;
_recipeName = recipeName;
_uiConfiguration = uiConfiguration;
_learningTool = learningTool;
_passwordInputService = passwordInputService;
UpdateData();
}
[RelayCommand(CanExecute = nameof(IsNextImageEnabled))]
public void NextImage()
{
var imageIndex = _errorsVm.Errors.IndexOf(_errorData);
if (imageIndex >= _errorsVm.Errors.Count) return;
imageIndex++;
_errorData = _errorsVm.Errors[imageIndex];
UpdateData();
}
[RelayCommand(CanExecute = nameof(IsPreviousImageEnabled))]
public void PreviousImage()
{
var imageIndex = _errorsVm.Errors.IndexOf(_errorData);
if (imageIndex <= 0) return;
imageIndex--;
_errorData = _errorsVm.Errors[imageIndex];
UpdateData();
}
[RelayCommand]
public void SwitchView()
{
if (OriginalView)
{
ImageAnalysis = _errorData.ImageAnalysis;
OriginalView = false;
}
else
{
ImageAnalysis = _errorData.ImageOriginal;
OriginalView = true;
}
}
private void UpdateData()
{
var imageIndex = _errorsVm.Errors.IndexOf(_errorData);
if (imageIndex < 0)
{
IsNextImageEnabled = false;
IsPreviousImageEnabled = false;
ImageName = string.Empty;
ImageAnalysis = null;
return;
}
OriginalView= false;
IsNextImageEnabled = imageIndex < _errorsVm.Errors.Count - 1;
IsPreviousImageEnabled = imageIndex > 0;
ImageName = _errorData.Title;
ImageAnalysis = _errorData.ImageAnalysis;
LearnButtonVisible = _learningTool.IsLearningEnabled(_errorData.RecipeName);
}
[RelayCommand(CanExecute = nameof(LearnButtonVisible))]
public async Task Learn()
{
if (!string.IsNullOrEmpty(_uiConfiguration.AdminPassword))
{
var passwordOk = await _passwordInputService.GetPasswordAsync() == _uiConfiguration.AdminPassword;
if (!passwordOk) return;
}
_learningTool.Learn(_errorData.RecipeName, _errorData.ImageOriginal);
}
}