Browse Source

fix ui crashes (#1382)

* fix ffmpeg editor crash

* fix watermark editor

* fix multi collection editor

* fix filler preset editor crash
pull/1383/head
Jason Dove 2 years ago committed by GitHub
parent
commit
b84bb6b437
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 54
      ErsatzTV/Pages/FFmpegEditor.razor
  2. 15
      ErsatzTV/Pages/FillerPresetEditor.razor
  3. 10
      ErsatzTV/Pages/MultiCollectionEditor.razor
  4. 3
      ErsatzTV/Pages/WatermarkEditor.razor

54
ErsatzTV/Pages/FFmpegEditor.razor

@ -11,8 +11,11 @@
@inject ISnackbar _snackbar @inject ISnackbar _snackbar
@inject IMediator _mediator @inject IMediator _mediator
@inject IMemoryCache _memoryCache @inject IMemoryCache _memoryCache
@inject PersistentComponentState ApplicationState
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8"> <MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8">
@if (_editContext is not null)
{
<EditForm EditContext="_editContext" OnSubmit="@HandleSubmitAsync"> <EditForm EditContext="_editContext" OnSubmit="@HandleSubmitAsync">
<FluentValidationValidator/> <FluentValidationValidator/>
<MudCard> <MudCard>
@ -139,6 +142,7 @@
</MudCardActions> </MudCardActions>
</MudCard> </MudCard>
</EditForm> </EditForm>
}
</MudContainer> </MudContainer>
@code { @code {
@ -151,25 +155,55 @@
private EditContext _editContext; private EditContext _editContext;
private ValidationMessageStore _messageStore; private ValidationMessageStore _messageStore;
private List<ResolutionViewModel> _resolutions; private List<ResolutionViewModel> _resolutions = new();
private List<string> _vaapiDevices; private List<string> _vaapiDevices = new();
private PersistingComponentStateSubscription _persistingSubscription;
public void Dispose() public void Dispose()
{ {
_persistingSubscription.Dispose();
_cts.Cancel(); _cts.Cancel();
_cts.Dispose(); _cts.Dispose();
} }
protected override Task OnInitializedAsync()
{
_persistingSubscription = ApplicationState.RegisterOnPersisting(PersistData);
return base.OnInitializedAsync();
}
protected override async Task OnParametersSetAsync() protected override async Task OnParametersSetAsync()
{
if (!ApplicationState.TryTakeFromJson("_resolutions", out List<ResolutionViewModel> restoredResolutions))
{ {
_resolutions = await _mediator.Send(new GetAllResolutions(), _cts.Token); _resolutions = await _mediator.Send(new GetAllResolutions(), _cts.Token);
}
else
{
_resolutions = restoredResolutions;
}
if (IsEdit) if (IsEdit)
{ {
Option<FFmpegProfileViewModel> profile = await _mediator.Send(new GetFFmpegProfileById(Id), _cts.Token); if (!ApplicationState.TryTakeFromJson("_model", out FFmpegProfileEditViewModel restoredProfile))
profile.Match( {
ffmpegProfileViewModel => _model = new FFmpegProfileEditViewModel(ffmpegProfileViewModel), Option<FFmpegProfileViewModel> maybeProfile = await _mediator.Send(new GetFFmpegProfileById(Id), _cts.Token);
() => _navigationManager.NavigateTo("404")); foreach (FFmpegProfileViewModel profile in maybeProfile)
{
_model = new FFmpegProfileEditViewModel(profile);
}
if (maybeProfile.IsNone)
{
_navigationManager.NavigateTo("404");
}
}
else
{
_model = restoredProfile;
}
} }
else else
{ {
@ -187,6 +221,14 @@
_vaapiDevices = vaapiDevices.OrderBy(s => s).ToList(); _vaapiDevices = vaapiDevices.OrderBy(s => s).ToList();
} }
private Task PersistData()
{
ApplicationState.PersistAsJson("_model", _model);
ApplicationState.PersistAsJson("_resolutions", _resolutions);
return Task.CompletedTask;
}
private bool IsEdit => Id != 0; private bool IsEdit => Id != 0;
private async Task HandleSubmitAsync() private async Task HandleSubmitAsync()

15
ErsatzTV/Pages/FillerPresetEditor.razor

@ -16,6 +16,8 @@
<div style="max-width: 400px;"> <div style="max-width: 400px;">
<MudText Typo="Typo.h4" Class="mb-4">@(IsEdit ? "Edit Filler Preset" : "Add Filler Preset")</MudText> <MudText Typo="Typo.h4" Class="mb-4">@(IsEdit ? "Edit Filler Preset" : "Add Filler Preset")</MudText>
@if (_editContext is not null)
{
<EditForm EditContext="_editContext" OnSubmit="@HandleSubmitAsync"> <EditForm EditContext="_editContext" OnSubmit="@HandleSubmitAsync">
<FluentValidationValidator/> <FluentValidationValidator/>
<MudCard> <MudCard>
@ -129,6 +131,7 @@
</MudCardActions> </MudCardActions>
</MudCard> </MudCard>
</EditForm> </EditForm>
}
</div> </div>
</MudContainer> </MudContainer>
@ -142,12 +145,12 @@
private EditContext _editContext; private EditContext _editContext;
private ValidationMessageStore _messageStore; private ValidationMessageStore _messageStore;
private List<MediaCollectionViewModel> _mediaCollections; private List<MediaCollectionViewModel> _mediaCollections = new();
private List<MultiCollectionViewModel> _multiCollections; private List<MultiCollectionViewModel> _multiCollections = new();
private List<SmartCollectionViewModel> _smartCollections; private List<SmartCollectionViewModel> _smartCollections = new();
private List<NamedMediaItemViewModel> _televisionShows; private List<NamedMediaItemViewModel> _televisionShows = new();
private List<NamedMediaItemViewModel> _televisionSeasons; private List<NamedMediaItemViewModel> _televisionSeasons = new();
private List<NamedMediaItemViewModel> _artists; private List<NamedMediaItemViewModel> _artists = new();
public void Dispose() public void Dispose()
{ {

10
ErsatzTV/Pages/MultiCollectionEditor.razor

@ -11,6 +11,8 @@
<div style="max-width: 400px;"> <div style="max-width: 400px;">
<MudText Typo="Typo.h4" Class="mb-4">@(IsEdit ? "Edit Multi Collection" : "Add Multi Collection")</MudText> <MudText Typo="Typo.h4" Class="mb-4">@(IsEdit ? "Edit Multi Collection" : "Add Multi Collection")</MudText>
@if (_editContext is not null)
{
<EditForm EditContext="_editContext" OnSubmit="@HandleSubmitAsync"> <EditForm EditContext="_editContext" OnSubmit="@HandleSubmitAsync">
<FluentValidationValidator/> <FluentValidationValidator/>
<MudCard> <MudCard>
@ -58,6 +60,7 @@
</MudCardActions> </MudCardActions>
</MudCard> </MudCard>
</EditForm> </EditForm>
}
</div> </div>
<MudTable Hover="true" Items="_model.Items.OrderBy(i => i.Collection.Name, StringComparer.CurrentCultureIgnoreCase)" Dense="true" Class="mt-6"> <MudTable Hover="true" Items="_model.Items.OrderBy(i => i.Collection.Name, StringComparer.CurrentCultureIgnoreCase)" Dense="true" Class="mt-6">
@ -108,11 +111,12 @@
[Parameter] [Parameter]
public int Id { get; set; } public int Id { get; set; }
private readonly MultiCollectionEditViewModel _model = new(); private readonly MultiCollectionEditViewModel _model =
new() { Items = new List<MultiCollectionItemEditViewModel>() };
private EditContext _editContext; private EditContext _editContext;
private ValidationMessageStore _messageStore; private ValidationMessageStore _messageStore;
private List<MediaCollectionViewModel> _collections; private List<MediaCollectionViewModel> _collections = new();
private List<SmartCollectionViewModel> _smartCollections; private List<SmartCollectionViewModel> _smartCollections = new();
private MediaCollectionViewModel _selectedCollection; private MediaCollectionViewModel _selectedCollection;
private SmartCollectionViewModel _selectedSmartCollection; private SmartCollectionViewModel _selectedSmartCollection;
private MudSelect<MediaCollectionViewModel> _collectionSelect; private MudSelect<MediaCollectionViewModel> _collectionSelect;

3
ErsatzTV/Pages/WatermarkEditor.razor

@ -11,6 +11,8 @@
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8"> <MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8">
<div style="max-width: 400px;"> <div style="max-width: 400px;">
@if (_editContext is not null)
{
<EditForm EditContext="_editContext" OnSubmit="@HandleSubmitAsync"> <EditForm EditContext="_editContext" OnSubmit="@HandleSubmitAsync">
<FluentValidationValidator/> <FluentValidationValidator/>
<MudCard> <MudCard>
@ -146,6 +148,7 @@
</MudCardActions> </MudCardActions>
</MudCard> </MudCard>
</EditForm> </EditForm>
}
</div> </div>
</MudContainer> </MudContainer>

Loading…
Cancel
Save