private void SetIdleRecordActivity(ActivityRecord activityRecord) { if (activityRecord.StartTime.Date != activityRecord.EndTime.Date) { activityRecord.Activity = _homeActivity; } else if (activityRecord.Duration < _settings.MaximumBreakDuration) { activityRecord.Activity = _breakActivity; } else { activityRecord.Activity = null; } }
private void OnUnknownActivityLogged(ActivityRecord idleActivity) { if (!idleActivity.Idle) { _log.Warn("Unknown activity notification posted for non idle activity."); return; } if (UnknownActivityLogged != null) { UnknownActivityLogged(this, new ActivityRecordEventArgs(idleActivity)); } }
/// <summary> /// Initializes a new instance of the <see cref="T:System.EventArgs"/> class. /// </summary> public ActivityRecordEventArgs(ActivityRecord activityRecord) { ActivityRecord = activityRecord; }
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 void AddRecord(ActivityRecord record) { if (_activityRecords.Any(r => r.ActivityRecordId == record.ActivityRecordId)) { return; } _activityRecords.Add(record); }