public AimTimerItemStatus GetStatus() { var now = _dateTimeProvider.GetNow(); var result = new AimTimerItemStatus() { StatusFlags = AimTimerStatusFlags.None, TimeLeft = new TimeSpan(Ticks) - new TimeSpan(AimTimerIntervals.Sum(i => (i.EndDate ?? now).Ticks - i.StartDate.Ticks)) }; var interval = AimTimerIntervals .Where(i => i.StartDate <= now && i.EndDate >= now || i.EndDate == null) .OrderByDescending(i => i.EndDate ?? DateTime.MaxValue) .FirstOrDefault(); if (interval != null && interval.EndDate == null) { result.StatusFlags |= AimTimerStatusFlags.Running; } if (result.TimeLeft.Ticks > 0) { result.StatusFlags |= AimTimerStatusFlags.Active; } result.IsFinished = result.TimeLeft.Ticks <= 0; result.InARow = InARow + (result.IsFinished ? 1 : 0); return(result); }
public void Stop() { var now = _dateTimeProvider.GetNow(); var lastInterval = AimTimerIntervals.SingleOrDefault(i => i.EndDate == null); if (lastInterval == null) { return; } lastInterval.EndDate = now; }
public void Start() { var now = _dateTimeProvider.GetNow(); if (now < StartOfActivityPeriod || now > EndOfActivityPeriod || AimTimerIntervals.Any(i => i.EndDate == null)) { return; } var aimTimerInterval = _aimTimerIntervalFactory.Invoke(this, now, null); AimTimerIntervals.Add(aimTimerInterval); }
public void Init() { Ticks = _aimTimerItemModel.Ticks; foreach (var aimTimerIntervalModel in _aimTimerItemModel.AimTimerIntervals) { var aimTimerInterval = _aimTimerIntervalFactory.Invoke(this, aimTimerIntervalModel.StartDate, aimTimerIntervalModel.EndDate); AimTimerIntervals.Add(aimTimerInterval); } StartOfActivityPeriod = _aimTimerItemModel.StartOfActivityPeriod; EndOfActivityPeriod = _aimTimerItemModel.EndOfActivityPeriod; IsFinished = _aimTimerItemModel.IsFinished; InARow = _aimTimerItemModel.PreviousInARow; }