public void FutureStartIsActive() { var cut = new VCRSchedule { FirstStart = DateTime.UtcNow.AddDays( 1 ), UniqueID = Guid.NewGuid(), Duration = 10, }; Assert.IsTrue( cut.IsActive ); }
/// <summary> /// Legt eine neue Information an. /// </summary> /// <param name="job">Der Auftrag.</param> /// <param name="schedule">Die Aufzeichnung.</param> /// <param name="guide">Ein Eintrag der Programmzeitschrift.</param> /// <param name="profile">Vorgabe für das Geräteprofil.</param> /// <returns>Die Information.</returns> public static JobScheduleInfo Create( VCRJob job, VCRSchedule schedule, ProgramGuideEntry guide, string profile ) { // Process return new JobScheduleInfo { ScheduleIdentifier = (schedule == null) ? null : schedule.UniqueID.Value.ToString( "N" ), JobIdentifier = (job == null) ? null : job.UniqueID.Value.ToString( "N" ), Schedule = EditSchedule.Create( schedule, job, guide ), Job = EditJob.Create( job, guide, profile ), }; }
/// <summary> /// Meldet die Daten zu einer Aufzeichnung. /// </summary> /// <param name="schedule">Die Aufzeichnung.</param> /// <param name="job">Der zugehörige Auftrag.</param> /// <returns></returns> public static InfoSchedule Create( VCRSchedule schedule, VCRJob job ) { // Create return new InfoSchedule { Source = (schedule.Source ?? job.Source).GetUniqueName(), WebId = ServerRuntime.GetUniqueWebId( job, schedule ), StartTime = schedule.FirstStart, RepeatPattern = schedule.Days, Duration = schedule.Duration, Name = schedule.Name, }; }
public void FutureStartWithRepeatIsActive() { foreach (DayOfWeek day in Enum.GetValues( typeof( DayOfWeek ) )) { var cut = new VCRSchedule { FirstStart = DateTime.UtcNow.AddDays( 1 ), Days = VCRSchedule.GetDay( day ), UniqueID = Guid.NewGuid(), Duration = 10, }; cut.LastDay = cut.FirstStart.ToLocalTime().Date.AddDays( 14 ); Assert.IsTrue( cut.IsActive, "{0}", day ); } }
public void FutureStartWithRepeatIsInactive() { for (var delta = 10; delta-- > 0; ) foreach (DayOfWeek day in Enum.GetValues( typeof( DayOfWeek ) )) { var cut = new VCRSchedule { FirstStart = DateTime.UtcNow.AddDays( 1 + 40 * delta ), Days = VCRSchedule.GetDay( day ), UniqueID = Guid.NewGuid(), Duration = 10, }; cut.LastDay = cut.FirstStart.ToLocalTime().Date.AddDays( 5 ); Assert.AreEqual( day != cut.FirstStart.ToLocalTime().AddDays( -1 ).DayOfWeek, cut.IsActive, "{0} {1}", delta, day ); } }
/// <summary> /// Erstellt eine neue Ausnahmebeschreibung. /// </summary> /// <param name="exception">Die Ausnahmedaten.</param> /// <param name="schedule">Die zugehörige Aufzeichnung.</param> private PlanException( VCRScheduleException exception, VCRSchedule schedule ) { // Remember ExceptionDurationDelta = exception.Duration.GetValueOrDefault( schedule.Duration ) - schedule.Duration; ExceptionDate = new DateTime( exception.When.Date.Ticks, DateTimeKind.Utc ); ExceptionStartShift = exception.ShiftTime.GetValueOrDefault( 0 ); // Start berechnen PlannedStart = (new DateTime( exception.When.Date.Ticks, DateTimeKind.Local ) + schedule.FirstStart.ToLocalTime().TimeOfDay).ToUniversalTime(); PlannedDuration = schedule.Duration; }
/// <summary> /// Erstellt eine neue Ausnahmebeschreibung. /// </summary> /// <param name="exception">Die Ausnahmedaten.</param> /// <param name="schedule">Die zugehörige Aufzeichnung.</param> /// <returns>Die neue Ausnahmebeschreibung.</returns> public static PlanException Create( VCRScheduleException exception, VCRSchedule schedule ) { // Validate if (exception == null) throw new ArgumentNullException( nameof( exception ) ); if (schedule == null) throw new ArgumentNullException( nameof( schedule ) ); // Forward return new PlanException( exception, schedule ); }
/// <summary> /// Erstellt die Beschreibung der Aufzeichnung für die persistente Ablage. /// </summary> /// <param name="scheduleIdentifier">Die eindeutige Kennung der Aufzeichnung.</param> /// <param name="job">Der zugehörige Auftrag.</param> /// <returns>Die gewünschte Beschreibung.</returns> public VCRSchedule CreateSchedule( Guid scheduleIdentifier, VCRJob job ) { // Create var schedule = new VCRSchedule { UniqueID = scheduleIdentifier, FirstStart = FirstStart, Days = RepeatPattern, Duration = Duration, LastDay = LastDay, Name = Name, }; // See if we have a source var sourceName = Source; if (string.IsNullOrEmpty( sourceName )) return schedule; // See if there is a profile var jobSource = job.Source; if (jobSource == null) return schedule; // Locate the source schedule.Source = ServerRuntime.VCRServer.FindSource( jobSource.ProfileName, sourceName ); if (schedule.Source == null) return schedule; // Configure streams schedule.Streams = new StreamSelection(); // Set all - oder of audio settings is relevant, dolby MUST come last schedule.Streams.SetUsesAllAudio( AllLanguages ); schedule.Streams.SetUsesDolbyAudio( DolbyDigital ); schedule.Streams.SetUsesSubtitles( DVBSubtitles ); schedule.Streams.SetUsesVideotext( Videotext ); schedule.Streams.ProgramGuide = true; // Report return schedule; }
/// <summary> /// Erstellt eine Beschreibung zu dieser Aufzeichnung. /// </summary> /// <param name="schedule">Eine Aufzeichnung.</param> /// <param name="job">Der bereits vorhandene Auftrag.</param> /// <param name="guide">Ein Eintrag aus der Programmzeitschrift.</param> /// <returns>Die gewünschte Beschreibung.</returns> public static EditSchedule Create( VCRSchedule schedule, VCRJob job, ProgramGuideEntry guide ) { // None if (schedule == null) { // No hope if (guide == null) return null; // Calculate var start = guide.StartTime - TimeSpan.FromMinutes( UserProfileSettings.EPGPreTime ); var duration = checked( (int) (UserProfileSettings.EPGPreTime + (guide.Duration / 60) + UserProfileSettings.EPGPostTime) ); // Partial - we have a brand new job which is pre-initialized with the source if (job == null) return new EditSchedule { FirstStart = start, Duration = duration }; // Full monty - we have to overwrite the jobs settings since we are not the first schedule return new EditSchedule { Source = ServerRuntime.VCRServer.GetUniqueName( new SourceSelection { ProfileName = job.Source.ProfileName, Source = guide.Source } ), DVBSubtitles = UserProfileSettings.UseSubTitles, DolbyDigital = UserProfileSettings.UseAC3, AllLanguages = UserProfileSettings.UseMP2, Videotext = UserProfileSettings.UseTTX, Name = guide.Name.MakeValid(), Duration = duration, FirstStart = start, }; } // Consolidate exceptions schedule.CleanupExceptions(); // Optionen ermitteln var streams = schedule.Streams; var sourceName = ServerRuntime.VCRServer.GetUniqueName( schedule.Source ); // Create return new EditSchedule { Exceptions = schedule.Exceptions.Select( exception => PlanException.Create( exception, schedule ) ).ToArray(), LastDay = schedule.LastDay.GetValueOrDefault( VCRSchedule.MaxMovableDay ), DolbyDigital = streams.GetUsesDolbyAudio(), DVBSubtitles = streams.GetUsesSubtitles(), AllLanguages = streams.GetUsesAllAudio(), Videotext = streams.GetUsesVideotext(), FirstStart = schedule.FirstStart, RepeatPattern = schedule.Days, Duration = schedule.Duration, Name = schedule.Name, Source = sourceName, }; }
/// <summary> /// Ermittelt eine Referenz für eine bestimmte Aufzeichung in einem Auftrag, so dass diese /// auch in einer URL verwendet werden kann. /// </summary> /// <param name="job">Ein Auftrag.</param> /// <param name="schedule">Eine Aufzeichnung.</param> /// <returns>Die eindeutige Referenz.</returns> public static string GetUniqueWebId( VCRJob job, VCRSchedule schedule ) { // Forward if (job == null) return "*"; else if (schedule == null) return string.Format( "*{0:N}", job.UniqueID.Value ); else return GetUniqueWebId( job.UniqueID.Value, schedule.UniqueID.Value ); }