Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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);
        }
Пример #4
0
 public AdaptiveModeItem(AdaptiveMode mode, string name)
 {
     Mode = mode;
     Name = name;
 }