跳到主要内容

github/tai

公开

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

提交记录
修改Core/Librarys/Time.cs+13 −0看文件
@@ -8,6 +8,19 @@ namespace Core.Librarys
88{
99 public class Time
1010 {
11新增: public static string ToHoursString(double seconds)
12新增: {
13新增: double hours = seconds / 60 / 60;
14新增:
15新增: if (hours > 0.1)
16新增: {
17新增: return hours.ToString("f2");
18新增: }
19新增: else
20新增: {
21新增: return "0";
22新增: }
23新增: }
1124 public static string ToString(int seconds)
1225 {
1326 if (seconds < 60)
修改Core/Servicers/Instances/Data.cs+80 −68看文件
@@ -19,102 +19,99 @@ namespace Core.Servicers.Instances
1919 public class Data : IData
2020 {
2121 private readonly IAppData appData;
22删除: private readonly object setLock = new object();
2322 public Data(IAppData appData)
2423 {
2524 this.appData = appData;
2625 }
2726 public void Set(string processName, int seconds, DateTime? time_ = null)
2827 {
29删除: lock (setLock)
28新增:
29新增: DateTime time = !time_.HasValue ? DateTime.Now : time_.Value;
30新增: var today = time.Date;
31新增:
32新增: // 当前时段
33新增: var nowtime = new DateTime(today.Year, today.Month, today.Day, time.Hour, 0, 0);
34新增:
35新增: if (string.IsNullOrEmpty(processName) || seconds <= 0)
3036 {
31删除: DateTime time = !time_.HasValue ? DateTime.Now : time_.Value;
32删除: var today = time.Date;
37新增: return;
38新增: }
3339
34删除: // 当前时段
35删除: var nowtime = new DateTime(today.Year, today.Month, today.Day, time.Hour, 0, 0);
40新增: AppModel app = appData.GetApp(processName);
41新增:
42新增: if (app == null)
43新增: {
44新增: return;
45新增: }
3646
37删除: if (string.IsNullOrEmpty(processName) || seconds <= 0)
38删除: {
39删除: return;
40删除: }
4147
42删除: AppModel app = appData.GetApp(processName);
4348
44删除: if (app == null)
49新增: using (var db = new TaiDbContext())
50新增: {
51新增: var res = db.DailyLog.SingleOrDefault(m => m.Date == today && m.AppModelID == app.ID);
52新增: if (res == null)
4553 {
46删除: return;
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;
4765 }
4866
67新增: // 分时段记录数据
4968
50删除:
51删除: using (var db = new TaiDbContext())
69新增: var hourslog = db.HoursLog.SingleOrDefault(
70新增: m =>
71新增: m.DataTime == nowtime
72新增: && m.AppModelID == app.ID
73新增: );
74新增: if (hourslog == null)
5275 {
53删除: var res = db.DailyLog.SingleOrDefault(m => m.Date == today && m.AppModelID == app.ID);
54删除: if (res == null)
76新增: // 没有时创建
77新增:
78新增: if (seconds > 3600)
5579 {
56删除: //数据库中没有时则创建
57删除: db.DailyLog.Add(new Models.DailyLogModel()
58删除: {
59删除: Date = today,
60删除: AppModelID = app.ID,
61删除: Time = seconds,
62删除: });
80新增: int overflowSeconds = seconds - 3600;
81新增: Set(processName, overflowSeconds, nowtime.AddHours(1));
82新增:
83新增: seconds = 3600;
6384 }
64删除: else
85新增:
86新增: db.HoursLog.Add(new Models.HoursLogModel()
6587 {
66删除: res.Time += seconds;
67删除: }
88新增: DataTime = nowtime,
89新增: AppModelID = app.ID,
90新增: Time = seconds
91新增: });
92新增: }
93新增: else
94新增: {
95新增: if (hourslog.Time + seconds > 3600)
96新增: {
97新增: hourslog.Time = 3600;
6898
69删除: // 分时段记录数据
99新增: int overflowSeconds = hourslog.Time + seconds - 3600;
70100
71删除: var hourslog = db.HoursLog.SingleOrDefault(
72删除: m =>
73删除: m.DataTime == nowtime
74删除: && m.AppModelID == app.ID
75删除: );
76删除: if (hourslog == null)
77删除: {
78删除: // 没有时创建
79删除:
80删除: if (seconds > 3600)
81删除: {
82删除: int overflowSeconds = seconds - 3600;
83删除: Set(processName, overflowSeconds, nowtime.AddHours(1));
84删除:
85删除: seconds = 3600;
86删除: }
87删除:
88删除: db.HoursLog.Add(new Models.HoursLogModel()
89删除: {
90删除: DataTime = nowtime,
91删除: AppModelID = app.ID,
92删除: Time = seconds
93删除: });
101新增: Set(processName, overflowSeconds, nowtime.AddHours(1));
94102 }
95103 else
96104 {
97删除: if (hourslog.Time + seconds > 3600)
98删除: {
99删除: hourslog.Time = 3600;
100删除:
101删除: int overflowSeconds = hourslog.Time + seconds - 3600;
102删除:
103删除: Set(processName, overflowSeconds, nowtime.AddHours(1));
104删除: }
105删除: else
106删除: {
107删除: hourslog.Time += seconds;
108删除: }
105新增: hourslog.Time += seconds;
109106 }
107新增: }
110108
111删除: // 统计使用时长
112删除: app.TotalTime += seconds;
109新增: // 统计使用时长
110新增: app.TotalTime += seconds;
113111
114删除: appData.UpdateApp(app);
112新增: appData.UpdateApp(app);
115113
116删除: db.SaveChanges();
117删除: }
114新增: db.SaveChanges();
118115 }
119116 }
120117
@@ -627,5 +624,20 @@ namespace Core.Servicers.Instances
627624 }
628625 }
629626 }
627新增:
628新增: public int GetDateRangeAppCount(DateTime start, DateTime end)
629新增: {
630新增: IEnumerable<AppModel> apps = appData.GetAllApps();
631新增:
632新增: using (var db = new TaiDbContext())
633新增: {
634新增: var res = db.DailyLog
635新增: .Where(m => m.Date >= start && m.Date <= end && m.AppModelID != 0)
636新增: .GroupBy(m => m.AppModelID)
637新增: .Count();
638新增:
639新增: return res;
640新增: }
641新增: }
630642 }
631643}
修改Core/Servicers/Interfaces/IData.cs+8 −0看文件
@@ -97,5 +97,13 @@ namespace Core.Servicers.Interfaces
9797 /// 导出数据到EXCEL
9898 /// </summary>
9999 void ExportToExcel(string dir, DateTime start, DateTime end);
100新增: /// <summary>
101新增: /// 获取指定日期范围使用应用量
102新增: /// </summary>
103新增: /// <param name="start"></param>
104新增: /// <param name="end"></param>
105新增: /// <returns></returns>
106新增: int GetDateRangeAppCount(DateTime start, DateTime end);
107新增:
100108 }
101109}
修改UI/Models/ChartPageModel.cs+9 −0看文件
@@ -84,5 +84,14 @@ namespace UI.Models
8484
8585 private ContextMenu AppContextMenu_;
8686 public ContextMenu AppContextMenu { get { return AppContextMenu_; } set { AppContextMenu_ = value; OnPropertyChanged(); } }
87新增:
88新增: private string TotalHours_;
89新增: public string TotalHours { get { return TotalHours_; } set { TotalHours_ = value; OnPropertyChanged(); } }
90新增:
91新增: private string TopHours_;
92新增: public string TopHours { get { return TopHours_; } set { TopHours_ = value; OnPropertyChanged(); } }
93新增: private string AppCount_;
94新增: public string AppCount { get { return AppCount_; } set { AppCount_ = value; OnPropertyChanged(); } }
95新增:
8796 }
8897}
修改UI/Views/ChartPage.xaml+114 −7看文件
@@ -37,15 +37,122 @@
3737 </base:View>
3838 </Grid>
3939 </Border>
40删除: <TextBlock Text="分类" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
40新增: <Grid Width="680" HorizontalAlignment="Left" Margin="0,20,0,0">
41新增: <Grid.ColumnDefinitions>
42新增: <ColumnDefinition Width="*"/>
43新增: <ColumnDefinition Width="*"/>
44新增: <ColumnDefinition Width="*"/>
45新增: </Grid.ColumnDefinitions>
46新增: <Border Margin="0,5,0,0" Background="White" Padding="10" CornerRadius="10">
47新增: <Grid>
48新增: <Grid.ColumnDefinitions>
49新增: <ColumnDefinition Width="auto"/>
50新增: <ColumnDefinition Width="*"/>
51新增: </Grid.ColumnDefinitions>
52新增: <Border Background="#2b20d9" Width="40" Height="40" CornerRadius="6">
4153
42删除: <Border Margin="0,15,0,0" Height="360" Width="680" HorizontalAlignment="Left" Background="White" Padding="20" CornerRadius="10">
43删除: <charts:Charts DataMaximum="{Binding DataMaximum}" NameIndexStart="{Binding NameIndexStart}" ChartsType="Column" Data="{Binding Data}"/>
54新增: <base:Icon IconType="SkypeCircleClock" Foreground="White"/>
55新增: </Border>
56新增: <Grid Grid.Column="1" Margin="10,0,0,0" VerticalAlignment="Center">
57新增: <Grid.RowDefinitions>
58新增: <RowDefinition Height="auto"/>
59新增: <RowDefinition Height="auto"/>
60新增: </Grid.RowDefinitions>
61新增: <TextBlock >
62新增: <Run Text="{Binding TotalHours}" FontSize="20"/>
63新增: <Run Text="小时" FontSize="12" Foreground="#5c5c5c"/>
64新增: </TextBlock>
65新增: <TextBlock Grid.Row="1" Margin="0,3,0,0" Text="总计" Foreground="#5c5c5c"/>
66新增:
67新增: </Grid>
68新增: </Grid>
69新增: </Border>
70新增: <Border Grid.Column="1" Margin="20,5,0,0" Background="White" Padding="10" CornerRadius="10">
71新增: <Grid>
72新增: <Grid.ColumnDefinitions>
73新增: <ColumnDefinition Width="auto"/>
74新增: <ColumnDefinition Width="*"/>
75新增: </Grid.ColumnDefinitions>
76新增: <Border Background="#ff305b" Width="40" Height="40" CornerRadius="6">
77新增:
78新增: <base:Icon IconType="FlameSolid" Foreground="White"/>
79新增: </Border>
80新增: <Grid Grid.Column="1" Margin="10,0,0,0" VerticalAlignment="Center">
81新增: <Grid.RowDefinitions>
82新增: <RowDefinition Height="auto"/>
83新增: <RowDefinition Height="auto"/>
84新增: </Grid.RowDefinitions>
85新增: <TextBlock >
86新增: <Run Text="{Binding TopHours}" FontSize="20"/>
87新增: <Run Text="小时" FontSize="12" Foreground="#5c5c5c"/>
88新增: </TextBlock>
89新增: <TextBlock Grid.Row="1" Margin="0,3,0,0" Text="最长使用" Foreground="#5c5c5c"/>
90新增:
91新增: </Grid>
92新增: </Grid>
93新增: </Border>
94新增: <Border Grid.Column="2" Margin="20,5,0,0" Background="White" Padding="10" CornerRadius="10">
95新增: <Grid>
96新增: <Grid.ColumnDefinitions>
97新增: <ColumnDefinition Width="auto"/>
98新增: <ColumnDefinition Width="*"/>
99新增: </Grid.ColumnDefinitions>
100新增: <Border Background="#cccccc" Width="40" Height="40" CornerRadius="6">
101新增:
102新增: <base:Icon IconType="MSNVideosSolid" Foreground="White"/>
103新增: </Border>
104新增: <Grid Grid.Column="1" Margin="10,0,0,0" VerticalAlignment="Center">
105新增: <Grid.RowDefinitions>
106新增: <RowDefinition Height="auto"/>
107新增: <RowDefinition Height="auto"/>
108新增: </Grid.RowDefinitions>
109新增: <TextBlock >
110新增: <Run Text="{Binding AppCount}" FontSize="20"/>
111新增: <Run Text="个" FontSize="12" Foreground="#5c5c5c"/>
112新增: </TextBlock>
113新增: <TextBlock Grid.Row="1" Margin="0,3,0,0" Text="应用量" Foreground="#5c5c5c"/>
114新增:
115新增: </Grid>
116新增: </Grid>
117新增: </Border>
118新增: </Grid>
119新增:
120新增: <TextBlock Text="时段" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
121新增:
122新增: <Border Margin="0,5,0,0" Height="360" Width="680" HorizontalAlignment="Left" Background="White" Padding="20" CornerRadius="10">
123新增: <charts:Charts IsShowTotal="False" DataMaximum="{Binding DataMaximum}" NameIndexStart="{Binding NameIndexStart}" ChartsType="Column" Data="{Binding Data}"/>
44124
45125 </Border>
46删除: <TextBlock Text="最为频繁的应用" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
47删除: <Border Margin="0,10,0,0" Width="680" HorizontalAlignment="Left" Background="White" Padding="20" CornerRadius="10">
48删除: <charts:Charts Height="300" ItemMenu="{Binding AppContextMenu}" Data="{Binding TopData}" ChartsType="HorizontalA" ClickCommand="{Binding ToDetailCommand}"/>
49删除: </Border>
126新增:
127新增: <Grid Width="680" HorizontalAlignment="Left">
128新增: <Grid.ColumnDefinitions>
129新增: <ColumnDefinition Width="*"/>
130新增: <ColumnDefinition Width="*"/>
131新增: </Grid.ColumnDefinitions>
132新增: <Grid >
133新增: <Grid.RowDefinitions>
134新增: <RowDefinition Height="auto"/>
135新增: <RowDefinition Height="*"/>
136新增: </Grid.RowDefinitions>
137新增: <TextBlock Text="分类" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
138新增: <Border Margin="0,5,0,0" Grid.Row="1" Background="White" Padding="20" CornerRadius="10">
139新增: <charts:Charts Margin="10,20,10,10" Height="230" Width="230" ChartsType="Radar" Data="{Binding Data}"/>
140新增:
141新增: </Border>
142新增: </Grid>
143新增: <Grid Grid.Column="1" Margin="20,0,0,0">
144新增: <Grid.RowDefinitions>
145新增: <RowDefinition Height="auto"/>
146新增: <RowDefinition Height="auto"/>
147新增: </Grid.RowDefinitions>
148新增: <TextBlock Text="最为频繁" Foreground="#5c5c5c" FontSize="15" Margin="0,20,0,5"/>
149新增: <Border Grid.Row="1" Margin="0,5,0,0" Background="White" Padding="20" CornerRadius="10">
150新增: <charts:Charts ItemMenu="{Binding AppContextMenu}" Data="{Binding TopData}" ChartsType="HorizontalA" ClickCommand="{Binding ToDetailCommand}" IsCanScroll="False"/>
151新增: </Border>
152新增: </Grid>
153新增: </Grid>
154新增:
155新增:
156新增:
50157 </StackPanel>
51158</Page>