using ErsatzTV.Core; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Scheduling; namespace ErsatzTV.Application.ProgramSchedules; public record AddProgramScheduleItem( int ProgramScheduleId, StartType StartType, TimeSpan? StartTime, FixedStartTimeBehavior? FixedStartTimeBehavior, PlayoutMode PlayoutMode, CollectionType CollectionType, int? CollectionId, int? MultiCollectionId, int? SmartCollectionId, int? RerunCollectionId, int? MediaItemId, int? PlaylistId, PlaybackOrder PlaybackOrder, MarathonGroupBy MarathonGroupBy, bool MarathonShuffleGroups, bool MarathonShuffleItems, int? MarathonBatchSize, FillWithGroupMode FillWithGroupMode, MultipleMode MultipleMode, int? MultipleCount, TimeSpan? PlayoutDuration, TailMode TailMode, int? DiscardToFillAttempts, string CustomTitle, GuideMode GuideMode, int? PreRollFillerId, int? MidRollFillerId, int? PostRollFillerId, int? TailFillerId, int? FallbackFillerId, List WatermarkIds, List GraphicsElementIds, string PreferredAudioLanguageCode, string PreferredAudioTitle, string PreferredSubtitleLanguageCode, ChannelSubtitleMode? SubtitleMode) : IRequest>, IProgramScheduleItemRequest { public static AddProgramScheduleItem ForMediaItem(int scheduleId, CollectionType collectionType, int mediaItemId) => new( scheduleId, StartType.Dynamic, StartTime: null, FixedStartTimeBehavior: null, PlayoutMode.One, collectionType, CollectionId: null, MultiCollectionId: null, SmartCollectionId: null, RerunCollectionId: null, MediaItemId: mediaItemId, PlaylistId: null, PlaybackOrder.Shuffle, MarathonGroupBy.None, MarathonShuffleGroups: false, MarathonShuffleItems: false, MarathonBatchSize: null, FillWithGroupMode.None, MultipleMode.Count, MultipleCount: null, PlayoutDuration: null, TailMode.None, DiscardToFillAttempts: null, CustomTitle: null, GuideMode.Normal, PreRollFillerId: null, MidRollFillerId: null, PostRollFillerId: null, TailFillerId: null, FallbackFillerId: null, WatermarkIds: [], GraphicsElementIds: [], PreferredAudioLanguageCode: null, PreferredAudioTitle: null, PreferredSubtitleLanguageCode: null, SubtitleMode: null); }