提交记录新增Core/Models/Config/BehaviorModel.cs+20 −0看文件
修改Core/Models/Config/ConfigModel.cs+6 −0看文件
修改Core/Servicers/Instances/Main.cs+3 −2看文件
修改UI/Models/DetailPageModel.cs+29 −2看文件
修改UI/ViewModels/DetailPageVM.cs+62 −2看文件
修改UI/ViewModels/SettingPageVM.cs+10 −1看文件
修改UI/Views/DetailPage.xaml+23 −4看文件
修改UI/Views/SettingPage.xaml+4 −0看文件
| @@ -0,0 +1,20 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Linq; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增:using System.Threading.Tasks; | |
| 6 | 新增: | |
| 7 | 新增:namespace Core.Models.Config | |
| 8 | 新增:{ | |
| 9 | 新增: /// <summary> | |
| 10 | 新增: /// 行为 | |
| 11 | 新增: /// </summary> | |
| 12 | 新增: public class BehaviorModel | |
| 13 | 新增: { | |
| 14 | 新增: [Config(Name = "忽略进程", Description = "忽略的进程将不进行时长统计", Group = "忽略进程", Placeholder ="进程名,不需要输入.exe")] | |
| 15 | 新增: /// <summary> | |
| 16 | 新增: /// 忽略的进程列表 | |
| 17 | 新增: /// </summary> | |
| 18 | 新增: public List<string> IgnoreProcessList { get; set; } = new List<string>(); | |
| 19 | 新增: } | |
| 20 | 新增:} | |
| @@ -21,5 +21,11 @@ namespace Core.Models.Config | ||
| 21 | 21 | /// 常规 |
| 22 | 22 | /// </summary> |
| 23 | 23 | public GeneralModel General { get; set; } |
| 24 | 新增: | |
| 25 | 新增: /// <summary> | |
| 26 | 新增: /// 行为 | |
| 27 | 新增: /// </summary> | |
| 28 | 新增: public BehaviorModel Behavior { get; set; } | |
| 29 | 新增: | |
| 24 | 30 | } |
| 25 | 31 | } |
| @@ -138,9 +138,10 @@ namespace Core.Servicers.Instances | ||
| 138 | 138 | UpdateTime(); |
| 139 | 139 | } |
| 140 | 140 | |
| 141 | 删除: if (!IgnoreProcess.Contains(processName) | |
| 141 | 新增: if (!config.Behavior.IgnoreProcessList.Contains(processName) | |
| 142 | 142 | && file != string.Empty |
| 143 | 删除: && sleepStatus != SleepStatus.Sleep) | |
| 143 | 新增: && sleepStatus != SleepStatus.Sleep | |
| 144 | 新增: && !IgnoreProcess.Contains(processName)) | |
| 144 | 145 | { |
| 145 | 146 | activeProcess = processName; |
| 146 | 147 | activeProcessDescription = description; |
| @@ -4,6 +4,7 @@ using System.Collections.ObjectModel; | ||
| 4 | 4 | using System.Linq; |
| 5 | 5 | using System.Text; |
| 6 | 6 | using System.Threading.Tasks; |
| 7 | 新增:using System.Windows; | |
| 7 | 8 | using UI.Controls.Charts.Model; |
| 8 | 9 | |
| 9 | 10 | namespace UI.Models |
| @@ -32,13 +33,39 @@ namespace UI.Models | ||
| 32 | 33 | public string Ratio { get { return Ratio_; } set { Ratio_ = value; OnPropertyChanged(); } } |
| 33 | 34 | |
| 34 | 35 | private DateTime Date_; |
| 35 | 删除: public DateTime Date { get { return Date_; } set { Date_ = value; OnPropertyChanged();} } | |
| 36 | 新增: public DateTime Date { get { return Date_; } set { Date_ = value; OnPropertyChanged(); } } | |
| 36 | 37 | |
| 37 | 38 | private string LongDay_; |
| 38 | 删除: public string LongDay { get { return LongDay_; } set { LongDay_ = value;OnPropertyChanged();} } | |
| 39 | 新增: public string LongDay { get { return LongDay_; } set { LongDay_ = value; OnPropertyChanged(); } } | |
| 39 | 40 | |
| 40 | 41 | private string ProcessName_; |
| 41 | 42 | public string ProcessName { get { return ProcessName_; } set { ProcessName_ = value; OnPropertyChanged(); } } |
| 42 | 43 | |
| 44 | 新增: private bool IsIgnore_; | |
| 45 | 新增: public bool IsIgnore | |
| 46 | 新增: { | |
| 47 | 新增: get { return IsIgnore_; } | |
| 48 | 新增: set | |
| 49 | 新增: { | |
| 50 | 新增: IsIgnore_ = value; | |
| 51 | 新增: if (IsIgnore) | |
| 52 | 新增: { | |
| 53 | 新增: BlockBtnVisibility = Visibility.Collapsed; | |
| 54 | 新增: CancelBlockBtnVisibility = Visibility.Visible; | |
| 55 | 新增: } | |
| 56 | 新增: else | |
| 57 | 新增: { | |
| 58 | 新增: BlockBtnVisibility = Visibility.Visible; | |
| 59 | 新增: CancelBlockBtnVisibility = Visibility.Collapsed; | |
| 60 | 新增: } | |
| 61 | 新增: OnPropertyChanged(); | |
| 62 | 新增: } | |
| 63 | 新增: } | |
| 64 | 新增: | |
| 65 | 新增: private Visibility BlockBtnVisibility_ = Visibility.Collapsed; | |
| 66 | 新增: public Visibility BlockBtnVisibility { get { return BlockBtnVisibility_; } set { BlockBtnVisibility_ = value; OnPropertyChanged(); } } | |
| 67 | 新增: | |
| 68 | 新增: private Visibility CancelBlockBtnVisibility_ = Visibility.Collapsed; | |
| 69 | 新增: public Visibility CancelBlockBtnVisibility { get { return CancelBlockBtnVisibility_; } set { CancelBlockBtnVisibility_ = value; OnPropertyChanged(); } } | |
| 43 | 70 | } |
| 44 | 71 | } |
| @@ -1,10 +1,12 @@ | ||
| 1 | 1 | using Core.Librarys; |
| 2 | 新增:using Core.Models.Config; | |
| 2 | 3 | using Core.Servicers.Interfaces; |
| 3 | 4 | using System; |
| 4 | 5 | using System.Collections.Generic; |
| 5 | 6 | using System.Linq; |
| 6 | 7 | using System.Text; |
| 7 | 8 | using System.Threading.Tasks; |
| 9 | 新增:using UI.Controls; | |
| 8 | 10 | using UI.Controls.Charts.Model; |
| 9 | 11 | using UI.Librays; |
| 10 | 12 | using UI.Models; |
| @@ -15,14 +17,27 @@ namespace UI.ViewModels | ||
| 15 | 17 | { |
| 16 | 18 | private readonly IData data; |
| 17 | 19 | private readonly MainViewModel main; |
| 20 | 新增: private readonly IAppConfig appConfig; | |
| 21 | 新增: | |
| 22 | 新增: private ConfigModel config; | |
| 23 | 新增: public Command BlockActionCommand { get; set; } | |
| 24 | 新增: public Command ClearSelectMonthDataCommand { get; set; } | |
| 25 | 新增: | |
| 18 | 26 | public DetailPageVM( |
| 19 | 删除: IData data, MainViewModel main) | |
| 27 | 新增: IData data, MainViewModel main, IAppConfig appConfig) | |
| 20 | 28 | { |
| 21 | 29 | this.data = data; |
| 22 | 30 | this.main = main; |
| 31 | 新增: this.appConfig = appConfig; | |
| 32 | 新增: | |
| 33 | 新增: BlockActionCommand = new Command(new Action<object>(OnBlockActionCommand)); | |
| 34 | 新增: ClearSelectMonthDataCommand = new Command(new Action<object>(OnClearSelectMonthDataCommand)); | |
| 35 | 新增: | |
| 23 | 36 | Init(); |
| 24 | 37 | } |
| 25 | 38 | |
| 39 | 新增: | |
| 40 | 新增: | |
| 26 | 41 | private async void Init() |
| 27 | 42 | { |
| 28 | 43 | Process = main.Data as ChartsDataModel; |
| @@ -31,9 +46,35 @@ namespace UI.ViewModels | ||
| 31 | 46 | |
| 32 | 47 | PropertyChanged += DetailPageVM_PropertyChanged; |
| 33 | 48 | |
| 49 | 新增: config = appConfig.GetConfig(); | |
| 50 | 新增: | |
| 34 | 51 | await LoadData(); |
| 35 | 52 | |
| 36 | 53 | await LoadInfo(); |
| 54 | 新增: | |
| 55 | 新增: } | |
| 56 | 新增: | |
| 57 | 新增: private async void OnClearSelectMonthDataCommand(object obj) | |
| 58 | 新增: { | |
| 59 | 新增: await Clear(); | |
| 60 | 新增: } | |
| 61 | 新增: | |
| 62 | 新增: private void OnBlockActionCommand(object obj) | |
| 63 | 新增: { | |
| 64 | 新增: if (obj.ToString() == "block") | |
| 65 | 新增: { | |
| 66 | 新增: config.Behavior.IgnoreProcessList.Add(ProcessName); | |
| 67 | 新增: IsIgnore = true; | |
| 68 | 新增: main.Toast("进程已忽略"); | |
| 69 | 新增: } | |
| 70 | 新增: else | |
| 71 | 新增: { | |
| 72 | 新增: config.Behavior.IgnoreProcessList.Remove(ProcessName); | |
| 73 | 新增: IsIgnore = false; | |
| 74 | 新增: main.Toast("进程已取消忽略"); | |
| 75 | 新增: } | |
| 76 | 新增: | |
| 77 | 新增: appConfig.Save(); | |
| 37 | 78 | } |
| 38 | 79 | |
| 39 | 80 | private async void DetailPageVM_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) |
| @@ -54,7 +95,8 @@ namespace UI.ViewModels | ||
| 54 | 95 | if (info != null) |
| 55 | 96 | { |
| 56 | 97 | ProcessName = info.ProcessName; |
| 57 | 删除: | |
| 98 | 新增: // 判断是否是忽略的进程 | |
| 99 | 新增: IsIgnore = config.Behavior.IgnoreProcessList.Contains(ProcessName); | |
| 58 | 100 | } |
| 59 | 101 | } |
| 60 | 102 | } |
| @@ -67,6 +109,7 @@ namespace UI.ViewModels | ||
| 67 | 109 | { |
| 68 | 110 | if (Process != null) |
| 69 | 111 | { |
| 112 | 新增: | |
| 70 | 113 | var monthData = data.GetProcessMonthLogList(Process.PopupText, Date); |
| 71 | 114 | int monthTotal = monthData.Sum(m => m.Time); |
| 72 | 115 | Total = Timer.Fromat(monthTotal); |
| @@ -105,6 +148,23 @@ namespace UI.ViewModels | ||
| 105 | 148 | }); |
| 106 | 149 | } |
| 107 | 150 | |
| 151 | 新增: private async Task Clear() | |
| 152 | 新增: { | |
| 153 | 新增: await Task.Run(async () => | |
| 154 | 新增: { | |
| 155 | 新增: if (Process != null) | |
| 156 | 新增: { | |
| 157 | 新增: main.Toast("正在处理"); | |
| 158 | 新增: data.Clear(ProcessName, Process.PopupText, Date); | |
| 159 | 新增: | |
| 160 | 新增: await LoadData(); | |
| 161 | 新增: main.Toast("已清空"); | |
| 162 | 新增: } | |
| 163 | 新增: } | |
| 164 | 新增: ); | |
| 165 | 新增: } | |
| 166 | 新增: | |
| 167 | 新增: | |
| 108 | 168 | private List<ChartsDataModel> MapToChartsData(List<Core.Models.DailyLogModel> list) |
| 109 | 169 | { |
| 110 | 170 | var resData = new List<ChartsDataModel>(); |
| @@ -41,7 +41,7 @@ namespace UI.ViewModels | ||
| 41 | 41 | |
| 42 | 42 | TabbarData = new System.Collections.ObjectModel.ObservableCollection<string>() |
| 43 | 43 | { |
| 44 | 删除: "常规","关联","关于" | |
| 44 | 新增: "常规","关联","行为","关于" | |
| 45 | 45 | }; |
| 46 | 46 | |
| 47 | 47 | PropertyChanged += SettingPageVM_PropertyChanged; |
| @@ -73,6 +73,10 @@ namespace UI.ViewModels | ||
| 73 | 73 | } |
| 74 | 74 | |
| 75 | 75 | } |
| 76 | 新增: else if (TabbarSelectedIndex == 2) | |
| 77 | 新增: { | |
| 78 | 新增: config.Behavior = Data as BehaviorModel; | |
| 79 | 新增: } | |
| 76 | 80 | |
| 77 | 81 | appConfig.Save(); |
| 78 | 82 | } |
| @@ -89,6 +93,11 @@ namespace UI.ViewModels | ||
| 89 | 93 | // 关联 |
| 90 | 94 | Data = config.Links; |
| 91 | 95 | } |
| 96 | 新增: else if (TabbarSelectedIndex == 2) | |
| 97 | 新增: { | |
| 98 | 新增: // 行为 | |
| 99 | 新增: Data = config.Behavior; | |
| 100 | 新增: } | |
| 92 | 101 | } |
| 93 | 102 | } |
| 94 | 103 | } |
| @@ -7,7 +7,9 @@ | ||
| 7 | 7 | xmlns:DatePickerBar="clr-namespace:UI.Controls.DatePickerBar" x:Class="UI.Views.DetailPage" |
| 8 | 8 | mc:Ignorable="d" |
| 9 | 9 | d:DesignHeight="450" d:DesignWidth="800" |
| 10 | 删除: Title="DetailPage"> | |
| 10 | 新增: Title="DetailPage" | |
| 11 | 新增: xmlns:btn="clr-namespace:UI.Controls.Button" | |
| 12 | 新增: xmlns:base="clr-namespace:UI.Controls.Base"> | |
| 11 | 13 | |
| 12 | 14 | <Grid> |
| 13 | 15 | <StackPanel Margin="20"> |
| @@ -21,19 +23,32 @@ | ||
| 21 | 23 | <Grid.ColumnDefinitions> |
| 22 | 24 | <ColumnDefinition Width="100"/> |
| 23 | 25 | <ColumnDefinition Width="9*"/> |
| 26 | 新增: <ColumnDefinition Width="3*"/> | |
| 24 | 27 | |
| 25 | 28 | </Grid.ColumnDefinitions> |
| 26 | 29 | <Image Source="{Binding Process.Icon}" Width="25" HorizontalAlignment="Center" VerticalAlignment="Center"/> |
| 27 | 30 | |
| 28 | 31 | <StackPanel Grid.Column="1" VerticalAlignment="Center"> |
| 29 | 32 | <StackPanel Orientation="Horizontal"> |
| 30 | 删除: <TextBlock Text="{Binding Process.Name}" FontSize="18" /> | |
| 31 | 删除: <TextBlock ToolTip="进程名" Text="{Binding ProcessName}" FontSize="12" Foreground="Gray" VerticalAlignment="Center" Margin="15,0,0,0"/> | |
| 33 | 新增: <Border Background="#f51837" Padding="10,5" CornerRadius="4" Margin="0,0,4,0" VerticalAlignment="Center" Visibility="{Binding CancelBlockBtnVisibility}" ToolTip="该进程将不再统计使用时长"> | |
| 34 | 新增: <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> | |
| 35 | 新增: <base:Icon IconType="Blocked" FontSize="12" VerticalAlignment="Center" Foreground="White"/> | |
| 36 | 新增: <TextBlock Text="已被忽略" Foreground="White" VerticalAlignment="Center" Margin="5,0,0,0"/> | |
| 37 | 新增: </StackPanel> | |
| 38 | 新增: </Border> | |
| 39 | 新增: <TextBlock Text="{Binding Process.Name}" FontSize="18" VerticalAlignment="Center"/> | |
| 40 | 新增: <TextBlock ToolTip="进程名" Text="{Binding ProcessName}" FontSize="12" Foreground="Gray" VerticalAlignment="Center" Margin="10,0,0,0"/> | |
| 32 | 41 | |
| 33 | 42 | </StackPanel> |
| 34 | 43 | <TextBlock ToolTip="进程文件路径" Foreground="Gray" Text="{Binding Process.PopupText}" Margin="0,5,0,0" TextWrapping="WrapWithOverflow"/> |
| 35 | 44 | |
| 36 | 45 | </StackPanel> |
| 46 | 新增: | |
| 47 | 新增: <StackPanel Grid.Column="2" HorizontalAlignment="Right" Margin="0,0,20,0"> | |
| 48 | 新增: <btn:Button Command="{Binding BlockActionCommand}" CommandParameter="block" Width="120" Visibility="{Binding BlockBtnVisibility}" Icon="Blocked">忽略此进程</btn:Button> | |
| 49 | 新增: <btn:Button Command="{Binding BlockActionCommand}" CommandParameter="unblock" Width="120" Visibility="{Binding CancelBlockBtnVisibility}" Icon="Remove">取消忽略此进程</btn:Button> | |
| 50 | 新增: | |
| 51 | 新增: </StackPanel> | |
| 37 | 52 | </Grid> |
| 38 | 53 | </Border> |
| 39 | 54 | |
| @@ -43,8 +58,12 @@ | ||
| 43 | 58 | Padding="20,20" |
| 44 | 59 | Margin="0,20,0,0"> |
| 45 | 60 | <StackPanel> |
| 46 | 删除: <DatePickerBar:DatePickerBar ShowType="Month" HorizontalAlignment="Left" SelectedDate="{Binding Date,Mode=TwoWay}"/> | |
| 61 | 新增: <Grid> | |
| 62 | 新增: <DatePickerBar:DatePickerBar ShowType="Month" HorizontalAlignment="Left" SelectedDate="{Binding Date,Mode=TwoWay}"/> | |
| 47 | 63 | |
| 64 | 新增: <btn:Button ToolTip="清空此进程在该月的统计数据" HorizontalAlignment="Right" VerticalAlignment="Top" Background="#f51837" Foreground="White" Width="120" Margin="0" Icon="Delete" Command="{Binding ClearSelectMonthDataCommand}">清空统计</btn:Button> | |
| 65 | 新增: | |
| 66 | 新增: </Grid> | |
| 48 | 67 | <Grid Margin="0,20,0,0"> |
| 49 | 68 | <Grid.ColumnDefinitions> |
| 50 | 69 | <ColumnDefinition Width="256"/> |
| @@ -41,6 +41,9 @@ | ||
| 41 | 41 | <TabItem> |
| 42 | 42 | <SettingPanel:SettingPanel Data="{Binding Data,Mode=TwoWay}" Margin="0,0,0,10"/> |
| 43 | 43 | </TabItem> |
| 44 | 新增: <TabItem> | |
| 45 | 新增: <SettingPanel:SettingPanel Data="{Binding Data,Mode=TwoWay}" Margin="0,0,0,0"/> | |
| 46 | 新增: </TabItem> | |
| 44 | 47 | <TabItem> |
| 45 | 48 | <!--关于--> |
| 46 | 49 | <Border Background="White" Padding="20" CornerRadius="6"> |
| @@ -62,6 +65,7 @@ | ||
| 62 | 65 | </StackPanel> |
| 63 | 66 | </Border> |
| 64 | 67 | </TabItem> |
| 68 | 新增: | |
| 65 | 69 | </TabControl> |
| 66 | 70 | </StackPanel> |
| 67 | 71 | |

