diff --git a/ErsatzTV.Application/Scheduling/Commands/UpdateDecoHandler.cs b/ErsatzTV.Application/Scheduling/Commands/UpdateDecoHandler.cs index 8cc5d084..53d1658f 100644 --- a/ErsatzTV.Application/Scheduling/Commands/UpdateDecoHandler.cs +++ b/ErsatzTV.Application/Scheduling/Commands/UpdateDecoHandler.cs @@ -53,35 +53,55 @@ public class UpdateDecoHandler(IDbContextFactory dbContextFactory) // default filler existing.DefaultFillerMode = request.DefaultFillerMode; existing.DefaultFillerCollectionType = request.DefaultFillerCollectionType; - existing.DefaultFillerCollectionId = request.DefaultFillerMode is DecoMode.Override - ? request.DefaultFillerCollectionId - : null; - existing.DefaultFillerMediaItemId = request.DefaultFillerMode is DecoMode.Override - ? request.DefaultFillerMediaItemId - : null; - existing.DefaultFillerMultiCollectionId = request.DefaultFillerMode is DecoMode.Override - ? request.DefaultFillerMultiCollectionId - : null; - existing.DefaultFillerSmartCollectionId = request.DefaultFillerMode is DecoMode.Override - ? request.DefaultFillerSmartCollectionId - : null; + existing.DefaultFillerCollectionId = null; + existing.DefaultFillerMediaItemId = null; + existing.DefaultFillerMultiCollectionId = null; + existing.DefaultFillerSmartCollectionId = null; + if (request.DefaultFillerMode is DecoMode.Override) + { + switch (request.DefaultFillerCollectionType) + { + case ProgramScheduleItemCollectionType.Collection: + existing.DefaultFillerCollectionId = request.DefaultFillerCollectionId; + break; + case ProgramScheduleItemCollectionType.MultiCollection: + existing.DefaultFillerMultiCollectionId = request.DefaultFillerMultiCollectionId; + break; + case ProgramScheduleItemCollectionType.SmartCollection: + existing.DefaultFillerSmartCollectionId = request.DefaultFillerSmartCollectionId; + break; + default: + existing.DefaultFillerMediaItemId = request.DefaultFillerMediaItemId; + break; + } + } existing.DefaultFillerTrimToFit = request.DefaultFillerTrimToFit; // dead air fallback existing.DeadAirFallbackMode = request.DeadAirFallbackMode; existing.DeadAirFallbackCollectionType = request.DeadAirFallbackCollectionType; - existing.DeadAirFallbackCollectionId = request.DeadAirFallbackMode is DecoMode.Override - ? request.DeadAirFallbackCollectionId - : null; - existing.DeadAirFallbackMediaItemId = request.DeadAirFallbackMode is DecoMode.Override - ? request.DeadAirFallbackMediaItemId - : null; - existing.DeadAirFallbackMultiCollectionId = request.DeadAirFallbackMode is DecoMode.Override - ? request.DeadAirFallbackMultiCollectionId - : null; - existing.DeadAirFallbackSmartCollectionId = request.DeadAirFallbackMode is DecoMode.Override - ? request.DeadAirFallbackSmartCollectionId - : null; + existing.DeadAirFallbackCollectionId = null; + existing.DeadAirFallbackMediaItemId = null; + existing.DeadAirFallbackMultiCollectionId = null; + existing.DeadAirFallbackSmartCollectionId = null; + if (request.DeadAirFallbackMode is DecoMode.Override) + { + switch (request.DeadAirFallbackCollectionType) + { + case ProgramScheduleItemCollectionType.Collection: + existing.DeadAirFallbackCollectionId = request.DeadAirFallbackCollectionId; + break; + case ProgramScheduleItemCollectionType.MultiCollection: + existing.DeadAirFallbackMultiCollectionId = request.DeadAirFallbackMultiCollectionId; + break; + case ProgramScheduleItemCollectionType.SmartCollection: + existing.DeadAirFallbackSmartCollectionId = request.DeadAirFallbackSmartCollectionId; + break; + default: + existing.DeadAirFallbackMediaItemId = request.DeadAirFallbackMediaItemId; + break; + } + } await dbContext.SaveChangesAsync(); diff --git a/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs b/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs index 477757c3..123e8565 100644 --- a/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs +++ b/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs @@ -72,7 +72,7 @@ public class BlockPlayoutBuilder( BlockPlayoutChangeDetection.GetPlayoutItemToBlockKeyMap(referenceData); // remove items without a block key (shouldn't happen often, just upgrades) - foreach (var item in referenceData.ExistingItems.Where(i => !itemBlockKeys.ContainsKey(i))) + foreach (var item in referenceData.ExistingItems.Where(i => i.FillerKind is not FillerKind.DecoDefault && !itemBlockKeys.ContainsKey(i))) { result.ItemsToRemove.Add(item.Id); } diff --git a/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs b/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs index af2c240b..becc31f7 100644 --- a/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs +++ b/ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutFillerBuilder.cs @@ -31,10 +31,6 @@ public class BlockPlayoutFillerBuilder( .Where(i => !result.ItemsToRemove.Contains(i.Id)) .ToList(); - var filteredExistingHistory = referenceData.PlayoutHistory - .Where(h => !result.HistoryToRemove.Contains(h.Id)) - .ToList(); - var allItems = result.AddedItems.ToList(); if (mode is PlayoutBuildMode.Reset) @@ -57,6 +53,10 @@ public class BlockPlayoutFillerBuilder( allItems.AddRange(filteredExistingItems); } + var filteredExistingHistory = referenceData.PlayoutHistory + .Where(h => !result.HistoryToRemove.Contains(h.Id)) + .ToList(); + var collectionEnumerators = new Dictionary(); // find all unscheduled periods