Esempio n. 1
0
        public DashboardViewModel(
            IActivityRecordsRepository activityRecordsRepository,
            IUserActivityTracker activityTracker,
            IActivityTrackingSettings settings,
            INotificationManager notificationManager)
        {
            _activityRecordsRepository = activityRecordsRepository;
            _activityTracker = activityTracker;
            _settings = settings;
            _notificationManager = notificationManager;

            DisplayName = "Dashboard";
        }
Esempio n. 2
0
        public DashboardViewModel(
            IActivityRecordsRepository activityRecordsRepository,
            IUserActivityTracker activityTracker,
            IActivityTrackingSettings settings,
            INotificationManager notificationManager)
        {
            _activityRecordsRepository = activityRecordsRepository;
            _activityTracker           = activityTracker;
            _settings            = settings;
            _notificationManager = notificationManager;

            DisplayName = "Dashboard";
        }
Esempio n. 3
0
        public UserActivityTracker(
            IActivityRecordsRepository activityRecordsRepository,
            IActivitiesRepository activitiesRepository,
            IActivityTrackingSettings settings,
            IUserInputTracker inputTracker)
        {
            _activityRecordsRepository = activityRecordsRepository;
            _settings = settings;
            _inputTracker = inputTracker;

            List<Activity> activities = activitiesRepository.GetActivities().ToList();
            _defaultActivity = activities[0];
            _breakActivity = activities[1];
            _homeActivity = activities[5];
        }
Esempio n. 4
0
        public UserActivityTracker(
            IActivityRecordsRepository activityRecordsRepository,
            IActivitiesRepository activitiesRepository,
            IActivityTrackingSettings settings,
            IUserInputTracker inputTracker)
        {
            _activityRecordsRepository = activityRecordsRepository;
            _settings     = settings;
            _inputTracker = inputTracker;

            List <Activity> activities = activitiesRepository.GetActivities().ToList();

            _defaultActivity = activities[0];
            _breakActivity   = activities[1];
            _homeActivity    = activities[5];
        }
Esempio n. 5
0
        private static void LogUserActivity(
            IActivityRecordsRepository activityRecordsRepository,
            Action<ActivityRecord> setIdleRecordActivity,
            Activity defaultActivity,
            DateTime userInputStartTime,
            DateTime lastUserInputTime,
            DateTime currentTime,
            IActivityTrackingSettings settings,
            Action onActivityLogUpdated,
            Action<ActivityRecord> onUnknownActivityLogged)
        {
            var activeTime = lastUserInputTime - userInputStartTime;
            var idleTime = currentTime - lastUserInputTime;

            bool logUpdated = false;

            Action<ActivityRecord, Action<ActivityRecord>> addOrUpdateRecord = (record, addOrUpdate) =>
            {
                if (record.Idle)
                {
                    setIdleRecordActivity(record);
                }

                addOrUpdate(record);

                if (record.Idle && record.Activity == null)
                {
                    onUnknownActivityLogged(record);
                }

                logUpdated = true;
            };

            Action<ActivityRecord> addRecord = record => addOrUpdateRecord(record, activityRecordsRepository.Add);
            Action<ActivityRecord> updateRecord = record => addOrUpdateRecord(record, activityRecordsRepository.Update);

            try
            {
                ActivityRecord lastRecord = activityRecordsRepository.GetLastRecord();

                if (lastRecord != null)
                {
                    TimeSpan idleTimeAfterLastRecord = userInputStartTime - lastRecord.EndTime;

                    if (lastRecord.Idle)
                    {
                        // Cannot log this yet. Not enough data.
                        if (activeTime < settings.MinimumActivityDuration && idleTime < settings.MinimumIdleDuration)
                        {
                            return;
                        }

                        if (activeTime < settings.MinimumActivityDuration)
                        {
                            lastRecord.EndTime = currentTime;
                            updateRecord(lastRecord);

                            return;
                        }

                        if (idleTimeAfterLastRecord.TotalMilliseconds > 0)
                        {
                            lastRecord.EndTime = userInputStartTime;
                            updateRecord(lastRecord);
                        }
                    }
                    else
                    {
                        if (idleTimeAfterLastRecord >= settings.MinimumIdleDuration)
                        {
                            var newIdleRecord = new ActivityRecord
                            {
                                StartTime = lastRecord.EndTime,
                                EndTime = userInputStartTime,
                                Idle = true,
                            };

                            addRecord(newIdleRecord);
                        }
                        else
                        {
                            lastRecord.EndTime = lastUserInputTime;
                            updateRecord(lastRecord);
                            activeTime = TimeSpan.Zero;
                        }
                    }
                }

                if (activeTime < settings.MinimumActivityDuration && idleTime < settings.MinimumIdleDuration)
                {
                    return;
                }

                if (activeTime >= settings.MinimumActivityDuration)
                {
                    addRecord(
                        new ActivityRecord
                        {
                            StartTime = userInputStartTime,
                            EndTime = lastUserInputTime,
                            Idle = false,
                            Activity = defaultActivity
                        });
                }
                else if (activeTime != TimeSpan.Zero)
                {
                    idleTime += activeTime;
                    lastUserInputTime = userInputStartTime;
                }

                if (idleTime < settings.MinimumIdleDuration)
                {
                    return;
                }

                var idleRecord = new ActivityRecord
                {
                    StartTime = lastUserInputTime,
                    EndTime = currentTime,
                    Idle = true,
                    Activity = defaultActivity
                };

                addRecord(idleRecord);
            }
            finally
            {
                if (logUpdated)
                {
                    onActivityLogUpdated();
                }
            }
        }
