Ejemplo n.º 1
0
        private ActivityPeriod FindMergablePeriod(ActivityPeriod period, SortedSet <ActivityPeriod> candidates)
        {
            if (candidates.Count == 0)
            {
                return(null);
            }
            if (period is ActivePeriod)
            {
                foreach (var candidatePeriod in candidates)
                {
                    if (candidatePeriod.IsCloseAndSameType(period, policies.IdleTimeout))
                    {
                        return(candidatePeriod);
                    }
                }
            }
            if (period is IdlePeriod)
            {
                var candidatePeriod = candidates.Last();
                if (candidatePeriod.IsCloseAndSameType(period, policies.IdleTimeout))
                {
                    return(candidatePeriod);
                }
            }

            return(null);
        }
Ejemplo n.º 2
0
 public bool Overlap(ActivityPeriod other)
 {
     if (this.Start >= other.End ||
         this.End <= other.Start)
         return false;
     return true;
 }
Ejemplo n.º 3
0
        private SortedSet <ActivityPeriod> GetMergeCandidates(ActivityPeriod currentPeriod)
        {
            var mergeTimeWindowStart = currentPeriod.Start - policies.IdleTimeout;
            var candidates           = periodStorage.GetPeriodsAfter(mergeTimeWindowStart)
                                       .Where(period => !period.Equals(currentPeriod));

            return(new SortedSet <ActivityPeriod>(candidates));
        }
Ejemplo n.º 4
0
        public ActivityPeriod AddPeriod(ActivityPeriod activityPeriod)
        {
            log.Debug("add period " + activityPeriod);
            var mergedPeriod = Merge(activityPeriod);

            NotifyUserActivityListener(activityPeriod, mergedPeriod);
            return(mergedPeriod);
        }
Ejemplo n.º 5
0
 public override void Add(ActivityPeriod activityPeriod)
 {
     log.Debug("add period " + activityPeriod);
     using (var command = conn.CreateCommand())
     {
         command.CommandText = "INSERT INTO Periods (start, end, type) VALUES (:start, :end, :type)";
         command.Parameters.AddWithValue("start", activityPeriod.Start);
         command.Parameters.AddWithValue("end", activityPeriod.End);
         command.Parameters.AddWithValue("type", activityPeriod is ActivePeriod ? "A" : "I");
         var rowsAffected = command.ExecuteNonQuery();
         log.Debug("rows affected " + rowsAffected);
     }
 }
Ejemplo n.º 6
0
 public override void Remove(ActivityPeriod activityPeriod)
 {
     log.Debug("remove period " + activityPeriod);
     using (var command = conn.CreateCommand())
     {
         command.CommandText = "DELETE FROM Periods WHERE start = :start AND end = :end AND type = :type";
         command.Parameters.AddWithValue("start", activityPeriod.Start);
         command.Parameters.AddWithValue("end", activityPeriod.End);
         command.Parameters.AddWithValue("type", activityPeriod is ActivePeriod ? "A" : "I");
         var rowsAffected = command.ExecuteNonQuery();
         log.Debug("rows affected " + rowsAffected);
     }
 }
Ejemplo n.º 7
0
        private void UpdateStats(StatsReporter reporter)
        {
            UpdateLabels(
                (int)reporter.GetTotalActiveToday(DateTime.Now.Date).Round(100.ms()).TotalSeconds,
                (int)reporter.GetLastInactiveTimespan().Round(100.ms()).TotalSeconds
                );

            ActivityPeriod currentActivityPeriod = reporter.GetCurrentLogicalPeriod();

            UpdateNotifyIcon(currentActivityPeriod is ActivePeriod, (int)currentActivityPeriod.Length.TotalMinutes);
            UpdateAlldayIcon(reporter.GetTotalActiveToday(DateTime.Now.Date));
            UpdateHistoryWindow();
        }
Ejemplo n.º 8
0
        public bool IsCloseAndSameType(ActivityPeriod activityPeriod, TimeSpan closenessPeriod)
        {
            if (GetType() != activityPeriod.GetType())
            {
                return false;
            }

            if (((End - activityPeriod.Start).Duration() <= closenessPeriod) ||
                ((Start - activityPeriod.End).Duration() <= closenessPeriod))
            {
                return true;
            }
            return false;
        }
