跳到主要内容

github/tai

公开

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

提交记录
修改Core/Servicers/Instances/Data.cs+18 −2看文件
@@ -67,7 +67,7 @@ namespace Core.Servicers.Instances
6767 {
6868 res.Time += seconds;
6969 }
70删除:
70新增:
7171 db.SaveChanges();
7272 transcation.Commit();
7373 }
@@ -101,7 +101,7 @@ namespace Core.Servicers.Instances
101101 return;
102102 }
103103
104删除:
104新增:
105105
106106 using (var db = new TaiDbContext())
107107 {
@@ -686,5 +686,21 @@ namespace Core.Servicers.Instances
686686 return res;
687687 }
688688 }
689新增:
690新增: public IEnumerable<HoursLogModel> GetTimeRangelogList(DateTime time)
691新增: {
692新增: time = new DateTime(time.Year, time.Month, time.Day, time.Hour, 0, 0);
693新增: using (var db = new TaiDbContext())
694新增: {
695新增: var res = db.HoursLog.Where(m => m.DataTime == time).ToList();
696新增:
697新增: foreach (var log in res)
698新增: {
699新增: log.AppModel = appData.GetApp(log.AppModelID);
700新增: }
701新增:
702新增: return res;
703新增: }
704新增: }
689705 }
690706}
修改Core/Servicers/Interfaces/IData.cs+6 −0看文件
@@ -104,6 +104,12 @@ namespace Core.Servicers.Interfaces
104104 /// <param name="end"></param>
105105 /// <returns></returns>
106106 int GetDateRangeAppCount(DateTime start, DateTime end);
107新增: /// <summary>
108新增: /// 获取指定时间(小时)所有使用app数据
109新增: /// </summary>
110新增: /// <param name="time"></param>
111新增: /// <returns></returns>
112新增: IEnumerable<HoursLogModel> GetTimeRangelogList(DateTime time);
107113
108114 }
109115}
修改UI/Controls/Charts/Charts.cs+66 −0看文件
@@ -310,6 +310,39 @@ namespace UI.Controls.Charts
310310 new PropertyMetadata(true));
311311
312312
313新增: #endregion
314新增: #region 是否允许选择项(仅柱状图有效,默认不允许)
315新增: /// <summary>
316新增: /// 是否允许选择项(仅柱状图有效,默认不允许)
317新增: /// </summary>
318新增: public bool IsCanColumnSelect
319新增: {
320新增: get { return (bool)GetValue(IsCanColumnSelectProperty); }
321新增: set { SetValue(IsCanColumnSelectProperty, value); }
322新增: }
323新增: public static readonly DependencyProperty IsCanColumnSelectProperty =
324新增: DependencyProperty.Register("IsCanColumnSelect",
325新增: typeof(bool),
326新增: typeof(Charts),
327新增: new PropertyMetadata(false));
328新增:
329新增:
330新增: #endregion
331新增: #region 选中列索引(仅柱状图有效)
332新增: /// <summary>
333新增: /// 选中列索引(仅柱状图有效)
334新增: /// </summary>
335新增: public int ColumnSelectedIndex
336新增: {
337新增: get { return (int)GetValue(ColumnSelectedIndexProperty); }
338新增: set { SetValue(ColumnSelectedIndexProperty, value); }
339新增: }
340新增: public static readonly DependencyProperty ColumnSelectedIndexProperty =
341新增: DependencyProperty.Register("ColumnSelectedIndex",
342新增: typeof(int),
343新增: typeof(Charts), new PropertyMetadata(-1, new PropertyChangedCallback(OnPropertyChanged)));
344新增:
345新增:
313346 #endregion
314347 public bool IsShowValuesPopup
315348 {
@@ -386,6 +419,10 @@ namespace UI.Controls.Charts
386419 charts.RenderLoadingPlaceholder();
387420 }
388421 }
422新增: if (e.Property == ColumnSelectedIndexProperty && e.OldValue != e.NewValue)
423新增: {
424新增: charts.CheckColumnItem((int)e.OldValue, (int)e.NewValue);
425新增: }
389426
390427 }
391428
@@ -873,6 +910,29 @@ namespace UI.Controls.Charts
873910 #endregion
874911
875912 #region 渲染柱形图
913新增: private void CheckColumnItem(int oldIndex, int newIndex)
914新增: {
915新增: if (!IsCanColumnSelect || ColumnContainer.Children.Count == 0)
916新增: {
917新增: return;
918新增: }
919新增:
920新增: if (oldIndex >= 0 && oldIndex < ColumnContainer.Children.Count)
921新增: {
922新增: var oldItem = ColumnContainer.Children[oldIndex] as Grid;
923新增: oldItem.Background = new SolidColorBrush(Colors.Transparent);
924新增: }
925新增: if (newIndex >= 0 && newIndex < ColumnContainer.Children.Count)
926新增: {
927新增: var background = Application.Current.Resources["ThemeBrush"] as SolidColorBrush;
928新增:
929新增: var checkItem = ColumnContainer.Children[newIndex] as Grid;
930新增: checkItem.Background = new SolidColorBrush(background.Color) { Opacity = .1 };
931新增: }
932新增: }
933新增: /// <summary>
934新增: /// 渲染柱形图
935新增: /// </summary>
876936 private void RenderColumnStyle()
877937 {
878938 ColumnContainer.Children.Clear();
@@ -997,6 +1057,12 @@ namespace UI.Controls.Charts
9971057 {
9981058 IsShowValuesPopup = false;
9991059 };
1060新增:
1061新增: var index = i;
1062新增: valueContainer.MouseLeftButtonDown += (e, c) =>
1063新增: {
1064新增: ColumnSelectedIndex = index;
1065新增: };
10001066 }
10011067
10021068 var infoList = new List<ChartColumnInfoModel>();
修改UI/Models/ChartPageModel.cs+25 −1看文件
@@ -81,7 +81,7 @@ namespace UI.Models
8181
8282 private double DataMaximum_ = 0;
8383 public double DataMaximum { get { return DataMaximum_; } set { DataMaximum_ = value; OnPropertyChanged(); } }
84删除:
84新增:
8585 private ContextMenu AppContextMenu_;
8686 public ContextMenu AppContextMenu { get { return AppContextMenu_; } set { AppContextMenu_ = value; OnPropertyChanged(); } }
8787
@@ -93,5 +93,29 @@ namespace UI.Models
9393 private string AppCount_;
9494 public string AppCount { get { return AppCount_; } set { AppCount_ = value; OnPropertyChanged(); } }
9595
96新增: private int ColumnSelectedIndex_ = -1;
97新增: /// <summary>
98新增: /// 柱状图选中列索引
99新增: /// </summary>
100新增: public int ColumnSelectedIndex { get { return ColumnSelectedIndex_; } set { ColumnSelectedIndex_ = value; OnPropertyChanged(); } }
101新增: private List<ChartsDataModel> DayHoursData_;
102新增: /// <summary>
103新增: /// 指定时段app数据
104新增: /// </summary>
105新增: public List<ChartsDataModel> DayHoursData
106新增: {
107新增: get { return DayHoursData_; }
108新增: set { DayHoursData_ = value; OnPropertyChanged(); }
109新增: }
110新增: private string DayHoursSelectedTime_;
111新增: /// <summary>
112新增: /// 选中时段
113新增: /// </summary>
114新增: public string DayHoursSelectedTime { get { return DayHoursSelectedTime_; } set { DayHoursSelectedTime_ = value; OnPropertyChanged(); } }
115新增: private bool IsCanColumnSelect_ = true;
116新增: /// <summary>
117新增: /// 是否允许选择
118新增: /// </summary>
119新增: public bool IsCanColumnSelect { get { return IsCanColumnSelect_; } set { IsCanColumnSelect_ = value; OnPropertyChanged(); } }
96120 }
97121}
修改UI/Servicers/AppContextMenuServicer.cs+29 −5看文件
@@ -93,7 +93,13 @@ namespace UI.Servicers
9393 {
9494 var data = menu.Tag as ChartsDataModel;
9595 var log = data.Data as DailyLogModel;
96删除: var app = log.AppModel;
96新增: var app = log != null ? log.AppModel : null;
97新增:
98新增: if (log == null)
99新增: {
100新增: app = (data.Data as HoursLogModel).AppModel;
101新增: }
102新增:
97103
98104 var config = appConfig.GetConfig();
99105 if (config.Behavior.IgnoreProcessList.Contains(app.Name))
@@ -117,7 +123,12 @@ namespace UI.Servicers
117123
118124 var data = menu.Tag as ChartsDataModel;
119125 var log = data.Data as DailyLogModel;
120删除: var app = log.AppModel;
126新增: var app = log != null ? log.AppModel : null;
127新增:
128新增: if (log == null)
129新增: {
130新增: app = (data.Data as HoursLogModel).AppModel;
131新增: }
121132
122133 var categories = categorys.GetCategories();
123134 foreach (var category in categories)
@@ -140,7 +151,12 @@ namespace UI.Servicers
140151
141152 var data = menu.Tag as ChartsDataModel;
142153 var log = data.Data as DailyLogModel;
143删除: var app = log.AppModel;
154新增: var app = log != null ? log.AppModel : null;
155新增:
156新增: if (log == null)
157新增: {
158新增: app = (data.Data as HoursLogModel).AppModel;
159新增: }
144160 var config = appConfig.GetConfig();
145161
146162 var links = config.Links;
@@ -199,8 +215,12 @@ namespace UI.Servicers
199215 var data = menu.Tag as ChartsDataModel;
200216
201217 var log = data.Data as DailyLogModel;
218新增: var app = log != null ? log.AppModel : null;
202219
203删除: var app = log.AppModel;
220新增: if (log == null)
221新增: {
222新增: app = (data.Data as HoursLogModel).AppModel;
223新增: }
204224
205225 if (File.Exists(app.File))
206226 {
@@ -217,8 +237,12 @@ namespace UI.Servicers
217237 var data = menu.Tag as ChartsDataModel;
218238
219239 var log = data.Data as DailyLogModel;
240新增: var app = log != null ? log.AppModel : null;
220241
221删除: var app = log.AppModel;
242新增: if (log == null)
243新增: {
244新增: app = (data.Data as HoursLogModel).AppModel;
245新增: }
222246
223247 if (File.Exists(app.File))
224248 {
修改UI/ViewModels/ChartPageVM.cs+60 −5看文件
@@ -73,7 +73,7 @@ namespace UI.ViewModels
7373 AppContextMenu = appContextMenuServicer.GetContextMenu();
7474 }
7575
76删除:
76新增:
7777 public override void Dispose()
7878 {
7979 base.Dispose();
@@ -88,9 +88,16 @@ namespace UI.ViewModels
8888 if (data != null)
8989 {
9090 var model = data.Data as DailyLogModel;
91删除: if (model != null && model.AppModel != null)
91新增: var app = model != null ? model.AppModel : null;
92新增:
93新增: if (model == null)
94新增: {
95新增: app = (data.Data as HoursLogModel).AppModel;
96新增: }
97新增:
98新增: if (app != null)
9299 {
93删除: mainVM.Data = model.AppModel;
100新增: mainVM.Data = app;
94101 mainVM.Uri = nameof(DetailPage);
95102 }
96103
@@ -99,13 +106,21 @@ namespace UI.ViewModels
99106 private void OnRefreshCommand(object obj)
100107 {
101108 LoadData();
109新增: if (TabbarSelectedIndex == 0)
110新增: {
111新增: LoadDayHoursData();
112新增: }
102113 }
103114
104115 private void InputServicer_OnKeyUpInput(object sender, System.Windows.Forms.Keys key)
105116 {
106删除: if(key== System.Windows.Forms.Keys.F5)
117新增: if (key == System.Windows.Forms.Keys.F5)
107118 {
108119 LoadData();
120新增: if (TabbarSelectedIndex == 0)
121新增: {
122新增: LoadDayHoursData();
123新增: }
109124 }
110125 }
111126
@@ -118,7 +133,7 @@ namespace UI.ViewModels
118133 }
119134 if (e.PropertyName == nameof(TabbarSelectedIndex))
120135 {
121删除:
136新增: IsCanColumnSelect = TabbarSelectedIndex == 0;
122137 LoadData();
123138 }
124139 if (e.PropertyName == nameof(SelectedWeek))
@@ -133,6 +148,13 @@ namespace UI.ViewModels
133148 {
134149 LoadYearData();
135150 }
151新增: if (e.PropertyName == nameof(ColumnSelectedIndex))
152新增: {
153新增: if (TabbarSelectedIndex == 0)
154新增: {
155新增: LoadDayHoursData();
156新增: }
157新增: }
136158 }
137159
138160
@@ -165,6 +187,7 @@ namespace UI.ViewModels
165187 /// </summary>
166188 private void LoadDayData()
167189 {
190新增: ColumnSelectedIndex = -1;
168191 DataMaximum = 3600;
169192 Task.Run(() =>
170193 {
@@ -440,5 +463,37 @@ namespace UI.ViewModels
440463
441464 return resData;
442465 }
466新增:
467新增: private void LoadDayHoursData()
468新增: {
469新增: if (ColumnSelectedIndex < 0)
470新增: {
471新增: DayHoursSelectedTime = String.Empty;
472新增: return;
473新增: }
474新增: Task.Run(() =>
475新增: {
476新增: // 加载选中时段的所有app数据
477新增: var time = new DateTime(Date.Year, Date.Month, Date.Day, ColumnSelectedIndex, 0, 0);
478新增: DayHoursSelectedTime = time.ToString("yyyy年MM月dd日 HH点");
479新增: var list = data.GetTimeRangelogList(time);
480新增:
481新增: var chartsDatas = new List<ChartsDataModel>();
482新增:
483新增: foreach (var item in list)
484新增: {
485新增: var bindModel = new ChartsDataModel();
486新增: bindModel.Data = item;
487新增: bindModel.Name = string.IsNullOrEmpty(item.AppModel?.Description) ? item.AppModel.Name : item.AppModel.Description;
488新增: bindModel.Value = item.Time;
489新增: bindModel.Tag = Time.ToString(item.Time);
490新增: bindModel.PopupText = item.AppModel?.File;
491新增: bindModel.Icon = item.AppModel?.IconFile;
492新增: chartsDatas.Add(bindModel);
493新增: }
494新增:
495新增: DayHoursData = chartsDatas;
496新增: });
497新增: }
443498 }
444499}
修改UI/Views/ChartPage.xaml+76 −14看文件
@@ -41,6 +41,7 @@
4141 </base:View>
4242 </Grid>
4343 </Border>
44新增:
4445 <Grid Width="680" HorizontalAlignment="Left" Margin="0,20,0,0">
4546 <Grid.ColumnDefinitions>
4647 <ColumnDefinition Width="*"/>
@@ -137,42 +138,103 @@
137138 </Border>
138139 </Grid>
139140
140删除: <TextBlock Text="时段" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
141新增: <WrapPanel Margin="-10">
142新增:
143新增: <!--时段-->
144新增: <Grid Margin="10,0,0,0">
145新增: <Grid.RowDefinitions>
146新增: <RowDefinition Height="auto"/>
147新增: <RowDefinition Height="*"/>
148新增: </Grid.RowDefinitions>
149新增: <TextBlock Text="时段" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
141150
142删除: <Border Margin="0,5,0,0" Height="360" Width="680" HorizontalAlignment="Left" Background="{DynamicResource StandardBackgroundBrush}" Padding="20" CornerRadius="10">
143删除: <charts:Charts IsShowTotal="False" DataMaximum="{Binding DataMaximum}" NameIndexStart="{Binding NameIndexStart}" ChartsType="Column" Data="{Binding Data}"/>
151新增: <Border Grid.Row="1" Margin="0,5,0,0" Width="680" HorizontalAlignment="Left" Background="{DynamicResource StandardBackgroundBrush}" Padding="20" CornerRadius="10">
152新增: <StackPanel>
153新增: <charts:Charts Height="310" ColumnSelectedIndex="{Binding ColumnSelectedIndex,Mode=TwoWay}" IsShowTotal="False" DataMaximum="{Binding DataMaximum}" NameIndexStart="{Binding NameIndexStart}" ChartsType="Column" Data="{Binding Data}" IsCanColumnSelect="{Binding IsCanColumnSelect}"/>
154新增: <base:View Value="{Binding TabbarSelectedIndex}" Condition="0">
155新增: <base:View Value="{Binding DayHoursSelectedTime}" Condition="not empty">
156新增: <StackPanel>
157新增: <Border Margin="0,10,0,5" HorizontalAlignment="Left" Padding="10" CornerRadius="10">
158新增: <Border.Background>
159新增: <SolidColorBrush Color="{DynamicResource ThemeColor}" Opacity=".05"/>
160新增: </Border.Background>
161新增: <StackPanel Orientation="Horizontal">
162新增: <base:Icon Foreground="{DynamicResource SubTextBrush}" IconType="Timer" VerticalAlignment="Center"/>
163新增: <TextBlock Foreground="{DynamicResource SubTextBrush}" VerticalAlignment="Center" Text="{Binding DayHoursSelectedTime}" FontSize="13" Margin="5,0,0,0"/>
144164
145删除: </Border>
165新增: </StackPanel>
166新增: </Border>
167新增: <base:View Value="{Binding DayHoursData}" Condition="not empty">
168新增: <charts:Charts Margin="0,0,0,0" Height="300" ItemMenu="{Binding AppContextMenu}" Data="{Binding DayHoursData}" ChartsType="HorizontalA" ClickCommand="{Binding ToDetailCommand}" />
169新增: </base:View>
170新增: <base:View Value="{Binding DayHoursData}" Condition="empty">
171新增: <base:EmptyData/>
172新增: </base:View>
173新增: </StackPanel>
174新增: </base:View>
175新增: </base:View>
176新增: </StackPanel>
177新增: </Border>
146178
147删除: <Grid Width="680" HorizontalAlignment="Left">
148删除: <Grid.ColumnDefinitions>
149删除: <ColumnDefinition Width="*"/>
150删除: <ColumnDefinition Width="*"/>
151删除: </Grid.ColumnDefinitions>
152删除: <Grid >
179新增: </Grid>
180新增:
181新增:
182新增: <!--雷达图-->
183新增: <Grid Margin="10,0,0,0" Width="350" Height="400" VerticalAlignment="Top">
153184 <Grid.RowDefinitions>
154185 <RowDefinition Height="auto"/>
155186 <RowDefinition Height="*"/>
156187 </Grid.RowDefinitions>
188新增:
157189 <TextBlock Text="分类" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
158190 <Border Margin="0,5,0,0" Grid.Row="1" Background="{DynamicResource StandardBackgroundBrush}" Padding="20" CornerRadius="10">
159191 <charts:Charts Margin="10,20,10,10" Height="230" Width="230" ChartsType="Radar" Data="{Binding Data}"/>
160192
161193 </Border>
162194 </Grid>
163删除: <Grid Grid.Column="1" Margin="20,0,0,0">
195新增:
196新增: <!--最为频繁-->
197新增: <Grid Margin="10,0,0,0" Width="320" Height="400" VerticalAlignment="Top">
164198 <Grid.RowDefinitions>
165199 <RowDefinition Height="auto"/>
166删除: <RowDefinition Height="auto"/>
200新增: <RowDefinition Height="*"/>
167201 </Grid.RowDefinitions>
202新增:
168203 <TextBlock Text="最为频繁" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
169204 <Border Grid.Row="1" Margin="0,5,0,0" Background="{DynamicResource StandardBackgroundBrush}" Padding="20" CornerRadius="10">
170删除: <charts:Charts ItemMenu="{Binding AppContextMenu}" Data="{Binding TopData}" ChartsType="HorizontalA" ClickCommand="{Binding ToDetailCommand}" IsCanScroll="False"/>
205新增: <charts:Charts VerticalAlignment="Center" ItemMenu="{Binding AppContextMenu}" Data="{Binding TopData}" ChartsType="HorizontalA" ClickCommand="{Binding ToDetailCommand}" IsCanScroll="False"/>
171206 </Border>
172207 </Grid>
173删除: </Grid>
174208
209新增: <!--<Grid Width="680" HorizontalAlignment="Left">
210新增: <Grid.ColumnDefinitions>
211新增: <ColumnDefinition Width="*"/>
212新增: <ColumnDefinition Width="*"/>
213新增: </Grid.ColumnDefinitions>
214新增: <Grid >
215新增: <Grid.RowDefinitions>
216新增: <RowDefinition Height="auto"/>
217新增: <RowDefinition Height="*"/>
218新增: </Grid.RowDefinitions>
219新增: <TextBlock Text="分类" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
220新增: <Border Margin="0,5,0,0" Grid.Row="1" Background="{DynamicResource StandardBackgroundBrush}" Padding="20" CornerRadius="10">
221新增: <charts:Charts Margin="10,20,10,10" Height="230" Width="230" ChartsType="Radar" Data="{Binding Data}"/>
222新增:
223新增: </Border>
224新增: </Grid>
225新增: <Grid Grid.Column="1" Margin="20,0,0,0">
226新增: <Grid.RowDefinitions>
227新增: <RowDefinition Height="auto"/>
228新增: <RowDefinition Height="auto"/>
229新增: </Grid.RowDefinitions>
230新增: <TextBlock Text="最为频繁" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
231新增: <Border Grid.Row="1" Margin="0,5,0,0" Background="{DynamicResource StandardBackgroundBrush}" Padding="20" CornerRadius="10">
232新增: <charts:Charts ItemMenu="{Binding AppContextMenu}" Data="{Binding TopData}" ChartsType="HorizontalA" ClickCommand="{Binding ToDetailCommand}" IsCanScroll="False"/>
233新增: </Border>
234新增: </Grid>
235新增: </Grid>-->
175236
176237
238新增: </WrapPanel>
177239 </StackPanel>
178240</Page>