Esempio n. 6
0
        private static void LogUserActivity(
            IActivityRecordsRepository activityRecordsRepository,
            Action <ActivityRecord> setIdleRecordActivity,
            Activity defaultActivity,
            DateTime userInputStartTime,
            DateTime lastUserInputTime,
            DateTime currentTime,
            IActivityTrackingSettings settings,
            Action onActivityLogUpdated,
            Action <ActivityRecord> onUnknownActivityLogged)
        {
            var activeTime = lastUserInputTime - userInputStartTime;
            var idleTime   = currentTime - lastUserInputTime;

            bool logUpdated = false;

            Action <ActivityRecord, Action <ActivityRecord> > addOrUpdateRecord = (record, addOrUpdate) =>
            {
                if (record.Idle)
                {
                    setIdleRecordActivity(record);
                }

                addOrUpdate(record);

                if (record.Idle && record.Activity == null)
                {
                    onUnknownActivityLogged(record);
                }

                logUpdated = true;
            };

            Action <ActivityRecord> addRecord    = record => addOrUpdateRecord(record, activityRecordsRepository.Add);
            Action <ActivityRecord> updateRecord = record => addOrUpdateRecord(record, activityRecordsRepository.Update);

            try
            {
                ActivityRecord lastRecord = activityRecordsRepository.GetLastRecord();

                if (lastRecord != null)
                {
                    TimeSpan idleTimeAfterLastRecord = userInputStartTime - lastRecord.EndTime;

                    if (lastRecord.Idle)
                    {
                        // Cannot log this yet. Not enough data.
                        if (activeTime < settings.MinimumActivityDuration && idleTime < settings.MinimumIdleDuration)
                        {
                            return;
                        }

                        if (activeTime < settings.MinimumActivityDuration)
                        {
                            lastRecord.EndTime = currentTime;
                            updateRecord(lastRecord);

                            return;
                        }

                        if (idleTimeAfterLastRecord.TotalMilliseconds > 0)
                        {
                            lastRecord.EndTime = userInputStartTime;
                            updateRecord(lastRecord);
                        }
                    }
                    else
                    {
                        if (idleTimeAfterLastRecord >= settings.MinimumIdleDuration)
                        {
                            var newIdleRecord = new ActivityRecord
                            {
                                StartTime = lastRecord.EndTime,
                                EndTime   = userInputStartTime,
                                Idle      = true,
                            };

                            addRecord(newIdleRecord);
                        }
                        else
                        {
                            lastRecord.EndTime = lastUserInputTime;
                            updateRecord(lastRecord);
                            activeTime = TimeSpan.Zero;
                        }
                    }
                }

                if (activeTime < settings.MinimumActivityDuration && idleTime < settings.MinimumIdleDuration)
                {
                    return;
                }

                if (activeTime >= settings.MinimumActivityDuration)
                {
                    addRecord(
                        new ActivityRecord
                    {
                        StartTime = userInputStartTime,
                        EndTime   = lastUserInputTime,
                        Idle      = false,
                        Activity  = defaultActivity
                    });
                }
                else if (activeTime != TimeSpan.Zero)
                {
                    idleTime         += activeTime;
                    lastUserInputTime = userInputStartTime;
                }

                if (idleTime < settings.MinimumIdleDuration)
                {
                    return;
                }

                var idleRecord = new ActivityRecord
                {
                    StartTime = lastUserInputTime,
                    EndTime   = currentTime,
                    Idle      = true,
                    Activity  = defaultActivity
                };

                addRecord(idleRecord);
            }
            finally
            {
                if (logUpdated)
                {
                    onActivityLogUpdated();
                }
            }
        }
 public static TimeSpan GetShortIdleDuration(this IActivityTrackingSettings settings)
 {
     return(settings.MinimumIdleDuration - TimeSpan.FromMilliseconds(4));
 }