public AdaptiveMode GetAdaptiveMode() { AdaptiveMode result = AdaptiveMode.None; if (Options.OperatingMode == OperatingMode.Automatic) { switch (Options.MidWeekOrWeekend) { case MidWeekOrWeekend.MidWeek: return(Options.MidWeekAdaptiveMode); case MidWeekOrWeekend.Weekend: return(Options.WeekendAdaptiveMode); } } return(result); }
/// <summary> /// Calculates the adapted talk duration for specified talk id /// </summary> /// <param name="itemId">Talk Id</param> /// <returns>Adapted time (or null if time is not adapted)</returns> public TimeSpan?CalculateAdaptedDuration(int itemId) { TalkScheduleItem talk = _scheduleService.GetTalkScheduleItem(itemId); if (talk != null) { EnsureMeetingStartTimeIsSet(talk); if (_meetingStartTimeUtc != null) { AdaptiveMode adaptiveMode = GetAdaptiveMode(); if (adaptiveMode != AdaptiveMode.None) { if (talk.AllowAdaptive) { var talkPlannedStartTime = CalculatePlannedStartTimeOfItem(talk); var talkActualStartTime = DateTime.UtcNow; var deviation = talkActualStartTime - talkPlannedStartTime; if (DeviationWithinRange(deviation)) { if (adaptiveMode == AdaptiveMode.TwoWay || talkPlannedStartTime < talkActualStartTime) { TimeSpan remainingAdaptiveTime = CalculateRemainingAdaptiveTime(talk); double fractionToApplyToThisTalk = talk.GetDurationSeconds() / remainingAdaptiveTime.TotalSeconds; double secondsToApply = deviation.TotalSeconds * fractionToApplyToThisTalk; return(talk.OriginalDuration.Subtract(TimeSpan.FromSeconds(secondsToApply))); } } } } } } return(null); }
public static DurationStringProperties Get(AdaptiveMode adaptiveMode, TalkScheduleItem?talk) { var result = new DurationStringProperties(); if (talk != null) { result.Duration1String = TimeFormatter.FormatTimerDisplayString((int)talk.OriginalDuration.TotalSeconds); result.Duration1Tooltip = Properties.Resources.DURATION_ORIGINAL; if (talk.ModifiedDuration != null) { result.Duration2String = TimeFormatter.FormatTimerDisplayString((int)talk.ModifiedDuration.Value.TotalSeconds); result.Duration2Tooltip = Properties.Resources.DURATION_MODIFIED; var showAdaptedDuration = talk.AdaptedDuration != null && (adaptiveMode == AdaptiveMode.TwoWay || talk.AdaptedDuration.Value < talk.ModifiedDuration.Value); if (showAdaptedDuration) { result.Duration3String = TimeFormatter.FormatTimerDisplayString((int)talk.AdaptedDuration !.Value.TotalSeconds); result.Duration3Tooltip = Properties.Resources.DURATION_ADAPTED; } else { result.Duration3String = string.Empty; } } else if (talk.AdaptedDuration != null) { result.Duration2String = TimeFormatter.FormatTimerDisplayString((int)talk.AdaptedDuration.Value.TotalSeconds); result.Duration2Tooltip = Properties.Resources.DURATION_ADAPTED; result.Duration3String = string.Empty; } else { result.Duration2String = string.Empty; result.Duration3String = string.Empty; } } else { result.Duration1String = string.Empty; result.Duration2String = string.Empty; result.Duration3String = string.Empty; } result.Duration1Colour = DurationDimBrush; result.Duration2Colour = DurationDimBrush; result.Duration3Colour = DurationDimBrush; if (!string.IsNullOrEmpty(result.Duration3String)) { result.Duration3Colour = DurationBrush; } else if (!string.IsNullOrEmpty(result.Duration2String)) { result.Duration2Colour = DurationBrush; } else { result.Duration1Colour = DurationBrush; } return(result); }
public AdaptiveModeItem(AdaptiveMode mode, string name) { Mode = mode; Name = name; }