跳到主要内容

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(Name = "忽略进程", Description = "忽略的进程将不进行时长统计", Group = "忽略进程", Placeholder ="进程名,不需要输入.exe")]
14新增: [Config(IsCanImportExport = true, Name = "忽略进程", Description = "忽略的进程将不进行时长统计", Group = "忽略进程", Placeholder = "进程名,不需要输入.exe")]
1515 /// <summary>
1616 /// 忽略的进程列表
1717 /// </summary>
修改Core/Models/Config/ConfigAttribute.cs+2 −0看文件
@@ -23,6 +23,7 @@ namespace Core.Models.Config
2323 public bool IsName;
2424 public string Placeholder;
2525 public bool IsCanRepeat;
26新增: public bool IsCanImportExport;
2627 public ConfigAttribute()
2728 {
2829 ToggleTrueText = "开";
@@ -30,6 +31,7 @@ namespace Core.Models.Config
3031 IsCanRepeat = true;
3132 Index = 0;
3233 IsName = false;
34新增: IsCanImportExport = false;
3335 }
3436
3537
修改UI/Controls/SettingPanel/SettingPanel.cs+104 −58看文件
@@ -1,4 +1,5 @@
1删除:using Core.Models.Config;
1新增:using Core.Librarys;
2新增:using Core.Models.Config;
23using Newtonsoft.Json;
34using System;
45using System.Collections;
@@ -13,6 +14,7 @@ using System.Threading.Tasks;
1314using System.Windows;
1415using System.Windows.Controls;
1516using System.Windows.Media;
17新增:using UI.Controls.Button;
1618using UI.Controls.Input;
1719using UI.Controls.List;
1820
@@ -406,63 +408,98 @@ namespace UI.Controls.SettingPanel
406408 };
407409 pi.SetValue(configData, list);
408410
409删除: //导入
410删除: var importBtn = new Button.Button();
411删除: importBtn.Content = "导入";
412删除: importBtn.Click += (e, c) =>
413删除: {
414删除: Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
415删除: ofd.Title = "选择文件";
416删除: ofd.Filter = "json(*.json)|*.json";
417删除: ofd.FileName = "TaiProcessIgnoreExport";
411新增: IconButton moreActionBtn = new IconButton();
412新增: moreActionBtn.VerticalAlignment = VerticalAlignment.Center;
413新增: moreActionBtn.HorizontalAlignment = HorizontalAlignment.Right;
414新增: moreActionBtn.Margin = new Thickness(0, 5, 5, 0);
415新增: moreActionBtn.Icon = Base.IconTypes.More;
416新增:
417新增: var moreActionMenu = new ContextMenu();
418418
419删除: ofd.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;//指定启动路径
419新增: moreActionBtn.MouseLeftButtonUp += (e, c) =>
420新增: {
421新增: moreActionMenu.IsOpen = true;
422新增: };
423新增: bool isHasMoreAction = false;
424新增: if (configAttribute.IsCanImportExport)
425新增: {
426新增: // 允许导入导出
427新增: isHasMoreAction = true;
420428
421删除: bool? result = ofd.ShowDialog();
422删除: if (result == true)
429新增: // 导入操作
430新增: var importMenuItem = new MenuItem();
431新增: importMenuItem.Header = "导入";
432新增: importMenuItem.Click += (e, c) =>
423433 {
424删除:
425删除: BehaviorModel bm = JsonConvert.DeserializeObject<BehaviorModel>(File.ReadAllText(ofd.FileName));
426删除: if (bm == null)
427删除: {
428删除: MessageBox.Show("文件格式有误或者数据为空,请选择有效的导出文件。");
429删除: }
430删除: else
434新增: Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
435新增: ofd.Title = "选择文件";
436新增: ofd.Filter = "json(*.json)|*.json";
437新增: ofd.FileName = configAttribute.Name;
438新增:
439新增: bool? result = ofd.ShowDialog();
440新增: if (result == true)
431441 {
432删除: if (MessageBox.Show("导入将覆盖现有设置,确定吗?", "注意", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
442新增: try
433443 {
434删除: pi.SetValue(configData, bm.IgnoreProcessList);
435删除: listControl.Items.Clear();
436删除: foreach (string p in bm.IgnoreProcessList)
444新增: List<string> data = JsonConvert.DeserializeObject<List<string>>(File.ReadAllText(ofd.FileName));
445新增: if (data == null)
446新增: {
447新增: MessageBox.Show("文件格式有误或者数据为空,请选择有效的导出文件。");
448新增: }
449新增: else
437450 {
438删除: listControl.Items.Add(p);
451新增: if (MessageBox.Show("导入将覆盖现有配置,确定吗?", "注意", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
452新增: {
453新增: pi.SetValue(configData, data);
454新增: listControl.Items.Clear();
455新增: foreach (string item in data)
456新增: {
457新增: listControl.Items.Add(item);
458新增: }
459新增: MessageBox.Show("导入完成!", "提示");
460新增: }
439461 }
462新增: }catch (Exception ex)
463新增: {
464新增: Logger.Error($"导入配置“{configAttribute.Name}”时失败:{ex.Message}");
465新增: MessageBox.Show("导入失败!", "提示");
440466 }
441467 }
442删除: }
443468
444删除: };
469新增: };
445470
446删除: //导出
447删除: var exportBtn = new Button.Button();
448删除: exportBtn.Content = "导出";
449删除: exportBtn.Click += (e, c) =>
450删除: {
451删除: Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
452删除: sfd.Title = "选择文件";
453删除: sfd.Filter = "json(*.json)|*.json";
454删除: sfd.FileName = "TaiProcessIgnoreExport";
471新增: // 导出操作
472新增: var exportMenuItem = new MenuItem();
473新增: exportMenuItem.Header = "导出";
474新增: exportMenuItem.Click += (e, c) =>
475新增: {
476新增: try
477新增: {
478新增: Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
479新增: sfd.Title = "选择文件";
480新增: sfd.Filter = "json(*.json)|*.json";
481新增: sfd.FileName = configAttribute.Name + "导出配置";
455482
456删除: sfd.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;//指定启动路径
483新增: bool? result = sfd.ShowDialog();
484新增: if (result == true)
485新增: {
486新增: File.WriteAllText(sfd.FileName, JsonConvert.SerializeObject(listControl.Items));
487新增: MessageBox.Show("导出完成", "提示");
488新增: }
489新增: }
490新增: catch (Exception ex)
491新增: {
492新增: Logger.Error($"导出配置“{configAttribute.Name}”时失败:{ex.Message}");
493新增: MessageBox.Show("导出失败!", "提示");
494新增: }
457495
458删除: bool? result = sfd.ShowDialog();
459删除: if (result == true)
460删除: {
461删除: File.WriteAllText(sfd.FileName, JsonConvert.SerializeObject(configData));
496新增: };
462497
463删除: }
464498
465删除: };
499新增: moreActionMenu.Items.Add(importMenuItem);
500新增: moreActionMenu.Items.Add(exportMenuItem);
501新增: }
502新增:
466503
467504 var inputPanel = new Grid();
468505 inputPanel.ColumnDefinitions.Add(
@@ -475,25 +512,13 @@ namespace UI.Controls.SettingPanel
475512 {
476513 Width = new GridLength(2, GridUnitType.Star)
477514 });
478删除: inputPanel.ColumnDefinitions.Add(
479删除: new ColumnDefinition()
480删除: {
481删除: Width = new GridLength(2, GridUnitType.Star)
482删除: });
483删除: inputPanel.ColumnDefinitions.Add(
484删除: new ColumnDefinition()
485删除: {
486删除: Width = new GridLength(2, GridUnitType.Star)
487删除: });
515新增:
488516 inputPanel.Margin = new Thickness(15, 10, 15, 10);
489517 Grid.SetColumn(addInputBox, 0);
490518 Grid.SetColumn(addBtn, 1);
491删除: Grid.SetColumn(importBtn, 2);
492删除: Grid.SetColumn(exportBtn, 3);
519新增:
493520 inputPanel.Children.Add(addInputBox);
494521 inputPanel.Children.Add(addBtn);
495删除: inputPanel.Children.Add(importBtn);
496删除: inputPanel.Children.Add(exportBtn);
497522
498523 // 标题和说明
499524
@@ -503,7 +528,28 @@ namespace UI.Controls.SettingPanel
503528 description.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#989CA1"));
504529 var container = new StackPanel();
505530
506删除: container.Children.Add(description);
531新增: var head = new Grid();
532新增: head.ColumnDefinitions.Add(
533新增: new ColumnDefinition()
534新增: {
535新增: Width = new GridLength(10, GridUnitType.Star)
536新增: });
537新增: head.ColumnDefinitions.Add(
538新增: new ColumnDefinition()
539新增: {
540新增: Width = new GridLength(2, GridUnitType.Star)
541新增: });
542新增: Grid.SetColumn(description, 0);
543新增: head.Children.Add(description);
544新增:
545新增: // 更多操作按钮
546新增: if (isHasMoreAction)
547新增: {
548新增: Grid.SetColumn(moreActionBtn, 1);
549新增: head.Children.Add(moreActionBtn);
550新增: }
551新增:
552新增: container.Children.Add(head);
507553 container.Children.Add(inputPanel);
508554 container.Children.Add(listControl);
509555 return container;