add global and channel fallback filler (#459)
* configure channel and global fallback filler * play random item from configured channel/global fallback filler as needed
This commit is contained in:
@@ -8,8 +8,11 @@
|
||||
@using System.Globalization
|
||||
@using ErsatzTV.Application.Channels
|
||||
@using ErsatzTV.Application.Channels.Queries
|
||||
@using ErsatzTV.Application.Filler
|
||||
@using ErsatzTV.Application.Filler.Queries
|
||||
@using ErsatzTV.Application.Watermarks
|
||||
@using ErsatzTV.Application.Watermarks.Queries
|
||||
@using ErsatzTV.Core.Domain.Filler
|
||||
@inject NavigationManager _navigationManager
|
||||
@inject ILogger<ChannelEditor> _logger
|
||||
@inject ISnackbar _snackbar
|
||||
@@ -41,7 +44,11 @@
|
||||
<MudSelectItem Value="@profile.Id">@profile.Name</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect Class="mt-3" Label="Preferred Language" @bind-Value="_model.PreferredLanguageCode" For="@(() => _model.PreferredLanguageCode)">
|
||||
<MudSelect Class="mt-3"
|
||||
Label="Preferred Language"
|
||||
@bind-Value="_model.PreferredLanguageCode"
|
||||
For="@(() => _model.PreferredLanguageCode)"
|
||||
Clearable="true">
|
||||
<MudSelectItem Value="@((string) null)">(none)</MudSelectItem>
|
||||
@foreach (CultureInfo culture in _availableCultures)
|
||||
{
|
||||
@@ -67,13 +74,25 @@
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
<MudSelect Class="mt-3" Label="Watermark" @bind-Value="_model.WatermarkId" For="@(() => _model.WatermarkId)"
|
||||
Disabled="@(_model.StreamingMode == StreamingMode.HttpLiveStreamingDirect)">
|
||||
Disabled="@(_model.StreamingMode == StreamingMode.HttpLiveStreamingDirect)"
|
||||
Clearable="true">
|
||||
<MudSelectItem T="int?" Value="@((int?) null)">(none)</MudSelectItem>
|
||||
@foreach (WatermarkViewModel watermark in _watermarks)
|
||||
{
|
||||
<MudSelectItem T="int?" Value="@watermark.Id">@watermark.Name</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect Class="mt-3"
|
||||
Label="Fallback Filler"
|
||||
@bind-Value="_model.FallbackFillerId"
|
||||
For="@(() => _model.FallbackFillerId)"
|
||||
Clearable="true">
|
||||
<MudSelectItem T="int?" Value="@((int?) null)">(none)</MudSelectItem>
|
||||
@foreach (FillerPresetViewModel fillerPreset in _fillerPresets)
|
||||
{
|
||||
<MudSelectItem T="int?" Value="@fillerPreset.Id">@fillerPreset.Name</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
</MudCardContent>
|
||||
<MudCardActions>
|
||||
<MudButton ButtonType="ButtonType.Submit" Variant="Variant.Filled" Color="Color.Primary">
|
||||
@@ -97,12 +116,14 @@
|
||||
private List<FFmpegProfileViewModel> _ffmpegProfiles;
|
||||
private List<CultureInfo> _availableCultures;
|
||||
private List<WatermarkViewModel> _watermarks;
|
||||
private List<FillerPresetViewModel> _fillerPresets;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
await LoadFFmpegProfiles();
|
||||
_availableCultures = await _mediator.Send(new GetAllLanguageCodes());
|
||||
await LoadWatermarks();
|
||||
await LoadFillerPresets();
|
||||
|
||||
if (Id.HasValue)
|
||||
{
|
||||
@@ -118,6 +139,7 @@
|
||||
_model.StreamingMode = channelViewModel.StreamingMode;
|
||||
_model.PreferredLanguageCode = channelViewModel.PreferredLanguageCode;
|
||||
_model.WatermarkId = channelViewModel.WatermarkId;
|
||||
_model.FallbackFillerId = channelViewModel.FallbackFillerId;
|
||||
},
|
||||
() => _navigationManager.NavigateTo("404"));
|
||||
}
|
||||
@@ -150,6 +172,10 @@
|
||||
private async Task LoadWatermarks() =>
|
||||
_watermarks = await _mediator.Send(new GetAllWatermarks());
|
||||
|
||||
private async Task LoadFillerPresets() =>
|
||||
_fillerPresets = await _mediator.Send(new GetAllFillerPresets())
|
||||
.Map(list => list.Filter(vm => vm.FillerKind == FillerKind.Fallback).ToList());
|
||||
|
||||
private async Task HandleSubmitAsync()
|
||||
{
|
||||
_messageStore.Clear();
|
||||
|
||||
@@ -9,8 +9,11 @@
|
||||
@using ErsatzTV.Application.Configuration.Queries
|
||||
@using Unit = LanguageExt.Unit
|
||||
@using ErsatzTV.Application.Configuration.Commands
|
||||
@using ErsatzTV.Application.Filler
|
||||
@using ErsatzTV.Application.Filler.Queries
|
||||
@using ErsatzTV.Application.Watermarks
|
||||
@using ErsatzTV.Application.Watermarks.Queries
|
||||
@using ErsatzTV.Core.Domain.Filler
|
||||
@using ErsatzTV.Core.FFmpeg
|
||||
@using Microsoft.AspNetCore.Components
|
||||
@inject IMediator _mediator
|
||||
@@ -51,13 +54,28 @@
|
||||
Color="Color.Primary"
|
||||
@bind-Checked="@_ffmpegSettings.SaveReports"/>
|
||||
</MudElement>
|
||||
<MudSelect Class="mt-3" Label="Global Watermark" @bind-Value="_ffmpegSettings.GlobalWatermarkId" For="@(() => _ffmpegSettings.GlobalWatermarkId)">
|
||||
<MudSelect Class="mt-3"
|
||||
Label="Global Watermark"
|
||||
@bind-Value="_ffmpegSettings.GlobalWatermarkId"
|
||||
For="@(() => _ffmpegSettings.GlobalWatermarkId)"
|
||||
Clearable="true">
|
||||
<MudSelectItem T="int?" Value="@((int?) null)">(none)</MudSelectItem>
|
||||
@foreach (WatermarkViewModel watermark in _watermarks)
|
||||
{
|
||||
<MudSelectItem T="int?" Value="@watermark.Id">@watermark.Name</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect Class="mt-3"
|
||||
Label="Global Fallback Filler"
|
||||
@bind-Value="_ffmpegSettings.GlobalFallbackFillerId"
|
||||
For="@(() => _ffmpegSettings.GlobalFallbackFillerId)"
|
||||
Clearable="true">
|
||||
<MudSelectItem T="int?" Value="@((int?) null)">(none)</MudSelectItem>
|
||||
@foreach (FillerPresetViewModel fillerPreset in _fillerPresets)
|
||||
{
|
||||
<MudSelectItem T="int?" Value="@fillerPreset.Id">@fillerPreset.Name</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudElement HtmlTag="div" Class="mt-3">
|
||||
<MudTextField T="int"
|
||||
Label="HLS Segmenter Idle Timeout"
|
||||
@@ -153,6 +171,7 @@
|
||||
private FFmpegSettingsViewModel _ffmpegSettings;
|
||||
private List<CultureInfo> _availableCultures;
|
||||
private List<WatermarkViewModel> _watermarks;
|
||||
private List<FillerPresetViewModel> _fillerPresets;
|
||||
private int _tunerCount;
|
||||
private int _libraryRefreshInterval;
|
||||
private int _playoutDaysToBuild;
|
||||
@@ -165,6 +184,8 @@
|
||||
_success = File.Exists(_ffmpegSettings.FFmpegPath) && File.Exists(_ffmpegSettings.FFprobePath);
|
||||
_availableCultures = await _mediator.Send(new GetAllLanguageCodes());
|
||||
_watermarks = await _mediator.Send(new GetAllWatermarks());
|
||||
_fillerPresets = await _mediator.Send(new GetAllFillerPresets())
|
||||
.Map(list => list.Filter(fp => fp.FillerKind == FillerKind.Fallback).ToList());
|
||||
_tunerCount = await _mediator.Send(new GetHDHRTunerCount());
|
||||
_hdhrSuccess = string.IsNullOrWhiteSpace(ValidateTunerCount(_tunerCount));
|
||||
_libraryRefreshInterval = await _mediator.Send(new GetLibraryRefreshInterval());
|
||||
|
||||
@@ -13,6 +13,7 @@ namespace ErsatzTV.ViewModels
|
||||
public string Logo { get; set; }
|
||||
public StreamingMode StreamingMode { get; set; }
|
||||
public int? WatermarkId { get; set; }
|
||||
public int? FallbackFillerId { get; set; }
|
||||
|
||||
public UpdateChannel ToUpdate() =>
|
||||
new(
|
||||
@@ -23,7 +24,8 @@ namespace ErsatzTV.ViewModels
|
||||
Logo,
|
||||
PreferredLanguageCode,
|
||||
StreamingMode,
|
||||
WatermarkId);
|
||||
WatermarkId,
|
||||
FallbackFillerId);
|
||||
|
||||
public CreateChannel ToCreate() =>
|
||||
new(
|
||||
@@ -33,6 +35,7 @@ namespace ErsatzTV.ViewModels
|
||||
Logo,
|
||||
PreferredLanguageCode,
|
||||
StreamingMode,
|
||||
WatermarkId);
|
||||
WatermarkId,
|
||||
FallbackFillerId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user