From 398a3c041ad41b3bf23d96574cca9482e44fb488 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Thu, 2 May 2024 10:17:38 -0500 Subject: [PATCH] detect /dev/dri/card* devices (#1698) * remove unused nupkg * cleanup obsolete properties * detect /dev/dri/card devices --- CHANGELOG.md | 1 + ErsatzTV/Pages/ArtistList.razor | 2 +- ErsatzTV/Pages/BlockPlayoutEditor.razor | 2 +- ErsatzTV/Pages/Channels.razor | 4 +- ErsatzTV/Pages/CollectionItems.razor | 70 +++++++++--------- ErsatzTV/Pages/Collections.razor | 44 +++++------ ErsatzTV/Pages/EpisodeList.razor | 2 +- ErsatzTV/Pages/FFmpeg.razor | 20 ++--- ErsatzTV/Pages/FFmpegEditor.razor | 36 ++++----- ErsatzTV/Pages/FillerPresetEditor.razor | 2 +- ErsatzTV/Pages/FillerPresets.razor | 4 +- ErsatzTV/Pages/ImageBrowser.razor | 2 +- ErsatzTV/Pages/ImageList.razor | 2 +- ErsatzTV/Pages/Libraries.razor | 2 +- ErsatzTV/Pages/LocalLibraries.razor | 4 +- ErsatzTV/Pages/Movie.razor | 2 +- ErsatzTV/Pages/MovieList.razor | 2 +- ErsatzTV/Pages/MultiCollectionEditor.razor | 2 +- ErsatzTV/Pages/MusicVideoList.razor | 2 +- ErsatzTV/Pages/OtherVideoList.razor | 2 +- .../PlayoutAlternateSchedulesEditor.razor | 40 +++++----- ErsatzTV/Pages/PlayoutTemplatesEditor.razor | 40 +++++----- ErsatzTV/Pages/Playouts.razor | 39 ++-------- ErsatzTV/Pages/PlexMediaSources.razor | 4 +- ErsatzTV/Pages/ScheduleEditor.razor | 30 ++++---- ErsatzTV/Pages/Schedules.razor | 6 +- ErsatzTV/Pages/Search.razor | 18 ++--- ErsatzTV/Pages/Settings.razor | 8 +- ErsatzTV/Pages/SongList.razor | 2 +- ErsatzTV/Pages/TelevisionSeasonList.razor | 4 +- .../Pages/TelevisionSeasonSearchResults.razor | 2 +- ErsatzTV/Pages/TelevisionShowList.razor | 2 +- ErsatzTV/Pages/TraktLists.razor | 2 +- ErsatzTV/Pages/Trash.razor | 18 ++--- ErsatzTV/Pages/WatermarkEditor.razor | 2 +- ErsatzTV/Pages/Watermarks.razor | 4 +- .../RunOnce/PlatformSettingsService.cs | 19 ++--- ErsatzTV/Shared/MainLayout.razor | 10 +-- ErsatzTV/Shared/MediaCard.razor | 2 +- .../RemoteMediaSourceLibrariesEditor.razor | 2 +- ErsatzTV/Shared/RemoteMediaSources.razor | 24 +++--- lib/Serilog.Sinks.SQLite.6.0.1.nupkg | Bin 31397 -> 0 bytes lib/nuget/Serilog.Sinks.SQLite.6.0.1.nupkg | Bin 31397 -> 0 bytes nuget.config | 9 --- 44 files changed, 225 insertions(+), 269 deletions(-) delete mode 100644 lib/Serilog.Sinks.SQLite.6.0.1.nupkg delete mode 100644 lib/nuget/Serilog.Sinks.SQLite.6.0.1.nupkg delete mode 100644 nuget.config diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c937ad15..9345d524f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,6 +90,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Using proper MIME types for statically-served `.m3u8` and `.ts` files - Serving playlists with gzip compression - Use `HLS Segmenter V2` for channel preview when channel is configured for `HLS Segmenter V2` +- Detect and use `/dev/dri/card*` devices in addition to `/dev/dri/render*` devices ## [0.8.6-beta] - 2024-04-03 ### Added diff --git a/ErsatzTV/Pages/ArtistList.razor b/ErsatzTV/Pages/ArtistList.razor index fcf42f2ee..ce836b856 100644 --- a/ErsatzTV/Pages/ArtistList.razor +++ b/ErsatzTV/Pages/ArtistList.razor @@ -54,7 +54,7 @@ - + Edit Templates diff --git a/ErsatzTV/Pages/Channels.razor b/ErsatzTV/Pages/Channels.razor index e8395336c..feb147023 100644 --- a/ErsatzTV/Pages/Channels.razor +++ b/ErsatzTV/Pages/Channels.razor @@ -88,7 +88,7 @@ } + Href="@($"channels/{context.Id}")"> @@ -103,7 +103,7 @@ - + Add Channel diff --git a/ErsatzTV/Pages/CollectionItems.razor b/ErsatzTV/Pages/CollectionItems.razor index 2c705527c..a7e249b1e 100644 --- a/ErsatzTV/Pages/CollectionItems.razor +++ b/ErsatzTV/Pages/CollectionItems.razor @@ -2,8 +2,8 @@ @using ErsatzTV.Application.MediaCards @using ErsatzTV.Application.MediaCollections @inherits MultiSelectBase -@inject NavigationManager _navigationManager -@inject IJSRuntime _jsRuntime +@inject NavigationManager NavigationManager +@inject IJSRuntime JsRuntime
@@ -31,60 +31,60 @@
@_data?.Name + Href="@($"media/collections/{Id}/edit")"/>
@if (_data?.MovieCards.Count > 0) { - @_data.MovieCards.Count Movies + @_data.MovieCards.Count Movies } @if (_data?.ShowCards.Count > 0) { - @_data.ShowCards.Count Shows + @_data.ShowCards.Count Shows } @if (_data?.SeasonCards.Count > 0) { - @_data.SeasonCards.Count Seasons + @_data.SeasonCards.Count Seasons } @if (_data?.EpisodeCards.Count > 0) { - @_data.EpisodeCards.Count Episodes + @_data.EpisodeCards.Count Episodes } @if (_data?.ArtistCards.Count > 0) { - @_data.ArtistCards.Count Artists + @_data.ArtistCards.Count Artists } @if (_data?.MusicVideoCards.Count > 0) { - @_data.MusicVideoCards.Count Music Videos + @_data.MusicVideoCards.Count Music Videos } @if (_data?.OtherVideoCards.Count > 0) { - @_data.OtherVideoCards.Count Other Videos + @_data.OtherVideoCards.Count Other Videos } @if (_data?.SongCards.Count > 0) { - @_data.SongCards.Count Songs + @_data.SongCards.Count Songs } @if (_data?.ImageCards.Count > 0) { - @_data.ImageCards.Count Images + @_data.ImageCards.Count Images } @if (SupportsCustomOrdering()) {
} @@ -106,7 +106,7 @@ @foreach (MovieCardViewModel card in OrderMovies(_data.MovieCards)) { m.SortTitle)) { m.SortTitle)) { e.Aired)) { e.SortTitle)) { e.SortTitle)) { e.SortTitle)) { e.SortTitle)) { e.SortTitle)) { _data = result, - _ => _navigationManager.NavigateTo("404")); + _ => NavigationManager.NavigateTo("404")); } private IOrderedEnumerable OrderMovies(List movies) @@ -349,14 +349,14 @@ { try { - await _jsRuntime.InvokeVoidAsync("sortableCollection", Id); + await JsRuntime.InvokeVoidAsync("sortableCollection", Id); if (_data.UseCustomPlaybackOrder) { - await _jsRuntime.InvokeVoidAsync("enableSorting"); + await JsRuntime.InvokeVoidAsync("enableSorting"); } else { - await _jsRuntime.InvokeVoidAsync("disableSorting"); + await JsRuntime.InvokeVoidAsync("disableSorting"); } } catch (Exception) @@ -391,7 +391,7 @@ { var request = new RemoveItemsFromCollection(Id) { - MediaItemIds = new List { movie.MovieId } + MediaItemIds = [movie.MovieId] }; await RemoveItemsWithConfirmation("movie", $"{movie.Title} ({movie.Subtitle})", request); @@ -404,7 +404,7 @@ { var request = new RemoveItemsFromCollection(Id) { - MediaItemIds = new List { artist.ArtistId } + MediaItemIds = [artist.ArtistId] }; await RemoveItemsWithConfirmation( @@ -420,7 +420,7 @@ { var request = new RemoveItemsFromCollection(Id) { - MediaItemIds = new List { musicVideo.MusicVideoId } + MediaItemIds = [musicVideo.MusicVideoId] }; await RemoveItemsWithConfirmation("music video", $"{musicVideo.Title} ({musicVideo.Subtitle})", request); @@ -433,7 +433,7 @@ { var request = new RemoveItemsFromCollection(Id) { - MediaItemIds = new List { show.TelevisionShowId } + MediaItemIds = [show.TelevisionShowId] }; await RemoveItemsWithConfirmation("show", $"{show.Title} ({show.Subtitle})", request); @@ -446,7 +446,7 @@ { var request = new RemoveItemsFromCollection(Id) { - MediaItemIds = new List { season.TelevisionSeasonId } + MediaItemIds = [season.TelevisionSeasonId] }; await RemoveItemsWithConfirmation("season", $"{season.ShowTitle} - {season.Title}", request); @@ -457,7 +457,7 @@ { var request = new RemoveItemsFromCollection(Id) { - MediaItemIds = new List { episode.EpisodeId } + MediaItemIds = [episode.EpisodeId] }; await RemoveItemsWithConfirmation("episode", $"{episode.ShowTitle} - {episode.Title}", request); @@ -469,7 +469,7 @@ { var request = new RemoveItemsFromCollection(Id) { - MediaItemIds = new List { otherVideo.OtherVideoId } + MediaItemIds = [otherVideo.OtherVideoId] }; await RemoveItemsWithConfirmation("other video", $"{otherVideo.Title}", request); @@ -482,7 +482,7 @@ { var request = new RemoveItemsFromCollection(Id) { - MediaItemIds = new List { song.SongId } + MediaItemIds = [song.SongId] }; await RemoveItemsWithConfirmation("song", $"{song.Title}", request); diff --git a/ErsatzTV/Pages/Collections.razor b/ErsatzTV/Pages/Collections.razor index 9adf82789..d6a23f0bc 100644 --- a/ErsatzTV/Pages/Collections.razor +++ b/ErsatzTV/Pages/Collections.razor @@ -3,15 +3,15 @@ @using ErsatzTV.Application.MediaCollections @using ErsatzTV.Application.Configuration @implements IDisposable -@inject IDialogService _dialog -@inject IMediator _mediator +@inject IDialogService Dialog +@inject IMediator Mediator
- + Add Collection - + Add Multi Collection
@@ -38,7 +38,7 @@
+ Href="@($"media/collections/{context.Id}")"> @@ -76,7 +76,7 @@
+ Href="@($"media/multi-collections/{context.Id}/edit")"> @@ -114,7 +114,7 @@
+ Href="@context.Query.GetRelativeSearchQuery()"> @@ -150,13 +150,13 @@ protected override async Task OnParametersSetAsync() { - _collectionsRowsPerPage = await _mediator.Send(new GetConfigElementByKey(ConfigElementKey.CollectionsPageSize), _cts.Token) + _collectionsRowsPerPage = await Mediator.Send(new GetConfigElementByKey(ConfigElementKey.CollectionsPageSize), _cts.Token) .Map(maybeRows => maybeRows.Match(ce => int.TryParse(ce.Value, out int rows) ? rows : 10, () => 10)); - _multiCollectionsRowsPerPage = await _mediator.Send(new GetConfigElementByKey(ConfigElementKey.MultiCollectionsPageSize), _cts.Token) + _multiCollectionsRowsPerPage = await Mediator.Send(new GetConfigElementByKey(ConfigElementKey.MultiCollectionsPageSize), _cts.Token) .Map(maybeRows => maybeRows.Match(ce => int.TryParse(ce.Value, out int rows) ? rows : 10, () => 10)); - _smartCollectionsRowsPerPage = await _mediator.Send(new GetConfigElementByKey(ConfigElementKey.SmartCollectionsPageSize), _cts.Token) + _smartCollectionsRowsPerPage = await Mediator.Send(new GetConfigElementByKey(ConfigElementKey.SmartCollectionsPageSize), _cts.Token) .Map(maybeRows => maybeRows.Match(ce => int.TryParse(ce.Value, out int rows) ? rows : 10, () => 10)); } @@ -165,11 +165,11 @@ var parameters = new DialogParameters { { "EntityType", "collection" }, { "EntityName", collection.Name } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; - IDialogReference dialog = await _dialog.ShowAsync("Delete Collection", parameters, options); + IDialogReference dialog = await Dialog.ShowAsync("Delete Collection", parameters, options); DialogResult result = await dialog.Result; if (!result.Canceled) { - await _mediator.Send(new DeleteCollection(collection.Id), _cts.Token); + await Mediator.Send(new DeleteCollection(collection.Id), _cts.Token); if (_collectionsTable != null) { await _collectionsTable.ReloadServerData(); @@ -182,11 +182,11 @@ var parameters = new DialogParameters { { "EntityType", "multi collection" }, { "EntityName", collection.Name } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; - IDialogReference dialog = await _dialog.ShowAsync("Delete Multi Collection", parameters, options); + IDialogReference dialog = await Dialog.ShowAsync("Delete Multi Collection", parameters, options); DialogResult result = await dialog.Result; if (!result.Canceled) { - await _mediator.Send(new DeleteMultiCollection(collection.Id), _cts.Token); + await Mediator.Send(new DeleteMultiCollection(collection.Id), _cts.Token); if (_multiCollectionsTable != null) { await _multiCollectionsTable.ReloadServerData(); @@ -199,11 +199,11 @@ var parameters = new DialogParameters { { "EntityType", "smart collection" }, { "EntityName", collection.Name } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; - IDialogReference dialog = await _dialog.ShowAsync("Delete Smart Collection", parameters, options); + IDialogReference dialog = await Dialog.ShowAsync("Delete Smart Collection", parameters, options); DialogResult result = await dialog.Result; if (!result.Canceled) { - await _mediator.Send(new DeleteSmartCollection(collection.Id), _cts.Token); + await Mediator.Send(new DeleteSmartCollection(collection.Id), _cts.Token); if (_smartCollectionsTable != null) { await _smartCollectionsTable.ReloadServerData(); @@ -213,25 +213,25 @@ private async Task> ServerReloadCollections(TableState state) { - await _mediator.Send(new SaveConfigElementByKey(ConfigElementKey.CollectionsPageSize, state.PageSize.ToString()), _cts.Token); + await Mediator.Send(new SaveConfigElementByKey(ConfigElementKey.CollectionsPageSize, state.PageSize.ToString()), _cts.Token); - PagedMediaCollectionsViewModel data = await _mediator.Send(new GetPagedCollections(state.Page, state.PageSize), _cts.Token); + PagedMediaCollectionsViewModel data = await Mediator.Send(new GetPagedCollections(state.Page, state.PageSize), _cts.Token); return new TableData { TotalItems = data.TotalCount, Items = data.Page }; } private async Task> ServerReloadMultiCollections(TableState state) { - await _mediator.Send(new SaveConfigElementByKey(ConfigElementKey.MultiCollectionsPageSize, state.PageSize.ToString()), _cts.Token); + await Mediator.Send(new SaveConfigElementByKey(ConfigElementKey.MultiCollectionsPageSize, state.PageSize.ToString()), _cts.Token); - PagedMultiCollectionsViewModel data = await _mediator.Send(new GetPagedMultiCollections(state.Page, state.PageSize), _cts.Token); + PagedMultiCollectionsViewModel data = await Mediator.Send(new GetPagedMultiCollections(state.Page, state.PageSize), _cts.Token); return new TableData { TotalItems = data.TotalCount, Items = data.Page }; } private async Task> ServerReloadSmartCollections(TableState state) { - await _mediator.Send(new SaveConfigElementByKey(ConfigElementKey.SmartCollectionsPageSize, state.PageSize.ToString()), _cts.Token); + await Mediator.Send(new SaveConfigElementByKey(ConfigElementKey.SmartCollectionsPageSize, state.PageSize.ToString()), _cts.Token); - PagedSmartCollectionsViewModel data = await _mediator.Send(new GetPagedSmartCollections(state.Page, state.PageSize), _cts.Token); + PagedSmartCollectionsViewModel data = await Mediator.Send(new GetPagedSmartCollections(state.Page, state.PageSize), _cts.Token); return new TableData { TotalItems = data.TotalCount, Items = data.Page }; } diff --git a/ErsatzTV/Pages/EpisodeList.razor b/ErsatzTV/Pages/EpisodeList.razor index 92661f5ef..8e859f365 100644 --- a/ErsatzTV/Pages/EpisodeList.razor +++ b/ErsatzTV/Pages/EpisodeList.razor @@ -61,7 +61,7 @@ @@ -42,7 +42,7 @@
+ Href="@($"ffmpeg/{context.Id}")"> @@ -59,7 +59,7 @@ - + Add Profile @@ -78,18 +78,18 @@ protected override async Task OnParametersSetAsync() => await LoadFFmpegProfilesAsync(_cts.Token); private async Task LoadFFmpegProfilesAsync(CancellationToken cancellationToken) => - _ffmpegProfiles = await _mediator.Send(new GetAllFFmpegProfiles(), cancellationToken); + _ffmpegProfiles = await Mediator.Send(new GetAllFFmpegProfiles(), cancellationToken); private async Task DeleteProfileAsync(FFmpegProfileViewModel ffmpegProfile) { var parameters = new DialogParameters { { "EntityType", "ffmpeg profile" }, { "EntityName", ffmpegProfile.Name } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; - IDialogReference dialog = await _dialog.ShowAsync("Delete FFmpeg Profile", parameters, options); + IDialogReference dialog = await Dialog.ShowAsync("Delete FFmpeg Profile", parameters, options); DialogResult result = await dialog.Result; if (!result.Canceled) { - await _mediator.Send(new DeleteFFmpegProfile(ffmpegProfile.Id), _cts.Token); + await Mediator.Send(new DeleteFFmpegProfile(ffmpegProfile.Id), _cts.Token); await LoadFFmpegProfilesAsync(_cts.Token); } } @@ -99,11 +99,11 @@ var parameters = new DialogParameters { { "FFmpegProfileId", ffmpegProfile.Id } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; - IDialogReference dialog = await _dialog.ShowAsync("Copy FFmpeg Profile", parameters, options); + IDialogReference dialog = await Dialog.ShowAsync("Copy FFmpeg Profile", parameters, options); DialogResult dialogResult = await dialog.Result; if (!dialogResult.Canceled && dialogResult.Data is FFmpegProfileViewModel data) { - _navigationManager.NavigateTo($"ffmpeg/{data.Id}"); + NavigationManager.NavigateTo($"ffmpeg/{data.Id}"); } } diff --git a/ErsatzTV/Pages/FFmpegEditor.razor b/ErsatzTV/Pages/FFmpegEditor.razor index 3342c57b4..4573b1347 100644 --- a/ErsatzTV/Pages/FFmpegEditor.razor +++ b/ErsatzTV/Pages/FFmpegEditor.razor @@ -9,11 +9,11 @@ @using ErsatzTV.FFmpeg.Format @using ErsatzTV.FFmpeg.Preset @implements IDisposable -@inject NavigationManager _navigationManager -@inject ILogger _logger -@inject ISnackbar _snackbar -@inject IMediator _mediator -@inject IMemoryCache _memoryCache +@inject NavigationManager NavigationManager +@inject ILogger Logger +@inject ISnackbar Snackbar +@inject IMediator Mediator +@inject IMemoryCache MemoryCache @inject PersistentComponentState ApplicationState @@ -137,10 +137,10 @@ } - + - + @@ -216,7 +216,7 @@ { if (!ApplicationState.TryTakeFromJson("_resolutions", out List restoredResolutions)) { - _resolutions = await _mediator.Send(new GetAllResolutions(), _cts.Token); + _resolutions = await Mediator.Send(new GetAllResolutions(), _cts.Token); } else { @@ -225,7 +225,7 @@ if (!ApplicationState.TryTakeFromJson("_hardwareAccelerationKinds", out List restoredHardwareAccelerationKinds)) { - _hardwareAccelerationKinds = await _mediator.Send(new GetSupportedHardwareAccelerationKinds(), _cts.Token); + _hardwareAccelerationKinds = await Mediator.Send(new GetSupportedHardwareAccelerationKinds(), _cts.Token); } else { @@ -236,7 +236,7 @@ { if (!ApplicationState.TryTakeFromJson("_model", out FFmpegProfileEditViewModel restoredProfile)) { - Option maybeProfile = await _mediator.Send(new GetFFmpegProfileById(Id), _cts.Token); + Option maybeProfile = await Mediator.Send(new GetFFmpegProfileById(Id), _cts.Token); foreach (FFmpegProfileViewModel profile in maybeProfile) { _model = new FFmpegProfileEditViewModel(profile); @@ -244,7 +244,7 @@ if (maybeProfile.IsNone) { - _navigationManager.NavigateTo("404"); + NavigationManager.NavigateTo("404"); } } else @@ -254,7 +254,7 @@ } else { - _model = new FFmpegProfileEditViewModel(await _mediator.Send(new NewFFmpegProfile(), _cts.Token)); + _model = new FFmpegProfileEditViewModel(await Mediator.Send(new NewFFmpegProfile(), _cts.Token)); } if (!_hardwareAccelerationKinds.Contains(_model.HardwareAcceleration)) @@ -265,9 +265,9 @@ _editContext = new EditContext(_model); _messageStore = new ValidationMessageStore(_editContext); - if (!_memoryCache.TryGetValue("ffmpeg.render_devices", out List vaapiDevices)) + if (!MemoryCache.TryGetValue("ffmpeg.render_devices", out List vaapiDevices)) { - vaapiDevices = new List { "/dev/dri/renderD128" }; + vaapiDevices = ["/dev/dri/renderD128"]; } _vaapiDevices = vaapiDevices.OrderBy(s => s).ToList(); @@ -289,15 +289,15 @@ _messageStore.Clear(); if (_editContext.Validate()) { - Seq errorMessage = IsEdit ? (await _mediator.Send(_model.ToUpdate(), _cts.Token)).LeftToSeq() : (await _mediator.Send(_model.ToCreate(), _cts.Token)).LeftToSeq(); + Seq errorMessage = IsEdit ? (await Mediator.Send(_model.ToUpdate(), _cts.Token)).LeftToSeq() : (await Mediator.Send(_model.ToCreate(), _cts.Token)).LeftToSeq(); errorMessage.HeadOrNone().Match( error => { - _snackbar.Add("Unexpected error saving ffmpeg profile"); - _logger.LogError("Unexpected error saving ffmpeg profile: {Error}", error.Value); + Snackbar.Add("Unexpected error saving ffmpeg profile"); + Logger.LogError("Unexpected error saving ffmpeg profile: {Error}", error.Value); }, - () => _navigationManager.NavigateTo("/ffmpeg")); + () => NavigationManager.NavigateTo("/ffmpeg")); } } diff --git a/ErsatzTV/Pages/FillerPresetEditor.razor b/ErsatzTV/Pages/FillerPresetEditor.razor index a9fbcd8e1..ba375b5e7 100644 --- a/ErsatzTV/Pages/FillerPresetEditor.razor +++ b/ErsatzTV/Pages/FillerPresetEditor.razor @@ -44,7 +44,7 @@ 15 (:00, :15, :30, :45) 30 (:00, :30) - + @foreach (ProgramScheduleItemCollectionType collectionType in Enum.GetValues()) { diff --git a/ErsatzTV/Pages/FillerPresets.razor b/ErsatzTV/Pages/FillerPresets.razor index b1dcf695a..6db9ca50d 100644 --- a/ErsatzTV/Pages/FillerPresets.razor +++ b/ErsatzTV/Pages/FillerPresets.razor @@ -8,7 +8,7 @@
- + Add Filler Preset
@@ -50,7 +50,7 @@
+ Href="@($"media/filler/presets/{context.Id}/edit")"> diff --git a/ErsatzTV/Pages/ImageBrowser.razor b/ErsatzTV/Pages/ImageBrowser.razor index 6dc209477..165b16095 100644 --- a/ErsatzTV/Pages/ImageBrowser.razor +++ b/ErsatzTV/Pages/ImageBrowser.razor @@ -31,7 +31,7 @@ { + Href="@($"search?query={query}")"/> } }
diff --git a/ErsatzTV/Pages/ImageList.razor b/ErsatzTV/Pages/ImageList.razor index 7eafed5cf..9be93a22b 100644 --- a/ErsatzTV/Pages/ImageList.razor +++ b/ErsatzTV/Pages/ImageList.razor @@ -60,7 +60,7 @@ + Href="@($"search?query=library_id%3a{context.Id}")">
diff --git a/ErsatzTV/Pages/LocalLibraries.razor b/ErsatzTV/Pages/LocalLibraries.razor index 02ace9130..5ee59a17a 100644 --- a/ErsatzTV/Pages/LocalLibraries.razor +++ b/ErsatzTV/Pages/LocalLibraries.razor @@ -32,7 +32,7 @@ + Href="@($"media/sources/local/{context.Id}/edit")"> @@ -45,7 +45,7 @@
- + Add Local Library
diff --git a/ErsatzTV/Pages/Movie.razor b/ErsatzTV/Pages/Movie.razor index abc67553f..fd0dc8f89 100644 --- a/ErsatzTV/Pages/Movie.razor +++ b/ErsatzTV/Pages/Movie.razor @@ -219,7 +219,7 @@ @foreach (ActorCardViewModel actor in _movie.Actors) { } diff --git a/ErsatzTV/Pages/MovieList.razor b/ErsatzTV/Pages/MovieList.razor index cb4fbcdfd..3597aefe1 100644 --- a/ErsatzTV/Pages/MovieList.razor +++ b/ErsatzTV/Pages/MovieList.razor @@ -62,7 +62,7 @@ - + @if (context.ScheduleAsGroup) diff --git a/ErsatzTV/Pages/MusicVideoList.razor b/ErsatzTV/Pages/MusicVideoList.razor index d7c539a17..a8a059833 100644 --- a/ErsatzTV/Pages/MusicVideoList.razor +++ b/ErsatzTV/Pages/MusicVideoList.razor @@ -61,7 +61,7 @@ + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Monday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Monday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Tuesday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Tuesday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Wednesday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Wednesday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Thursday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Thursday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Friday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Friday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Saturday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Saturday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Sunday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Sunday, c))"/> @@ -161,8 +161,8 @@ { + Value="@(_selectedItem.DaysOfMonth.Contains(day))" + ValueChanged="@((bool c) => DayOfMonthChanged(day, c))"/> } @@ -182,15 +182,15 @@ + Value="@(_selectedItem.MonthsOfYear.Contains(1))" + ValueChanged="@((bool c) => MonthOfYearChanged(1, c))"/> @foreach (int month in Enumerable.Range(2, 11)) { + Value="@(_selectedItem.MonthsOfYear.Contains(month))" + ValueChanged="@((bool c) => MonthOfYearChanged(month, c))"/> } diff --git a/ErsatzTV/Pages/PlayoutTemplatesEditor.razor b/ErsatzTV/Pages/PlayoutTemplatesEditor.razor index 01b18501e..a3523d9e9 100644 --- a/ErsatzTV/Pages/PlayoutTemplatesEditor.razor +++ b/ErsatzTV/Pages/PlayoutTemplatesEditor.razor @@ -176,38 +176,38 @@ + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Monday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Monday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Tuesday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Tuesday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Wednesday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Wednesday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Thursday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Thursday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Friday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Friday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Saturday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Saturday, c))"/> + Value="@(_selectedItem.DaysOfWeek.Contains(DayOfWeek.Sunday))" + ValueChanged="@((bool c) => DayOfWeekChanged(DayOfWeek.Sunday, c))"/> @@ -234,8 +234,8 @@ { + Value="@(_selectedItem.DaysOfMonth.Contains(day))" + ValueChanged="@((bool c) => DayOfMonthChanged(day, c))"/> } @@ -255,15 +255,15 @@ + Value="@(_selectedItem.MonthsOfYear.Contains(1))" + ValueChanged="@((bool c) => MonthOfYearChanged(1, c))"/> @foreach (int month in Enumerable.Range(2, 11)) { + Value="@(_selectedItem.MonthsOfYear.Contains(month))" + ValueChanged="@((bool c) => MonthOfYearChanged(month, c))"/> } diff --git a/ErsatzTV/Pages/Playouts.razor b/ErsatzTV/Pages/Playouts.razor index 238090c35..fbb1e27fb 100644 --- a/ErsatzTV/Pages/Playouts.razor +++ b/ErsatzTV/Pages/Playouts.razor @@ -1,6 +1,5 @@ @page "/playouts" @using ErsatzTV.Application.Playouts -@using ErsatzTV.Application.Scheduling @using ErsatzTV.Application.Configuration @using ErsatzTV.Core.Scheduling @implements IDisposable @@ -11,16 +10,16 @@
- + Add Playout - + Add Block Playout - + Add External Json Playout @@ -85,7 +84,7 @@ + Href="@($"playouts/{context.PlayoutId}/alternate-schedules")"> @@ -117,7 +116,7 @@ + Href="@($"playouts/block/{context.PlayoutId}")"> @@ -152,7 +151,7 @@ @ref="_detailTable"> Playout Detail - + Start @@ -287,32 +286,6 @@ } } - private async Task EraseItems(PlayoutNameViewModel playout) - { - if (playout.PlayoutType is ProgramSchedulePlayoutType.Block) - { - await Mediator.Send(new EraseBlockPlayoutItems(playout.PlayoutId), _cts.Token); - } - - if (_selectedPlayoutId == playout.PlayoutId) - { - await PlayoutSelected(playout); - } - } - - private async Task EraseHistory(PlayoutNameViewModel playout) - { - if (playout.PlayoutType is ProgramSchedulePlayoutType.Block) - { - await Mediator.Send(new EraseBlockPlayoutHistory(playout.PlayoutId), _cts.Token); - } - - if (_selectedPlayoutId == playout.PlayoutId) - { - await PlayoutSelected(playout); - } - } - private async Task ScheduleReset(PlayoutNameViewModel playout) { var parameters = new DialogParameters diff --git a/ErsatzTV/Pages/PlexMediaSources.razor b/ErsatzTV/Pages/PlexMediaSources.razor index 27e190478..32b828e8d 100644 --- a/ErsatzTV/Pages/PlexMediaSources.razor +++ b/ErsatzTV/Pages/PlexMediaSources.razor @@ -39,12 +39,12 @@ + Href="@($"media/sources/plex/{context.Id}/libraries")"> + Href="@($"media/sources/plex/{context.Id}/paths")">
diff --git a/ErsatzTV/Pages/ScheduleEditor.razor b/ErsatzTV/Pages/ScheduleEditor.razor index afa0dec40..042190ac4 100644 --- a/ErsatzTV/Pages/ScheduleEditor.razor +++ b/ErsatzTV/Pages/ScheduleEditor.razor @@ -2,10 +2,10 @@ @page "/schedules/add" @using ErsatzTV.Application.ProgramSchedules @implements IDisposable -@inject NavigationManager _navigationManager -@inject ILogger _logger -@inject ISnackbar _snackbar -@inject IMediator _mediator +@inject NavigationManager NavigationManager +@inject ILogger Logger +@inject ISnackbar Snackbar +@inject IMediator Mediator
@@ -19,14 +19,14 @@ @@ -34,13 +34,13 @@ @@ -74,7 +74,7 @@ { if (IsEdit) { - Option maybeProgramSchedule = await _mediator.Send(new GetProgramScheduleById(Id), _cts.Token); + Option maybeProgramSchedule = await Mediator.Send(new GetProgramScheduleById(Id), _cts.Token); maybeProgramSchedule.Match( viewModel => { @@ -85,7 +85,7 @@ _model.TreatCollectionsAsShows = viewModel.TreatCollectionsAsShows; _model.RandomStartPoint = viewModel.RandomStartPoint; }, - () => _navigationManager.NavigateTo("404")); + () => NavigationManager.NavigateTo("404")); } else { @@ -107,19 +107,19 @@ if (_editContext.Validate()) { Either result = IsEdit - ? await _mediator.Send(_model.ToUpdate(), _cts.Token).MapT(r => r as EntityIdResult) - : await _mediator.Send(_model.ToCreate(), _cts.Token).MapT(r => r as EntityIdResult); + ? await Mediator.Send(_model.ToUpdate(), _cts.Token).MapT(r => r as EntityIdResult) + : await Mediator.Send(_model.ToCreate(), _cts.Token).MapT(r => r as EntityIdResult); result.Match( programSchedule => { string destination = IsEdit ? "/schedules" : $"/schedules/{programSchedule.Id}/items"; - _navigationManager.NavigateTo(destination); + NavigationManager.NavigateTo(destination); }, error => { - _snackbar.Add(error.Value, Severity.Error); - _logger.LogError("Unexpected error saving schedule: {Error}", error.Value); + Snackbar.Add(error.Value, Severity.Error); + Logger.LogError("Unexpected error saving schedule: {Error}", error.Value); }); } } diff --git a/ErsatzTV/Pages/Schedules.razor b/ErsatzTV/Pages/Schedules.razor index 0b6d8770d..c99ff9976 100644 --- a/ErsatzTV/Pages/Schedules.razor +++ b/ErsatzTV/Pages/Schedules.razor @@ -35,12 +35,12 @@
+ Href="@($"schedules/{context.Id}")"> + Href="@($"schedules/{context.Id}/items")"> @@ -60,7 +60,7 @@ - + Add Schedule diff --git a/ErsatzTV/Pages/Search.razor b/ErsatzTV/Pages/Search.razor index 392c82173..3279eeeee 100644 --- a/ErsatzTV/Pages/Search.razor +++ b/ErsatzTV/Pages/Search.razor @@ -134,7 +134,7 @@ @foreach (MovieCardViewModel card in _movies.Cards.OrderBy(m => m.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { + @bind-Value="@_ffmpegSettings.UseEmbeddedSubtitles"/> + @bind-Value="@_ffmpegSettings.SaveReports"/> diff --git a/ErsatzTV/Pages/SongList.razor b/ErsatzTV/Pages/SongList.razor index d3ddba609..a2f16ebc5 100644 --- a/ErsatzTV/Pages/SongList.razor +++ b/ErsatzTV/Pages/SongList.razor @@ -61,7 +61,7 @@ } @@ -164,7 +164,7 @@ @foreach (ActorCardViewModel actor in _show.Actors) { } diff --git a/ErsatzTV/Pages/TelevisionSeasonSearchResults.razor b/ErsatzTV/Pages/TelevisionSeasonSearchResults.razor index ec8f8340b..3e289ee65 100644 --- a/ErsatzTV/Pages/TelevisionSeasonSearchResults.razor +++ b/ErsatzTV/Pages/TelevisionSeasonSearchResults.razor @@ -54,7 +54,7 @@ + Href="@($"search?query=trakt_list%3a{context.TraktId}")"> diff --git a/ErsatzTV/Pages/Trash.razor b/ErsatzTV/Pages/Trash.razor index 446430f13..f5e452f85 100644 --- a/ErsatzTV/Pages/Trash.razor +++ b/ErsatzTV/Pages/Trash.razor @@ -111,7 +111,7 @@ @foreach (MovieCardViewModel card in _movies.Cards.OrderBy(m => m.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { s.SortTitle)) { Right Middle diff --git a/ErsatzTV/Pages/Watermarks.razor b/ErsatzTV/Pages/Watermarks.razor index 39304af38..98b96412e 100644 --- a/ErsatzTV/Pages/Watermarks.razor +++ b/ErsatzTV/Pages/Watermarks.razor @@ -48,7 +48,7 @@
+ Href="@($"watermarks/{context.Id}")"> @@ -65,7 +65,7 @@ - + Add Watermark diff --git a/ErsatzTV/Services/RunOnce/PlatformSettingsService.cs b/ErsatzTV/Services/RunOnce/PlatformSettingsService.cs index 242ed0e4f..272c9ca76 100644 --- a/ErsatzTV/Services/RunOnce/PlatformSettingsService.cs +++ b/ErsatzTV/Services/RunOnce/PlatformSettingsService.cs @@ -5,24 +5,13 @@ using Microsoft.Extensions.Caching.Memory; namespace ErsatzTV.Services.RunOnce; -public class PlatformSettingsService : BackgroundService +public class PlatformSettingsService(IServiceScopeFactory serviceScopeFactory) : BackgroundService { - private readonly ILogger _logger; - private readonly IServiceScopeFactory _serviceScopeFactory; - - public PlatformSettingsService( - IServiceScopeFactory serviceScopeFactory, - ILogger logger) - { - _serviceScopeFactory = serviceScopeFactory; - _logger = logger; - } - protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await Task.Yield(); - using IServiceScope scope = _serviceScopeFactory.CreateScope(); + using IServiceScope scope = serviceScopeFactory.CreateScope(); IRuntimeInfo runtimeInfo = scope.ServiceProvider.GetRequiredService(); if (runtimeInfo != null && runtimeInfo.IsOSPlatform(OSPlatform.Linux) && Directory.Exists("/dev/dri")) @@ -31,7 +20,9 @@ public class PlatformSettingsService : BackgroundService IMemoryCache memoryCache = scope.ServiceProvider.GetRequiredService(); var devices = localFileSystem.ListFiles("/dev/dri") - .Filter(s => s.StartsWith("/dev/dri/render", StringComparison.OrdinalIgnoreCase)) + .Filter( + s => s.StartsWith("/dev/dri/render", StringComparison.OrdinalIgnoreCase) + || s.StartsWith("/dev/dri/card", StringComparison.OrdinalIgnoreCase)) .ToList(); memoryCache.Set("ffmpeg.render_devices", devices); diff --git a/ErsatzTV/Shared/MainLayout.razor b/ErsatzTV/Shared/MainLayout.razor index 6a2750c43..111656cb9 100644 --- a/ErsatzTV/Shared/MainLayout.razor +++ b/ErsatzTV/Shared/MainLayout.razor @@ -9,7 +9,7 @@ @inject SystemStartup SystemStartup @inject ISearchTargets SearchTargets; - + @@ -77,13 +77,13 @@ } @* API *@ - + - + - +
@@ -180,7 +180,7 @@ _cts.Dispose(); } - private MudTheme _ersatzTvTheme => new() + private static MudTheme ErsatzTvTheme => new() { Palette = new PaletteDark { diff --git a/ErsatzTV/Shared/MediaCard.razor b/ErsatzTV/Shared/MediaCard.razor index 173fc5aec..ce1492aa0 100644 --- a/ErsatzTV/Shared/MediaCard.razor +++ b/ErsatzTV/Shared/MediaCard.razor @@ -36,7 +36,7 @@
}
- diff --git a/ErsatzTV/Shared/RemoteMediaSourceLibrariesEditor.razor b/ErsatzTV/Shared/RemoteMediaSourceLibrariesEditor.razor index a7bcc137c..f1b42e1dd 100644 --- a/ErsatzTV/Shared/RemoteMediaSourceLibrariesEditor.razor +++ b/ErsatzTV/Shared/RemoteMediaSourceLibrariesEditor.razor @@ -33,7 +33,7 @@ @context.Name @context.MediaKind - + diff --git a/ErsatzTV/Shared/RemoteMediaSources.razor b/ErsatzTV/Shared/RemoteMediaSources.razor index 2dccd8974..ed00682c4 100644 --- a/ErsatzTV/Shared/RemoteMediaSources.razor +++ b/ErsatzTV/Shared/RemoteMediaSources.razor @@ -3,9 +3,9 @@ @implements IDisposable @using ErsatzTV.Core.Interfaces.MediaSources @typeparam TMediaSource -@inject IMediator _mediator -@inject IDialogService _dialog -@inject IEntityLocker _locker +@inject IMediator Mediator +@inject IDialogService Dialog +@inject IEntityLocker Locker @@ -29,18 +29,18 @@
+ Href="@($"media/sources/{Name.ToLowerInvariant()}/{context.Id}/libraries")"> + Href="@($"media/sources/{Name.ToLowerInvariant()}/{context.Id}/paths")">
@@ -60,7 +60,7 @@ { Connect @Name @@ -70,7 +70,7 @@ { Fix @Name Connection @@ -112,20 +112,20 @@ { _isAuthorized = await SecretStore.ReadSecrets() .Map(secrets => !string.IsNullOrWhiteSpace(secrets.Address) && !string.IsNullOrWhiteSpace(secrets.ApiKey)); - _mediaSources = await _mediator.Send(GetAllMediaSourcesCommand, _cts.Token); + _mediaSources = await Mediator.Send(GetAllMediaSourcesCommand, _cts.Token); } private async Task Disconnect() { var parameters = new DialogParameters { { "Name", Name } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small }; - IDialogReference dialog = await _dialog.ShowAsync($"Disconnect {Name}", parameters, options); + IDialogReference dialog = await Dialog.ShowAsync($"Disconnect {Name}", parameters, options); DialogResult result = await dialog.Result; if (!result.Canceled) { - if (_locker.LockRemoteMediaSource()) + if (Locker.LockRemoteMediaSource()) { - await _mediator.Send(DisconnectCommand, _cts.Token); + await Mediator.Send(DisconnectCommand, _cts.Token); await LoadMediaSources(); } } diff --git a/lib/Serilog.Sinks.SQLite.6.0.1.nupkg b/lib/Serilog.Sinks.SQLite.6.0.1.nupkg deleted file mode 100644 index 0821afd0cba867754ee7b640ef1a656d0d7720fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31397 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

EHO3XDD9DM4IXHdx01*^ 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

EHO3XDD9DM4IXHdx01*^ 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 Nd> - - - - - - - - \ No newline at end of file