From f39eac97c0909d1f6cd61482b3a78634030a93c3 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Thu, 11 Jan 2024 10:44:50 -0600 Subject: [PATCH] fix fill with group when show is also included individually (#1544) --- .../Playouts/Commands/BuildPlayoutHandler.cs | 2 ++ .../Fakes/FakeMediaCollectionRepository.cs | 2 +- .../Fakes/FakeTelevisionRepository.cs | 1 + ErsatzTV.Core/DebugBreak.cs | 16 ++++++++++++++ .../IMediaCollectionRepository.cs | 2 +- ErsatzTV.Core/Scheduling/CollectionKey.cs | 22 ++++++++++++------- ErsatzTV.Core/Scheduling/PlayoutBuilder.cs | 18 +++++++++++---- .../Repositories/MediaCollectionRepository.cs | 12 +++++----- 8 files changed, 55 insertions(+), 20 deletions(-) create mode 100644 ErsatzTV.Core/DebugBreak.cs diff --git a/ErsatzTV.Application/Playouts/Commands/BuildPlayoutHandler.cs b/ErsatzTV.Application/Playouts/Commands/BuildPlayoutHandler.cs index 554545ad..50049074 100644 --- a/ErsatzTV.Application/Playouts/Commands/BuildPlayoutHandler.cs +++ b/ErsatzTV.Application/Playouts/Commands/BuildPlayoutHandler.cs @@ -97,6 +97,8 @@ public class BuildPlayoutHandler : IRequestHandler IsCustomPlaybackOrder(int collectionId) => false.AsTask(); public Task> GetNameFromKey(CollectionKey emptyCollection) => Option.None.AsTask(); - public List GroupIntoFakeCollections(List items) => + public List GroupIntoFakeCollections(List items, string fakeKey = null) => throw new NotSupportedException(); } diff --git a/ErsatzTV.Core.Tests/Fakes/FakeTelevisionRepository.cs b/ErsatzTV.Core.Tests/Fakes/FakeTelevisionRepository.cs index 8ed2023a..29007986 100644 --- a/ErsatzTV.Core.Tests/Fakes/FakeTelevisionRepository.cs +++ b/ErsatzTV.Core.Tests/Fakes/FakeTelevisionRepository.cs @@ -81,4 +81,5 @@ public class FakeTelevisionRepository : ITelevisionRepository public Task UpdateOutline(EpisodeMetadata metadata, string outline) => throw new NotSupportedException(); public Task UpdatePlot(EpisodeMetadata metadata, string plot) => throw new NotSupportedException(); + public Task UpdateYear(ShowMetadata metadata, int? year) => throw new NotSupportedException(); } diff --git a/ErsatzTV.Core/DebugBreak.cs b/ErsatzTV.Core/DebugBreak.cs new file mode 100644 index 00000000..2eec6dc0 --- /dev/null +++ b/ErsatzTV.Core/DebugBreak.cs @@ -0,0 +1,16 @@ +using System.Diagnostics; + +namespace ErsatzTV.Core; + +public static class DebugBreak +{ + [DebuggerHidden] + [Conditional("DEBUG")] + public static void Break() + { + if (Debugger.IsAttached) + { + Debugger.Break(); + } + } +} diff --git a/ErsatzTV.Core/Interfaces/Repositories/IMediaCollectionRepository.cs b/ErsatzTV.Core/Interfaces/Repositories/IMediaCollectionRepository.cs index 1b96d1bf..9788918d 100644 --- a/ErsatzTV.Core/Interfaces/Repositories/IMediaCollectionRepository.cs +++ b/ErsatzTV.Core/Interfaces/Repositories/IMediaCollectionRepository.cs @@ -16,5 +16,5 @@ public interface IMediaCollectionRepository Task> PlayoutIdsUsingSmartCollection(int smartCollectionId); Task IsCustomPlaybackOrder(int collectionId); Task> GetNameFromKey(CollectionKey emptyCollection); - List GroupIntoFakeCollections(List items); + List GroupIntoFakeCollections(List items, string fakeKey = null); } diff --git a/ErsatzTV.Core/Scheduling/CollectionKey.cs b/ErsatzTV.Core/Scheduling/CollectionKey.cs index 6338a0a8..7b4c1afe 100644 --- a/ErsatzTV.Core/Scheduling/CollectionKey.cs +++ b/ErsatzTV.Core/Scheduling/CollectionKey.cs @@ -18,37 +18,43 @@ public class CollectionKey : Record ProgramScheduleItemCollectionType.Collection => new CollectionKey { CollectionType = item.CollectionType, - CollectionId = item.CollectionId + CollectionId = item.CollectionId, + FakeCollectionKey = item.FakeCollectionKey }, ProgramScheduleItemCollectionType.TelevisionShow => new CollectionKey { CollectionType = item.CollectionType, - MediaItemId = item.MediaItemId + MediaItemId = item.MediaItemId, + FakeCollectionKey = item.FakeCollectionKey }, ProgramScheduleItemCollectionType.TelevisionSeason => new CollectionKey { CollectionType = item.CollectionType, - MediaItemId = item.MediaItemId + MediaItemId = item.MediaItemId, + FakeCollectionKey = item.FakeCollectionKey }, ProgramScheduleItemCollectionType.Artist => new CollectionKey { CollectionType = item.CollectionType, - MediaItemId = item.MediaItemId + MediaItemId = item.MediaItemId, + FakeCollectionKey = item.FakeCollectionKey }, ProgramScheduleItemCollectionType.MultiCollection => new CollectionKey { CollectionType = item.CollectionType, - MultiCollectionId = item.MultiCollectionId + MultiCollectionId = item.MultiCollectionId, + FakeCollectionKey = item.FakeCollectionKey }, ProgramScheduleItemCollectionType.SmartCollection => new CollectionKey { CollectionType = item.CollectionType, - SmartCollectionId = item.SmartCollectionId + SmartCollectionId = item.SmartCollectionId, + FakeCollectionKey = item.FakeCollectionKey }, ProgramScheduleItemCollectionType.FakeCollection => new CollectionKey { - CollectionType = item.CollectionType, - FakeCollectionKey = item.FakeCollectionKey + CollectionType = item.CollectionType, + FakeCollectionKey = item.FakeCollectionKey }, _ => throw new ArgumentOutOfRangeException(nameof(item)) }; diff --git a/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs b/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs index 5dbf6978..4ca43df6 100644 --- a/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs +++ b/ErsatzTV.Core/Scheduling/PlayoutBuilder.cs @@ -447,7 +447,15 @@ public class PlayoutBuilder : IPlayoutBuilder _televisionRepository, _artistRepository, collectionKey); - var fakeCollections = _mediaCollectionRepository.GroupIntoFakeCollections(mediaItems) + string collectionKeyString = JsonConvert.SerializeObject( + collectionKey, + Formatting.None, + new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore + }); + collectionKeyString = $"{scheduleItem.Id}:{collectionKeyString}"; + var fakeCollections = _mediaCollectionRepository.GroupIntoFakeCollections(mediaItems, collectionKeyString) .Filter(c => c.ShowId > 0 || c.ArtistId > 0 || !string.IsNullOrWhiteSpace(c.Key)) .ToList(); List fakeScheduleItems = []; @@ -465,17 +473,19 @@ public class PlayoutBuilder : IPlayoutBuilder var (showId, _, _) when showId > 0 => new CollectionKey { CollectionType = ProgramScheduleItemCollectionType.TelevisionShow, - MediaItemId = showId + MediaItemId = showId, + FakeCollectionKey = collectionKeyString }, var (_, artistId, _) when artistId > 0 => new CollectionKey { CollectionType = ProgramScheduleItemCollectionType.Artist, - MediaItemId = artistId + MediaItemId = artistId, + FakeCollectionKey = collectionKeyString }, var (_, _, k) when k is not null => new CollectionKey { CollectionType = ProgramScheduleItemCollectionType.FakeCollection, - FakeCollectionKey = k + FakeCollectionKey = collectionKeyString }, var (_, _, _) => null }; diff --git a/ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs b/ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs index e9fdf8c2..eb2df521 100644 --- a/ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs +++ b/ErsatzTV.Infrastructure/Data/Repositories/MediaCollectionRepository.cs @@ -334,7 +334,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository } [SuppressMessage("Performance", "CA1822:Mark members as static")] - public List GroupIntoFakeCollections(List items) + public List GroupIntoFakeCollections(List items, string fakeKey = null) { int id = -1; var result = new List(); @@ -360,7 +360,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository new CollectionWithItems( showId, 0, - null, + fakeKey, list, true, PlaybackOrder.Chronological, @@ -388,7 +388,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository new CollectionWithItems( 0, artistId, - null, + fakeKey, list, true, PlaybackOrder.Chronological, @@ -429,7 +429,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository new CollectionWithItems( id, id, - allArtists[index], + $"{fakeKey}:artist:{allArtists[index]}", list, true, PlaybackOrder.Chronological, @@ -442,7 +442,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository new CollectionWithItems( id, id, - null, + fakeKey, items.OfType().Cast().ToList(), true, PlaybackOrder.Chronological, @@ -453,7 +453,7 @@ public class MediaCollectionRepository : IMediaCollectionRepository new CollectionWithItems( id, id, - null, + fakeKey, items.OfType().Cast().ToList(), true, PlaybackOrder.Chronological,