/
TimeTracker.cs
132 lines (115 loc) · 3.93 KB
/
TimeTracker.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Threading;
using Extension.Interuptions;
using Extension.Records;
using Microsoft.Win32;
namespace Extension
{
class TimeTracker
{
private UserKeyBoard keyBoard;
private UserMouse mouse;
protected internal DispatcherTimer timer;
protected internal DispatcherTimer saveTime;
private Record record;
private RecordToFile recordToFile;
private bool isActive = true;
UserBoxCintrolOfTimeSpeed userBoxControl;
public TimeTracker(UserBoxCintrolOfTimeSpeed userBox)
{
keyBoard = new UserKeyBoard();
mouse = new UserMouse();
mouse.MouseMoved += Mouse_MouseMoved;
keyBoard.KeyBoardPressed += KeyBoard_KeyBoardPressed;
SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
recordToFile = new RecordToFile("testRecord.txt");
record = recordToFile.CurentRecord;
userBoxControl = userBox;
StartSaveTimer();
DisplayTimer();
}
private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
if(e.Mode == PowerModes.Suspend)
{
isActive = false;
}
else if(e.Mode == PowerModes.Resume)
{
isActive = true;
}
}
private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
if (e.Reason == SessionSwitchReason.SessionLock)
isActive = false;
if (e.Reason == SessionSwitchReason.SessionLogoff)
isActive = false;
if (e.Reason == SessionSwitchReason.SessionLogon)
isActive = true;
if (e.Reason == SessionSwitchReason.SessionUnlock)
isActive = true;
if (e.Reason == SessionSwitchReason.RemoteConnect)
isActive = true;
if (e.Reason == SessionSwitchReason.RemoteDisconnect)
isActive = false;
if (e.Reason == SessionSwitchReason.ConsoleConnect)
isActive = true;
if (e.Reason == SessionSwitchReason.ConsoleDisconnect)
isActive = false;
}
private void KeyBoard_KeyBoardPressed(object sender, EventArgs e)
{
if(isActive)
{
record.DateTime = DateTime.Now;
}
}
private void Mouse_MouseMoved(object sender, EventArgs e)
{
if (isActive)
{
record.DateTime = DateTime.Now;
}
}
private void StartSaveTimer()
{
saveTime = new DispatcherTimer
{
Interval = new TimeSpan(0, 0, 1, 0, 0)
};
saveTime.Tick += SaveTime_Tick;
saveTime.Start();
}
private void SaveTime_Tick(object sender, EventArgs e)
{
var date = record.BeginDateTime;
record.TimeSpended = record.CurrentTimeSpended();
if (RecordToFile.GetKeyIfExists(date))
{
RecordToFile.Records[date.Date] = record;
}
else
{
RecordToFile.Records.Add(date.Date, record);
}
recordToFile.WriteRecords();
}
public void DisplayTimer()
{
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 0, 1, 0);
timer.Start();
timer.Tick += Timer_Tick;
}
private void Timer_Tick(object sender, EventArgs e)
{
userBoxControl.valTime.Content = record.CurrentTimeSpended();
}
}
}