跳到主要内容

github/tai

公开

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

提交记录
修改Core/Models/Config/BehaviorModel.cs+1 −1看文件
@@ -11,7 +11,7 @@ namespace Core.Models.Config
1111 /// </summary>
1212 public class BehaviorModel
1313 {
14删除: [Config(IsCanImportExport = true, Name = "忽略进程", Description = "忽略的进程将不进行时长统计", Group = "忽略进程", Placeholder = "进程名,不需要输入.exe")]
14新增: [Config(IsCanImportExport = true, Name = "忽略应用", Description = "忽略的应用将不进行时长统计", Group = "忽略应用", Placeholder = "应用进程名称,不需要输入.exe。支持正则表达式")]
1515 /// <summary>
1616 /// 忽略的进程列表
1717 /// </summary>
修改Core/Servicers/Instances/Main.cs+74 −24看文件
@@ -11,6 +11,7 @@ using System.Data.Entity;
1111using System.Diagnostics;
1212using System.Linq;
1313using System.Text;
14新增:using System.Text.RegularExpressions;
1415using System.Threading.Tasks;
1516using System.Timers;
1617using System.Windows.Threading;
@@ -27,7 +28,7 @@ namespace Core.Servicers.Instances
2728 private readonly IAppData appData;
2829 private readonly ICategorys categories;
2930 // 忽略的进程
30删除: private readonly string[] IgnoreProcess = new string[] {
31新增: private readonly string[] DefaultIgnoreProcess = new string[] {
3132 "Tai",
3233 "SearchHost",
3334 "Taskmgr",
@@ -61,6 +62,19 @@ namespace Core.Servicers.Instances
6162
6263 public event EventHandler OnUpdateTime;
6364
65新增: /// <summary>
66新增: /// 忽略进程缓存列表
67新增: /// </summary>
68新增: private List<string> IgnoreProcessCacheList;
69新增:
70新增: /// <summary>
71新增: /// 配置正则忽略进程列表
72新增: /// </summary>
73新增: private List<string> ConfigIgnoreProcessRegxList;
74新增: /// <summary>
75新增: /// 配置忽略进程名称列表
76新增: /// </summary>
77新增: private List<string> ConfigIgnoreProcessList;
6478 public Main(
6579 IObserver observer,
6680 IData data,
@@ -77,6 +91,10 @@ namespace Core.Servicers.Instances
7791 this.appData = appData;
7892 this.categories = categories;
7993
94新增: IgnoreProcessCacheList = new List<string>();
95新增: ConfigIgnoreProcessRegxList = new List<string>();
96新增: ConfigIgnoreProcessList = new List<string>();
97新增:
8098 observer.OnAppActive += Observer_OnAppActive;
8199 sleepdiscover.SleepStatusChanged += Sleepdiscover_SleepStatusChanged;
82100 appConfig.ConfigChanged += AppConfig_ConfigChanged;
@@ -97,6 +115,9 @@ namespace Core.Servicers.Instances
97115 {
98116 // 处理开机自启
99117 Shortcut.SetStartup(newConfig.General.IsStartatboot);
118新增:
119新增: // 更新忽略规则
120新增: UpdateConfigIgnoreProcess();
100121 }
101122 }
102123
@@ -126,6 +147,7 @@ namespace Core.Servicers.Instances
126147 // 加载应用配置(确保配置文件最先加载
127148 appConfig.Load();
128149 config = appConfig.GetConfig();
150新增: UpdateConfigIgnoreProcess();
129151
130152 // 日期变化观察
131153 dateTimeObserver.Start();
@@ -146,6 +168,21 @@ namespace Core.Servicers.Instances
146168 }
147169
148170
171新增: private void UpdateConfigIgnoreProcess()
172新增: {
173新增: ConfigIgnoreProcessList.Clear();
174新增: ConfigIgnoreProcessRegxList.Clear();
175新增: IgnoreProcessCacheList.Clear();
176新增:
177新增: ConfigIgnoreProcessList = config.Behavior.IgnoreProcessList.Where(m => !IsRegex(m)).ToList();
178新增: ConfigIgnoreProcessRegxList = config.Behavior.IgnoreProcessList.Where(m => IsRegex(m)).ToList();
179新增: }
180新增:
181新增: private bool IsRegex(string str)
182新增: {
183新增: return Regex.IsMatch(str, @"[\.|\*|\?|\{|\\|\[|\^|\|]");
184新增: }
185新增:
149186 private void Sleepdiscover_SleepStatusChanged(Enums.SleepStatus sleepStatus)
150187 {
151188 this.sleepStatus = sleepStatus;
@@ -173,53 +210,66 @@ namespace Core.Servicers.Instances
173210
174211
175212 /// <summary>
176删除: /// 检查焦点app是否已经在库
213新增: /// 检查应用是否需要记录数据
177214 /// </summary>
178215 /// <param name="processName"></param>
179216 /// <param name="description"></param>
180217 /// <param name="file"></param>
181删除: private void CheckApp(string processName, string description, string file)
218新增: private bool IsCheckApp(string processName, string description, string file)
182219 {
183删除: if (string.IsNullOrEmpty(file) || string.IsNullOrEmpty(processName))
220新增: if (string.IsNullOrEmpty(file) || string.IsNullOrEmpty(processName) || DefaultIgnoreProcess.Contains(processName) || IgnoreProcessCacheList.Contains(processName))
184221 {
185删除: return;
222新增: return false;
186223 }
187224
225新增: // 从名称判断
226新增: if (ConfigIgnoreProcessList.Contains(processName))
227新增: {
228新增: return false;
229新增: }
188230
189删除: if (!config.Behavior.IgnoreProcessList.Contains(processName)
190删除: && !IgnoreProcess.Contains(processName))
231新增: // 正则表达式
232新增: foreach (string reg in ConfigIgnoreProcessRegxList)
191233 {
192删除: AppModel app = appData.GetApp(processName);
193删除: if (app == null)
234新增: if (Regex.IsMatch(processName, reg))
194235 {
195删除: // 提取icon
196删除: string iconFile = Iconer.ExtractFromFile(file, processName, description);
236新增: IgnoreProcessCacheList.Add(processName);
197237
198删除: appData.AddApp(new AppModel()
199删除: {
200删除: Name = processName,
201删除: Description = description,
202删除: File = file,
203删除: CategoryID = 0,
204删除: IconFile = iconFile,
205删除: });
238新增: return false;
206239 }
207240 }
241新增:
242新增: AppModel app = appData.GetApp(processName);
243新增: if (app == null)
244新增: {
245新增: // 记录应用信息
246新增:
247新增: // 提取icon
248新增: string iconFile = Iconer.ExtractFromFile(file, processName, description);
249新增:
250新增: appData.AddApp(new AppModel()
251新增: {
252新增: Name = processName,
253新增: Description = description,
254新增: File = file,
255新增: CategoryID = 0,
256新增: IconFile = iconFile,
257新增: });
258新增: }
259新增:
260新增: return true;
208261 }
209262
210263 private void Observer_OnAppActive(string processName, string description, string file)
211264 {
212删除: CheckApp(processName, description, file);
265新增: bool isCheck = IsCheckApp(processName, description, file);
213266
214267 if (activeProcess != processName && activeProcessFile != file)
215268 {
216269 UpdateTime();
217270 }
218271
219删除: if (!config.Behavior.IgnoreProcessList.Contains(processName)
220删除: && file != string.Empty
221删除: && sleepStatus != SleepStatus.Sleep
222删除: && !IgnoreProcess.Contains(processName))
272新增: if (isCheck && sleepStatus != SleepStatus.Sleep)
223273 {
224274 activeProcess = processName;
225275 activeProcessDescription = description;