- @if (_editContext is not null)
- {
-
-
-
-
-
- @(IsEdit ? "Edit Watermark" : "Add Watermark")
-
-
-
-
-
- None
- Permanent
- Intermittent
-
-
- Custom
- Channel Logo
-
-
-
-
- @if (!string.IsNullOrWhiteSpace(_model.Image?.Path) && _model.ImageSource == ChannelWatermarkImageSource.Custom)
- {
-
- }
-
-
-
-
- Upload Image
-
-
-
-
- Bottom Right
- Bottom Middle
- Bottom Left
- Left Middle
- Top Left
- Top Middle
- Top Right
- Right Middle
-
-
-
-
-
- Scaled
- Actual Size
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5 minutes
- 10 minutes
- 15 minutes
- 20 minutes
- 30 minutes
- 60 minutes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- @(IsEdit ? "Save Changes" : "Add Watermark")
-
-
-
-
- }
+
+
+ @(IsEdit ? "Save Watermark" : "Add Watermark")
+
+
+
+ Watermark
+
+
+
+ Name
+
+
+
+
+
+ Mode
+
+
+ None
+ Permanent
+ Intermittent
+
+
+
+
+ Image Source
+
+
+ Custom
+ Channel Logo
+
+
+
+
+ Image
+
+
+
+ Upload Image
+
+
+
+
+ Image Preview
+
+ @if (!string.IsNullOrWhiteSpace(_model.Image?.Path) && _model.ImageSource == ChannelWatermarkImageSource.Custom)
+ {
+
+ }
+
+
+
+ Location
+
+
+ Bottom Right
+ Bottom Middle
+ Bottom Left
+ Left Middle
+ Top Left
+ Top Middle
+ Top Right
+ Right Middle
+
+
+
+
+ Place Within Source Content
+
+
+
+
+
+ Size
+
+
+ Scaled
+ Actual Size
+
+
+
+
+ Width
+
+
+
+
+
+ Horizontal Margin
+
+
+
+
+
+ Vertical Margin
+
+
+
+
+
+ Frequency
+
+
+ 5 minutes
+ 10 minutes
+ 15 minutes
+ 20 minutes
+ 30 minutes
+ 60 minutes
+
+
+
+
+ Duration
+
+
+
+
+
+ Opacity
+
+
+
+
-
+
@code {
private readonly CancellationTokenSource _cts = new();
@@ -160,8 +187,8 @@
public int Id { get; set; }
private WatermarkEditViewModel _model = new();
- private EditContext _editContext;
- private ValidationMessageStore _messageStore;
+ private readonly WatermarkEditViewModelValidator _validator = new();
+ private MudForm _form;
public void Dispose()
{
@@ -196,17 +223,15 @@
PlaceWithinSourceContent = false
};
}
-
- _editContext = new EditContext(_model);
- _messageStore = new ValidationMessageStore(_editContext);
}
private bool IsEdit => Id != 0;
private async Task HandleSubmitAsync()
{
- _messageStore.Clear();
- if (_editContext.Validate())
+ await _form.Validate();
+ ValidationResult result = await _validator.ValidateAsync(_model, _cts.Token);
+ if (result.IsValid)
{
Seq
errorMessage = IsEdit ? (await Mediator.Send(_model.ToUpdate(), _cts.Token)).LeftToSeq() : (await Mediator.Send(_model.ToCreate(), _cts.Token)).LeftToSeq();
@@ -231,8 +256,6 @@
relativeFileName =>
{
_model.Image = new ArtworkContentTypeModel(relativeFileName, e.File.ContentType);
- _messageStore.Clear();
- _editContext.Validate();
StateHasChanged();
},
error =>
diff --git a/ErsatzTV/Validators/WatermarkEditViewModelValidator.cs b/ErsatzTV/Validators/WatermarkEditViewModelValidator.cs
index aba06ee2..db420bf0 100644
--- a/ErsatzTV/Validators/WatermarkEditViewModelValidator.cs
+++ b/ErsatzTV/Validators/WatermarkEditViewModelValidator.cs
@@ -2,6 +2,7 @@
using ErsatzTV.FFmpeg.State;
using ErsatzTV.ViewModels;
using FluentValidation;
+using FluentValidation.Results;
namespace ErsatzTV.Validators;
@@ -42,4 +43,18 @@ public class WatermarkEditViewModelValidator : AbstractValidator vm.Mode != ChannelWatermarkMode.None);
}
+
+ public Func