跳到主要内容

github/tai

公开

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

提交记录
修改Core/Servicers/Instances/Data.cs+115 −68看文件
@@ -19,103 +19,150 @@ namespace Core.Servicers.Instances
1919 public class Data : IData
2020 {
2121 private readonly IAppData appData;
22新增: private readonly object setLock = new object();
2223 public Data(IAppData appData)
2324 {
2425 this.appData = appData;
2526 }
2627 public void Set(string processName, int seconds, DateTime? time_ = null)
2728 {
29新增: lock (setLock)
30新增: {
31新增: DateTime time = !time_.HasValue ? DateTime.Now : time_.Value;
32新增: var today = time.Date;
33新增:
34新增: if (string.IsNullOrEmpty(processName) || seconds <= 0)
35新增: {
36新增: return;
37新增: }
38新增:
39新增: AppModel app = appData.GetApp(processName);
40新增:
41新增: if (app == null)
42新增: {
43新增: return;
44新增: }
45新增: // 统计app累计使用时长
46新增: app.TotalTime += seconds;
47新增: appData.UpdateApp(app);
48新增:
49新增: using (var db = new TaiDbContext())
50新增: {
51新增: using (var transcation = db.Database.BeginTransaction())
52新增: {
53新增: try
54新增: {
55新增: var res = db.DailyLog.SingleOrDefault(m => m.Date == today && m.AppModelID == app.ID);
56新增: if (res == null)
57新增: {
58新增: //数据库中没有时则创建
59新增: db.DailyLog.Add(new Models.DailyLogModel()
60新增: {
61新增: Date = today,
62新增: AppModelID = app.ID,
63新增: Time = seconds,
64新增: });
65新增: }
66新增: else
67新增: {
68新增: res.Time += seconds;
69新增: }
70新增:
71新增: db.SaveChanges();
72新增: transcation.Commit();
73新增: }
74新增: catch (Exception e)
75新增: {
76新增: Logger.Error(e.ToString());
77新增: transcation.Rollback();
78新增: }
79新增: }
80新增: }
81新增:
82新增: SetHoursTime(app, seconds, time);
83新增: }
84新增: }
2885
29删除: DateTime time = !time_.HasValue ? DateTime.Now : time_.Value;
30删除: var today = time.Date;
3186
87新增: private void SetHoursTime(AppModel app, int seconds, DateTime time)
88新增: {
89新增: string processName = app.Name;
3290 // 当前时段
33删除: var nowtime = new DateTime(today.Year, today.Month, today.Day, time.Hour, 0, 0);
91新增: var nowtime = new DateTime(time.Year, time.Month, time.Day, time.Hour, 0, 0);
3492
35删除: if (string.IsNullOrEmpty(processName) || seconds <= 0)
93新增: if (time.Minute == 59 && time.Second == 59)
3694 {
95新增: SetHoursTime(app, seconds, nowtime.AddHours(1));
3796 return;
3897 }
3998
40删除: AppModel app = appData.GetApp(processName);
41删除:
42删除: if (app == null)
99新增: if (seconds <= 0 || time > DateTime.Now)
43100 {
44101 return;
45102 }
46103
47删除:
104新增:
48105
49106 using (var db = new TaiDbContext())
50107 {
51删除: var res = db.DailyLog.SingleOrDefault(m => m.Date == today && m.AppModelID == app.ID);
52删除: if (res == null)
53删除: {
54删除: //数据库中没有时则创建
55删除: db.DailyLog.Add(new Models.DailyLogModel()
56删除: {
57删除: Date = today,
58删除: AppModelID = app.ID,
59删除: Time = seconds,
60删除: });
61删除: }
62删除: else
63删除: {
64删除: res.Time += seconds;
65删除: }
66删除:
67删除: // 分时段记录数据
68删除:
69删除: var hourslog = db.HoursLog.SingleOrDefault(
70删除: m =>
71删除: m.DataTime == nowtime
72删除: && m.AppModelID == app.ID
73删除: );
74删除: if (hourslog == null)
75删除: {
76删除: // 没有时创建
77删除:
78删除: if (seconds > 3600)
79删除: {
80删除: int overflowSeconds = seconds - 3600;
81删除: Set(processName, overflowSeconds, nowtime.AddHours(1));
82删除:
83删除: seconds = 3600;
84删除: }
85删除:
86删除: db.HoursLog.Add(new Models.HoursLogModel()
87删除: {
88删除: DataTime = nowtime,
89删除: AppModelID = app.ID,
90删除: Time = seconds
91删除: });
92删除: }
93删除: else
108新增: using (var transcation = db.Database.BeginTransaction())
94109 {
95删除: if (hourslog.Time + seconds > 3600)
110新增: try
96111 {
97删除: hourslog.Time = 3600;
98删除:
99删除: int overflowSeconds = hourslog.Time + seconds - 3600;
100删除:
101删除: Set(processName, overflowSeconds, nowtime.AddHours(1));
112新增: var hourslog = db.HoursLog.SingleOrDefault(
113新增: m =>
114新增: m.DataTime == nowtime
115新增: && m.AppModelID == app.ID
116新增: );
117新增:
118新增: int overflowSeconds = 0;
119新增:
120新增: if (hourslog == null)
121新增: {
122新增: // 没有时创建
123新增:
124新增: if (seconds > 3600)
125新增: {
126新增: overflowSeconds = seconds - 3600;
127新增: seconds = 3600;
128新增: }
129新增:
130新增: db.HoursLog.Add(new Models.HoursLogModel()
131新增: {
132新增: DataTime = nowtime,
133新增: AppModelID = app.ID,
134新增: Time = seconds
135新增: });
136新增: }
137新增: else
138新增: {
139新增: if (hourslog.Time + seconds > 3600)
140新增: {
141新增: hourslog.Time = 3600;
142新增: overflowSeconds = hourslog.Time + seconds - 3600;
143新增: }
144新增: else
145新增: {
146新增: hourslog.Time += seconds;
147新增: }
148新增: }
149新增:
150新增: db.SaveChanges();
151新增: transcation.Commit();
152新增:
153新增: if (overflowSeconds > 0)
154新增: {
155新增: SetHoursTime(app, overflowSeconds, nowtime.AddHours(1));
156新增: }
102157 }
103删除: else
158新增: catch (Exception e)
104159 {
105删除: hourslog.Time += seconds;
160新增: Logger.Error(e.ToString());
161新增: transcation.Rollback();
106162 }
107163 }
108删除:
109删除: // 统计使用时长
110删除: app.TotalTime += seconds;
111删除:
112删除: appData.UpdateApp(app);
113删除:
114删除: db.SaveChanges();
115164 }
116165 }
117删除:
118删除:
119166 public List<DailyLogModel> GetTodaylogList()
120167 {
121168