From 2c2d4166a13c96b83cd8e73c9522604574668c70 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Fri, 2 Aug 2024 14:51:17 -0500 Subject: [PATCH] basic break content editing --- .../Domain/Scheduling/DecoBreakPlacement.cs | 9 +- ErsatzTV/Pages/DecoEditor.razor | 198 ++++++++++-------- .../DecoBreakContentEditViewModel.cs | 12 ++ ErsatzTV/ViewModels/DecoEditViewModel.cs | 2 +- 4 files changed, 123 insertions(+), 98 deletions(-) diff --git a/ErsatzTV.Core/Domain/Scheduling/DecoBreakPlacement.cs b/ErsatzTV.Core/Domain/Scheduling/DecoBreakPlacement.cs index 674c26d7..08e7f176 100644 --- a/ErsatzTV.Core/Domain/Scheduling/DecoBreakPlacement.cs +++ b/ErsatzTV.Core/Domain/Scheduling/DecoBreakPlacement.cs @@ -1,10 +1,9 @@ namespace ErsatzTV.Core.Domain.Scheduling; -[Flags] public enum DecoBreakPlacement { - BlockStart, - BlockFinish, - BetweenBlockItems, - ChapterMarkers + BlockStart = 0, + BlockFinish = 1, + BetweenBlockItems = 2, + ChapterMarkers = 3 } diff --git a/ErsatzTV/Pages/DecoEditor.razor b/ErsatzTV/Pages/DecoEditor.razor index ad388d29..af0ff372 100644 --- a/ErsatzTV/Pages/DecoEditor.razor +++ b/ErsatzTV/Pages/DecoEditor.razor @@ -298,96 +298,93 @@ Disable Override - - Collection - Television Show - Television Season - Artist - Multi Collection - Smart Collection - - @if (_selectedBreakContent.CollectionType == ProgramScheduleItemCollectionType.Collection) - { - - @foreach (MediaCollectionViewModel collection in _mediaCollections) - { - @collection.Name - } - - } - @if (_selectedBreakContent.CollectionType == ProgramScheduleItemCollectionType.MultiCollection) - { - - @foreach (MultiCollectionViewModel collection in _multiCollections) - { - @collection.Name - } - - } - @if (_selectedBreakContent.CollectionType == ProgramScheduleItemCollectionType.SmartCollection) - { - - @foreach (SmartCollectionViewModel collection in _smartCollections) - { - @collection.Name - } - - } - @if (_selectedBreakContent.CollectionType == ProgramScheduleItemCollectionType.TelevisionShow) - { - - @foreach (NamedMediaItemViewModel show in _televisionShows) - { - @show.Name - } - - } - @if (_selectedBreakContent.CollectionType == ProgramScheduleItemCollectionType.TelevisionSeason) - { - - @foreach (NamedMediaItemViewModel season in _televisionSeasons) - { - @season.Name - } - - } - @if (_selectedBreakContent.CollectionType == ProgramScheduleItemCollectionType.Artist) - { - - @foreach (NamedMediaItemViewModel artist in _artists) - { - @artist.Name - } - - } + + + Add Break Content + + + + + + + Deco Break Content + + + + + + + + + Type + Name + Placement + + + + @context.CollectionType.ToString() + @context.CollectionName + @context.Placement.ToString() + + + + + + + + + Collection + Multi Collection + Smart Collection + + + + @switch (context.CollectionType) + { + case ProgramScheduleItemCollectionType.Collection: + + @foreach (MediaCollectionViewModel collection in _mediaCollections) + { + @collection.Name + } + + break; + case ProgramScheduleItemCollectionType.MultiCollection: + + @foreach (MultiCollectionViewModel collection in _multiCollections) + { + @collection.Name + } + + break; + case ProgramScheduleItemCollectionType.SmartCollection: + + @foreach (SmartCollectionViewModel collection in _smartCollections) + { + @collection.Name + } + + break; + } + + + + Block Start + Block Finish + Between Block Items + Chapter Markers + + + + @@ -409,8 +406,6 @@ private List _televisionSeasons = []; private List _artists = []; - private DecoBreakContentEditViewModel _selectedBreakContent = new(); - public void Dispose() { _cts.Cancel(); @@ -491,11 +486,30 @@ ? _smartCollections.Find(c => c.Id == deco.DeadAirFallbackSmartCollectionId!.Value) : null, - BreakContentMode = deco.BreakContentMode + BreakContentMode = deco.BreakContentMode, + BreakContent = [] }; } } + private void AddBreakContent() + { + var item = new DecoBreakContentEditViewModel + { + Index = _deco.BreakContent.Map(i => i.Index).DefaultIfEmpty().Max() + 1, + CollectionType = ProgramScheduleItemCollectionType.Collection, + Collection = null, + Placement = DecoBreakPlacement.BlockStart + }; + + _deco.BreakContent.Add(item); + } + + private void RemoveBreakContent(DecoBreakContentEditViewModel item) + { + _deco.BreakContent.Remove(item); + } + private async Task SaveChanges() { var request = new UpdateDeco( diff --git a/ErsatzTV/ViewModels/DecoBreakContentEditViewModel.cs b/ErsatzTV/ViewModels/DecoBreakContentEditViewModel.cs index 1cef997a..cc4e65de 100644 --- a/ErsatzTV/ViewModels/DecoBreakContentEditViewModel.cs +++ b/ErsatzTV/ViewModels/DecoBreakContentEditViewModel.cs @@ -1,8 +1,10 @@ using System.ComponentModel; using System.Runtime.CompilerServices; +using ErsatzTV.Annotations; using ErsatzTV.Application.MediaCollections; using ErsatzTV.Application.MediaItems; using ErsatzTV.Core.Domain; +using ErsatzTV.Core.Domain.Scheduling; namespace ErsatzTV.ViewModels; @@ -31,15 +33,25 @@ public class DecoBreakContentEditViewModel : INotifyPropertyChanged OnPropertyChanged(nameof(MultiCollection)); OnPropertyChanged(nameof(MediaItem)); OnPropertyChanged(nameof(SmartCollection)); + OnPropertyChanged(nameof(CollectionName)); } } } + [CanBeNull] public MediaCollectionViewModel Collection { get; set; } + + [CanBeNull] public MultiCollectionViewModel MultiCollection { get; set; } + + [CanBeNull] public SmartCollectionViewModel SmartCollection { get; set; } + + [CanBeNull] public NamedMediaItemViewModel MediaItem { get; set; } + public DecoBreakPlacement Placement { get; set; } + public string CollectionName => CollectionType switch { ProgramScheduleItemCollectionType.Collection => Collection?.Name, diff --git a/ErsatzTV/ViewModels/DecoEditViewModel.cs b/ErsatzTV/ViewModels/DecoEditViewModel.cs index a767f1de..2103469a 100644 --- a/ErsatzTV/ViewModels/DecoEditViewModel.cs +++ b/ErsatzTV/ViewModels/DecoEditViewModel.cs @@ -28,5 +28,5 @@ public class DecoEditViewModel public NamedMediaItemViewModel DeadAirFallbackMediaItem { get; set; } public DecoMode BreakContentMode { get; set; } - public List BreakContent { get; set; } + public List BreakContent { get; set; } = []; }