跳到主要内容

github/tai

公开

Tai · Windows 软件与网站使用时长统计。上游 Planshit/Tai 的源码镜像,非灵栈原创;MIT 许可。来源:https://github.com/Planshit/Tai 。本次为手动同步,暂不提供安装包。

提交记录
修改Core/Servicers/Instances/DateTimeObserver.cs+22 −12看文件
@@ -1,53 +1,63 @@
11using Core.Event;
2新增:using Core.Librarys;
23using Core.Servicers.Interfaces;
34using System;
45using System.Collections.Generic;
56using System.Diagnostics;
67using System.Linq;
78using System.Text;
9新增:using System.Threading;
810using System.Threading.Tasks;
9删除:using System.Windows.Threading;
11新增:using System.Timers;
12新增:using Timer = System.Timers.Timer;
1013
1114namespace Core.Servicers.Instances
1215{
1316 public class DateTimeObserver : IDateTimeObserver
1417 {
1518 public event DateTimeObserverEventHandler OnDateTimeChanging;
16删除: private DispatcherTimer timer;
19新增: private Timer timer;
1720
1821 public void Start()
1922 {
23新增: Stop();
2024 SetTimer();
2125 }
2226
2327 private void SetTimer()
2428 {
25删除: timer = new DispatcherTimer();
26删除: timer.Tick += Timer_Tick;
29新增: timer = new Timer();
30新增: timer.Elapsed += Timer_Tick;
2731 DateTime now = DateTime.Now;
2832 DateTime updateTime = new DateTime(now.Year, now.Month, now.Day, now.Hour, 59, 59);
29删除: int diffMilliseconds = (int)updateTime.Subtract(now).TotalMilliseconds;
33新增: double diffMilliseconds = updateTime.Subtract(now).TotalMilliseconds;
3034 if (diffMilliseconds < 0)
3135 {
3236 diffMilliseconds = 1;
3337 }
34删除: timer.Interval = new TimeSpan(0, 0, 0, 0, diffMilliseconds);
38新增: timer.Interval = diffMilliseconds;
3539 timer.Start();
40新增: Logger.Info("datetime observer start,interval(s):" + updateTime.Subtract(now).TotalSeconds);
3641 }
3742
38删除: private async void Timer_Tick(object sender, EventArgs e)
43新增: private void Timer_Tick(object sender, EventArgs e)
3944 {
4045 timer.Stop();
4146
4247 DateTime nowTime = DateTime.Now;
43删除:
4448 OnDateTimeChanging?.Invoke(this, nowTime);
4549
46删除: await Task.Run(async () =>
50新增: Thread.Sleep(2000);
51新增: SetTimer();
52新增: }
53新增:
54新增: public void Stop()
55新增: {
56新增: if (timer != null && timer.Enabled)
4757 {
48删除: await Task.Delay(1000);
49删除: SetTimer();
50删除: });
58新增: timer.Stop();
59新增: timer.Dispose();
60新增: }
5161 }
5262 }
5363}
修改Core/Servicers/Instances/Main.cs+30 −11看文件
@@ -38,6 +38,7 @@ namespace Core.Servicers.Instances
3838 "OpenWith",
3939 "Updater",
4040 "LockApp",
41新增: "dwm",
4142 };
4243
4344 /// <summary>
@@ -155,18 +156,27 @@ namespace Core.Servicers.Instances
155156 config = appConfig.GetConfig();
156157 UpdateConfigIgnoreProcess();
157158
158删除: // 日期变化观察
159删除: dateTimeObserver.Start();
160159
161删除: // 启动进程观察
162删除: observer.Start();
163160
164161 // 启动睡眠监测
165162 sleepdiscover.Start();
163新增: Start();
166164
167165 OnStarted?.Invoke(this, EventArgs.Empty);
168166 }
167新增: public void Start()
168新增: {
169新增: activeStartTime = DateTime.Now;
170新增: activeProcess = null;
169171
172新增: dateTimeObserver.Start();
173新增: observer.Start();
174新增: }
175新增: public void Stop()
176新增: {
177新增: dateTimeObserver.Stop();
178新增: observer.Stop();
179新增: }
170180 public void Exit()
171181 {
172182 observer?.Stop();
@@ -199,13 +209,20 @@ namespace Core.Servicers.Instances
199209 Logger.Info($"[{sleepStatus}] process:{activeProcess},start:{activeStartTime}");
200210 if (sleepStatus == SleepStatus.Sleep)
201211 {
212新增: // 进入睡眠状态
213新增: Debug.WriteLine("进入睡眠状态");
214新增:
215新增: // 停止服务
216新增: Stop();
217新增:
202218 // 更新时间
203219 UpdateTime();
204220 }
205删除: else if (sleepStatus == SleepStatus.Wake)
221新增: else
206222 {
207删除: // 唤醒时重置计时开始时间
208删除: activeStartTime = DateTime.Now;
223新增: // 从睡眠状态唤醒
224新增: Debug.WriteLine("从睡眠状态唤醒");
225新增: Start();
209226 }
210227 }
211228
@@ -339,7 +356,9 @@ namespace Core.Servicers.Instances
339356
340357 private void UpdateTime()
341358 {
342删除: if (!string.IsNullOrEmpty(activeProcess))
359新增: string app = activeProcess != null ? activeProcess.ToString() : "";
360新增:
361新增: if (!string.IsNullOrEmpty(app))
343362 {
344363 var time = activeStartTime;
345364
@@ -358,12 +377,12 @@ namespace Core.Servicers.Instances
358377 {
359378 Task.Run(() =>
360379 {
361删除: data.Set(activeProcess, seconds, time);
380新增: data.Set(app, seconds, time);
362381
363382 // 关联进程更新
364删除: HandleLinks(activeProcess, seconds, time);
383新增: HandleLinks(app, seconds, time);
365384
366删除: Logger.Info("status:" + sleepStatus + ",process:" + activeProcess + ",seconds:" + seconds + ",start:" + activeStartTime.ToString() + ",end:" + DateTime.Now.ToString() + ",time:" + time.ToString());
385新增: Logger.Info("status:" + sleepStatus + ",process:" + app + ",seconds:" + seconds + ",start:" + activeStartTime.ToString() + ",end:" + DateTime.Now.ToString() + ",time:" + time.ToString());
367386 });
368387 }
369388
修改Core/Servicers/Instances/Sleepdiscover.cs+49 −16看文件
@@ -60,9 +60,9 @@ namespace Core.Servicers.Instances
6060 {
6161 timer = new DispatcherTimer();
6262 timer.Interval = new TimeSpan(0, 5, 0);
63删除: //#if DEBUG
64删除: // timer.Interval = new TimeSpan(0, 0, 10);
65删除: //#endif
63新增:#if DEBUG
64新增: //timer.Interval = new TimeSpan(0, 0, 10);
65新增:#endif
6666 timer.Tick += Timer_Tick;
6767 timer.Start();
6868
@@ -158,7 +158,6 @@ namespace Core.Servicers.Instances
158158 /// <returns>睡眠返回true</returns>
159159 private async Task<bool> IsSleepAsync()
160160 {
161删除: // 1.先判断鼠标是否有过移动
162161 Point point = Win32API.GetCursorPosition();
163162
164163 if (point.X + point.Y == 0)
@@ -172,21 +171,13 @@ namespace Core.Servicers.Instances
172171 }
173172 }
174173
175删除: if (lastPoint.ToString() != point.ToString())
174新增: bool isActive = await IsActiveAsync();
175新增: if (isActive)
176176 {
177删除: // 鼠标在移动,更新坐标
178删除: lastPoint = point;
179177 return false;
180178 }
181179
182删除: // 2.判断是否键盘超时
183删除: if (!IsKeyboardOuttime())
184删除: {
185删除: // 十分钟内有键盘操作
186删除: return false;
187删除: }
188删除:
189删除: // 3.鼠标和键盘都没有操作时判断是否在播放声音
180新增: // 鼠标和键盘都没有操作时判断是否在播放声音
190181
191182 // 持续30秒检测当前是否在播放声音
192183 bool isPlaySound = await IsPlaySoundAsync();
@@ -279,6 +270,10 @@ namespace Core.Servicers.Instances
279270
280271 }
281272
273新增: /// <summary>
274新增: /// 指示当前是否在播放声音(持续30秒检测)
275新增: /// </summary>
276新增: /// <returns>播放返回true</returns>
282277 private async Task<bool> IsPlaySoundAsync()
283278 {
284279 bool result = false;
@@ -307,6 +302,42 @@ namespace Core.Servicers.Instances
307302 return result;
308303 }
309304
305新增: /// <summary>
306新增: /// 指示当前是否处于活跃状态(持续30秒检测)
307新增: /// </summary>
308新增: /// <returns>活跃返回true</returns>
309新增: private async Task<bool> IsActiveAsync()
310新增: {
311新增: bool result = false;
312新增:
313新增: await Task.Run(() =>
314新增: {
315新增: // 持续30秒
316新增: int time = 30;
317新增:
318新增: while (time > 0)
319新增: {
320新增: Point point = Win32API.GetCursorPosition();
321新增: bool isMouseMove = lastPoint.ToString() != point.ToString();
322新增: bool isKeyboardActive = !IsKeyboardOuttime();
323新增:
324新增: if (isMouseMove || isKeyboardActive)
325新增: {
326新增: lastPoint = Win32API.GetCursorPosition();
327新增: result = true;
328新增: break;
329新增: }
330新增: else
331新增: {
332新增: time--;
333新增: Debug.WriteLine(time);
334新增: Thread.Sleep(1000);
335新增: }
336新增: }
337新增: });
338新增: return result;
339新增: }
340新增:
310341 /// <summary>
311342 /// 指示是否键盘行为超时(超过10分钟)
312343 /// </summary>
@@ -314,7 +345,9 @@ namespace Core.Servicers.Instances
314345 private bool IsKeyboardOuttime()
315346 {
316347 TimeSpan timeSpan = DateTime.Now - pressKeyboardLastTime;
317删除:
348新增:#if DEBUG
349新增: //return timeSpan.TotalSeconds >= 10;
350新增:#endif
318351 return timeSpan.TotalMinutes >= 10;
319352 }
320353 }
修改Core/Servicers/Interfaces/IDateTimeObserver.cs+4 −0看文件
@@ -17,6 +17,10 @@ namespace Core.Servicers.Interfaces
1717 /// </summary>
1818 void Start();
1919 /// <summary>
20新增: /// 停止
21新增: /// </summary>
22新增: void Stop();
23新增: /// <summary>
2024 /// 日期即将变化时发生(前1秒)
2125 /// </summary>
2226 event DateTimeObserverEventHandler OnDateTimeChanging;
修改Core/Servicers/Interfaces/IMain.cs+9 −1看文件
@@ -12,13 +12,21 @@ namespace Core.Servicers.Interfaces
1212 public interface IMain
1313 {
1414 /// <summary>
15删除: /// 启动服务
15新增: /// 运行服务(仅首次启动调用)
1616 /// </summary>
1717 void Run();
1818 /// <summary>
1919 /// 退出服务
2020 /// </summary>
2121 void Exit();
22新增: /// <summary>
23新增: /// 启动服务
24新增: /// </summary>
25新增: void Start();
26新增: /// <summary>
27新增: /// 停止服务
28新增: /// </summary>
29新增: void Stop();
2230
2331 /// <summary>
2432 /// 更新某个进程时间时发生