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; } = [];
}