Ejemplo n.º 9
0
        public void Check()
        {
            var now = clock.CurrentTime();

            if (lastInputTick == null || IsAfterWakeUp())
            {
                SaveLastInputTick(now);
                return;
            }

            var wasActive = lastInputTick != probe.GetLastInputTick();

            log.Debug("period was " + (wasActive ? "active" : "idle"));
            activityPeriodsListener.PeriodPassed(ActivityPeriod.Create(wasActive, now - TimeSpanSinceLastCheck(), now));

            SaveLastInputTick(now);
        }
Ejemplo n.º 10
0
        private void NotifyUserActivityListener(ActivityPeriod activityPeriod, ActivityPeriod mergedPeriod)
        {
            if (userActivityListner == null)
            {
                log.Debug("listener is null");
                return;
            }

            if (activityPeriod is IdlePeriod)
            {
                log.Debug("period is idle");
                return;
            }

            var periodMerged = !mergedPeriod.Equals(activityPeriod);

            if (periodMerged)
            {
                log.Debug("period merged");
                return;
            }

            var periodBefore = periodStorage.GetPeriodBefore(activityPeriod.Start);

            if (!(periodBefore is IdlePeriod))
            {
                log.Debug("period before was not idle");
                return;
            }

            if (periodBefore.Length < policies.IdleTimeout)
            {
                log.Debug("period before too short " + periodBefore.Length + " expected " + policies.IdleTimeout);
                return;
            }

            if (!periodBefore.IsDirectlyBefore(activityPeriod))
            {
                log.Debug("period before is not directly before, before " + periodBefore + ", added" + activityPeriod);
                return;
            }

            userActivityListner.NotifyActiveAfterBreak(periodBefore.Length);
        }
Ejemplo n.º 11
0
        private ActivityPeriod Merge(ActivityPeriod activityPeriod)
        {
            ActivityPeriod mergablePeriod = FindMergablePeriod(activityPeriod, GetMergeCandidates(activityPeriod));

            if (mergablePeriod != null)
            {
                var merged = activityPeriod.Merge(mergablePeriod);
                log.Debug("merged " + merged);
                periodStorage.ExecuteInTransaction(() =>
                {
                    periodStorage.RemoveFromTimePeriod(merged);
                    periodStorage.Add(merged);
                });
                return(merged);
            }

            periodStorage.Add(activityPeriod);
            return(activityPeriod);
        }
Ejemplo n.º 12
0
 public virtual ActivityPeriod Merge(ActivityPeriod aActivityPeriod)
 {
     var start = Start < aActivityPeriod.Start ? Start : aActivityPeriod.Start;
     var end = End > aActivityPeriod.End ? End : aActivityPeriod.End;
     return new ActivityPeriod(start, end);
 }
Ejemplo n.º 13
0
 public override ActivityPeriod Merge(ActivityPeriod activityPeriod)
 {
     ActivityPeriod merged = base.Merge(activityPeriod);
     return new IdlePeriod(merged.Start, merged.End);
 }
Ejemplo n.º 14
0
 public override void Remove(ActivityPeriod activityPeriod)
 {
     periods.Remove(activityPeriod);
 }
Ejemplo n.º 15
0
 public override void Add(ActivityPeriod activityPeriod)
 {
     periods.Add(activityPeriod);
 }
Ejemplo n.º 16
0
 public abstract void Remove(ActivityPeriod activityPeriod);
Ejemplo n.º 17
0
 public abstract void Add(ActivityPeriod activityPeriod);
Ejemplo n.º 18
0
 private bool IsLastIdlePeriodTreatedAsActive(ActivityPeriod last)
 {
     return(last is IdlePeriod && last.Length <= policies.IdleTimeout);
 }
Ejemplo n.º 19
0
 public void PeriodPassed(ActivityPeriod activityPeriod)
 {
     AddPeriod(activityPeriod);
 }