|
|
|
@ -4,10 +4,10 @@ |
|
|
|
@using ErsatzTV.Application.Watermarks |
|
|
|
@using ErsatzTV.Application.Watermarks |
|
|
|
@using ErsatzTV.Application.Images |
|
|
|
@using ErsatzTV.Application.Images |
|
|
|
@implements IDisposable |
|
|
|
@implements IDisposable |
|
|
|
@inject NavigationManager _navigationManager |
|
|
|
@inject NavigationManager NavigationManager |
|
|
|
@inject ILogger<WatermarkEditor> _logger |
|
|
|
@inject ILogger<WatermarkEditor> Logger |
|
|
|
@inject ISnackbar _snackbar |
|
|
|
@inject ISnackbar Snackbar |
|
|
|
@inject IMediator _mediator |
|
|
|
@inject IMediator Mediator |
|
|
|
|
|
|
|
|
|
|
|
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8"> |
|
|
|
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8"> |
|
|
|
<div style="max-width: 400px;"> |
|
|
|
<div style="max-width: 400px;"> |
|
|
|
@ -65,6 +65,10 @@ |
|
|
|
<MudSelectItem Value="@(WatermarkLocation.TopRight)">Top Right</MudSelectItem> |
|
|
|
<MudSelectItem Value="@(WatermarkLocation.TopRight)">Top Right</MudSelectItem> |
|
|
|
<MudSelectItem Value="@(WatermarkLocation.RightMiddle)">Right Middle</MudSelectItem> |
|
|
|
<MudSelectItem Value="@(WatermarkLocation.RightMiddle)">Right Middle</MudSelectItem> |
|
|
|
</MudSelect> |
|
|
|
</MudSelect> |
|
|
|
|
|
|
|
<MudCheckBox Class="mt-3" Label="Place Within Source Content" |
|
|
|
|
|
|
|
@bind-Checked="_model.PlaceWithinSourceContent" |
|
|
|
|
|
|
|
For="@(() => _model.PlaceWithinSourceContent)" |
|
|
|
|
|
|
|
Disabled="@(_model.Mode == ChannelWatermarkMode.None)" /> |
|
|
|
<MudGrid Class="mt-3" Style="align-items: start" Justify="Justify.Center"> |
|
|
|
<MudGrid Class="mt-3" Style="align-items: start" Justify="Justify.Center"> |
|
|
|
<MudItem xs="6"> |
|
|
|
<MudItem xs="6"> |
|
|
|
<MudSelect Label="Size" @bind-Value="_model.Size" |
|
|
|
<MudSelect Label="Size" @bind-Value="_model.Size" |
|
|
|
@ -165,10 +169,10 @@ |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (IsEdit) |
|
|
|
if (IsEdit) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Option<WatermarkViewModel> watermark = await _mediator.Send(new GetWatermarkById(Id), _cts.Token); |
|
|
|
Option<WatermarkViewModel> watermark = await Mediator.Send(new GetWatermarkById(Id), _cts.Token); |
|
|
|
watermark.Match( |
|
|
|
watermark.Match( |
|
|
|
watermarkViewModel => _model = new WatermarkEditViewModel(watermarkViewModel), |
|
|
|
watermarkViewModel => _model = new WatermarkEditViewModel(watermarkViewModel), |
|
|
|
() => _navigationManager.NavigateTo("404")); |
|
|
|
() => NavigationManager.NavigateTo("404")); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -184,7 +188,8 @@ |
|
|
|
VerticalMargin = 5, |
|
|
|
VerticalMargin = 5, |
|
|
|
FrequencyMinutes = 15, |
|
|
|
FrequencyMinutes = 15, |
|
|
|
DurationSeconds = 15, |
|
|
|
DurationSeconds = 15, |
|
|
|
Opacity = 100 |
|
|
|
Opacity = 100, |
|
|
|
|
|
|
|
PlaceWithinSourceContent = false |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -200,16 +205,16 @@ |
|
|
|
if (_editContext.Validate()) |
|
|
|
if (_editContext.Validate()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Seq<BaseError> errorMessage = IsEdit ? |
|
|
|
Seq<BaseError> errorMessage = IsEdit ? |
|
|
|
(await _mediator.Send(_model.ToUpdate(), _cts.Token)).LeftToSeq() : |
|
|
|
(await Mediator.Send(_model.ToUpdate(), _cts.Token)).LeftToSeq() : |
|
|
|
(await _mediator.Send(_model.ToCreate(), _cts.Token)).LeftToSeq(); |
|
|
|
(await Mediator.Send(_model.ToCreate(), _cts.Token)).LeftToSeq(); |
|
|
|
|
|
|
|
|
|
|
|
errorMessage.HeadOrNone().Match( |
|
|
|
errorMessage.HeadOrNone().Match( |
|
|
|
error => |
|
|
|
error => |
|
|
|
{ |
|
|
|
{ |
|
|
|
_snackbar.Add("Unexpected error saving watermark"); |
|
|
|
Snackbar.Add("Unexpected error saving watermark"); |
|
|
|
_logger.LogError("Unexpected error saving watermark: {Error}", error.Value); |
|
|
|
Logger.LogError("Unexpected error saving watermark: {Error}", error.Value); |
|
|
|
}, |
|
|
|
}, |
|
|
|
() => _navigationManager.NavigateTo("/watermarks")); |
|
|
|
() => NavigationManager.NavigateTo("/watermarks")); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -217,7 +222,7 @@ |
|
|
|
{ |
|
|
|
{ |
|
|
|
try |
|
|
|
try |
|
|
|
{ |
|
|
|
{ |
|
|
|
Either<BaseError, string> maybeCacheFileName = await _mediator.Send( |
|
|
|
Either<BaseError, string> maybeCacheFileName = await Mediator.Send( |
|
|
|
new SaveArtworkToDisk(e.File.OpenReadStream(10 * 1024 * 1024), ArtworkKind.Watermark), |
|
|
|
new SaveArtworkToDisk(e.File.OpenReadStream(10 * 1024 * 1024), ArtworkKind.Watermark), |
|
|
|
_cts.Token); |
|
|
|
_cts.Token); |
|
|
|
maybeCacheFileName.Match( |
|
|
|
maybeCacheFileName.Match( |
|
|
|
@ -230,19 +235,19 @@ |
|
|
|
}, |
|
|
|
}, |
|
|
|
error => |
|
|
|
error => |
|
|
|
{ |
|
|
|
{ |
|
|
|
_snackbar.Add($"Unexpected error saving watermark: {error.Value}", Severity.Error); |
|
|
|
Snackbar.Add($"Unexpected error saving watermark: {error.Value}", Severity.Error); |
|
|
|
_logger.LogError("Unexpected error saving watermark: {Error}", error.Value); |
|
|
|
Logger.LogError("Unexpected error saving watermark: {Error}", error.Value); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
catch (IOException) |
|
|
|
catch (IOException) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_snackbar.Add("Watermark exceeds maximum allowed file size of 10 MB", Severity.Error); |
|
|
|
Snackbar.Add("Watermark exceeds maximum allowed file size of 10 MB", Severity.Error); |
|
|
|
_logger.LogError("Watermark exceeds maximum allowed file size of 10 MB"); |
|
|
|
Logger.LogError("Watermark exceeds maximum allowed file size of 10 MB"); |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
{ |
|
|
|
_snackbar.Add($"Unexpected error saving watermark: {ex.Message}", Severity.Error); |
|
|
|
Snackbar.Add($"Unexpected error saving watermark: {ex.Message}", Severity.Error); |
|
|
|
_logger.LogError("Unexpected error saving watermark: {Error}", ex.Message); |
|
|
|
Logger.LogError("Unexpected error saving watermark: {Error}", ex.Message); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|