跳到主要内容

github/tai

公开

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

提交记录
修改Core/App.config+8 −0看文件
@@ -22,6 +22,14 @@
2222 <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
2323 <bindingRedirect oldVersion="0.0.0.0-1.0.115.5" newVersion="1.0.115.5" />
2424 </dependentAssembly>
25新增: <dependentAssembly>
26新增: <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
27新增: <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
28新增: </dependentAssembly>
29新增: <dependentAssembly>
30新增: <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
31新增: <bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
32新增: </dependentAssembly>
2533 </assemblyBinding>
2634 </runtime>
2735</configuration>
文件末尾没有换行
修改Core/Core.csproj+29 −0看文件
@@ -59,18 +59,42 @@
5959 <ErrorReport>prompt</ErrorReport>
6060 </PropertyGroup>
6161 <ItemGroup>
62新增: <Reference Include="BouncyCastle.Crypto, Version=1.8.9.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
63新增: <HintPath>..\packages\Portable.BouncyCastle.1.8.9\lib\net40\BouncyCastle.Crypto.dll</HintPath>
64新增: </Reference>
65新增: <Reference Include="CsvHelper, Version=29.0.0.0, Culture=neutral, PublicKeyToken=8c4959082be5c823, processorArchitecture=MSIL">
66新增: <HintPath>..\packages\CsvHelper.29.0.0\lib\net45\CsvHelper.dll</HintPath>
67新增: </Reference>
6268 <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
6369 <HintPath>..\packages\EntityFramework.6.3.0\lib\net45\EntityFramework.dll</HintPath>
6470 </Reference>
6571 <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
6672 <HintPath>..\packages\EntityFramework.6.3.0\lib\net45\EntityFramework.SqlServer.dll</HintPath>
6773 </Reference>
74新增: <Reference Include="ICSharpCode.SharpZipLib, Version=1.3.3.11, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
75新增: <HintPath>..\packages\SharpZipLib.1.3.3\lib\net45\ICSharpCode.SharpZipLib.dll</HintPath>
76新增: </Reference>
6877 <Reference Include="Microsoft.Win32.TaskScheduler, Version=2.10.1.0, Culture=neutral, PublicKeyToken=e25603a88b3aa7da, processorArchitecture=MSIL">
6978 <HintPath>..\packages\TaskScheduler.2.10.1\lib\net452\Microsoft.Win32.TaskScheduler.dll</HintPath>
7079 </Reference>
7180 <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
7281 <HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
7382 </Reference>
83新增: <Reference Include="NPOI, Version=2.5.6.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
84新增: <HintPath>..\packages\NPOI.2.5.6\lib\net45\NPOI.dll</HintPath>
85新增: </Reference>
86新增: <Reference Include="Npoi.Mapper, Version=4.1.0.0, Culture=neutral, PublicKeyToken=ecb4c11f6eaa0b06, processorArchitecture=MSIL">
87新增: <HintPath>..\packages\Npoi.Mapper.4.1.0\lib\net45\Npoi.Mapper.dll</HintPath>
88新增: </Reference>
89新增: <Reference Include="NPOI.OOXML, Version=2.5.6.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
90新增: <HintPath>..\packages\NPOI.2.5.6\lib\net45\NPOI.OOXML.dll</HintPath>
91新增: </Reference>
92新增: <Reference Include="NPOI.OpenXml4Net, Version=2.5.6.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
93新增: <HintPath>..\packages\NPOI.2.5.6\lib\net45\NPOI.OpenXml4Net.dll</HintPath>
94新增: </Reference>
95新增: <Reference Include="NPOI.OpenXmlFormats, Version=2.5.6.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1, processorArchitecture=MSIL">
96新增: <HintPath>..\packages\NPOI.2.5.6\lib\net45\NPOI.OpenXmlFormats.dll</HintPath>
97新增: </Reference>
7498 <Reference Include="PresentationCore" />
7599 <Reference Include="SQLitePCLRaw.core, Version=2.0.6.1341, Culture=neutral, PublicKeyToken=1488e028ca7ab535, processorArchitecture=MSIL">
76100 <HintPath>..\packages\SQLitePCLRaw.core.2.0.6\lib\netstandard2.0\SQLitePCLRaw.core.dll</HintPath>
@@ -100,6 +124,11 @@
100124 <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
101125 <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
102126 </Reference>
127新增: <Reference Include="System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
128新增: <HintPath>..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
129新增: <Private>True</Private>
130新增: <Private>True</Private>
131新增: </Reference>
103132 <Reference Include="System.Windows.Forms" />
104133 <Reference Include="System.Xml.Linq" />
105134 <Reference Include="System.Data.DataSetExtensions" />
修改Core/Servicers/Instances/Data.cs+58 −0看文件
@@ -9,6 +9,10 @@ using System.Data.Entity;
99using System.Windows.Threading;
1010using Core.Models.Data;
1111using Core.Librarys;
12新增:using Npoi.Mapper;
13新增:using System.IO;
14新增:using CsvHelper;
15新增:using System.Globalization;
1216
1317namespace Core.Servicers.Instances
1418{
@@ -569,5 +573,59 @@ namespace Core.Servicers.Instances
569573 db.Database.ExecuteSqlCommand("delete from HoursLogModels where DataTime>='" + start.Date.ToString("yyyy-MM-01 00:00:00") + "' and DataTime<= '" + end.Date.ToString("yyyy-MM-dd 23:59:59") + "'");
570574 }
571575 }
576新增:
577新增: public void ExportToExcel(string dir, DateTime start, DateTime end)
578新增: {
579新增: start = new DateTime(start.Year, start.Month, 1, 0, 0, 0);
580新增: end = new DateTime(end.Year, end.Month, DateTime.DaysInMonth(end.Year, end.Month), 23, 59, 59);
581新增:
582新增: using (var db = new TaiDbContext())
583新增: {
584新增: var day = db.DailyLog.Where(m => m.Date >= start.Date && m.Date <= end.Date)
585新增: .Select(m => new
586新增: {
587新增: 日期 = m.Date,
588新增: 应用 = m.AppModel != null ? m.AppModel.Name : "未知",
589新增: 描述 = m.AppModel != null ? m.AppModel.Description : "未知",
590新增: 时长 = m.Time,
591新增: 分类 = m.AppModel != null && m.AppModel.Category != null ? m.AppModel.Category.Name : "未知"
592新增: })
593新增: .ToList();
594新增:
595新增: var hours = db.HoursLog.Where(m => m.DataTime >= start && m.DataTime <= end)
596新增: .Select(m => new
597新增: {
598新增: 时段 = m.DataTime,
599新增: 应用 = m.AppModel != null ? m.AppModel.Name : "未知",
600新增: 描述 = m.AppModel != null ? m.AppModel.Description : "未知",
601新增: 时长 = m.Time,
602新增: 分类 = m.AppModel != null && m.AppModel.Category != null ? m.AppModel.Category.Name : "未知"
603新增: })
604新增: .ToList();
605新增: var mapper = new Mapper();
606新增: mapper.Put(day, "每日");
607新增: mapper.Put(hours, "时段");
608新增:
609新增: string name = $"Tai数据({start.ToString("yyyy年MM月")}-{end.ToString("yyyy年MM月")})";
610新增: if (start.Year == end.Year && start.Month == end.Month)
611新增: {
612新增: name = $"Tai数据({start.ToString("yyyy年MM月")})";
613新增: }
614新增: mapper.Save(Path.Combine(dir, $"{name}.xlsx"));
615新增:
616新增: // 导出csv
617新增: using (var writer = new StreamWriter(Path.Combine(dir, $"{name}-每日.csv"), false, System.Text.Encoding.UTF8))
618新增: using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
619新增: {
620新增: csv.WriteRecords(day);
621新增: }
622新增:
623新增: using (var writer = new StreamWriter(Path.Combine(dir, $"{name}-时段.csv"), false, System.Text.Encoding.UTF8))
624新增: using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
625新增: {
626新增: csv.WriteRecords(hours);
627新增: }
628新增: }
629新增: }
572630 }
573631}
修改Core/Servicers/Instances/Main.cs+2 −0看文件
@@ -103,6 +103,8 @@ namespace Core.Servicers.Instances
103103
104104 private void DateTimeObserver_OnDateTimeChanging(object sender, DateTime time)
105105 {
106新增: Logger.Info("[time changed] status:" + sleepStatus + ",process:" + activeProcess + ",start:" + activeStartTime.ToString() + ",end:" + DateTime.Now.ToString() + ",time:" + time.ToString());
107新增:
106108 if (sleepStatus == SleepStatus.Wake)
107109 {
108110 UpdateTime(time);
修改Core/Servicers/Interfaces/IData.cs+4 −1看文件
@@ -93,6 +93,9 @@ namespace Core.Servicers.Interfaces
9393 /// <param name="start"></param>
9494 /// <param name="end"></param>
9595 void ClearRange(DateTime start, DateTime end);
96删除:
96新增: /// <summary>
97新增: /// 导出数据到EXCEL
98新增: /// </summary>
99新增: void ExportToExcel(string dir, DateTime start, DateTime end);
97100 }
98101}
修改Core/packages.config+7 −0看文件
@@ -1,7 +1,13 @@
11<?xml version="1.0" encoding="utf-8"?>
22<packages>
3新增: <package id="CsvHelper" version="29.0.0" targetFramework="net461" />
34 <package id="EntityFramework" version="6.3.0" targetFramework="net461" />
5新增: <package id="Microsoft.CSharp" version="4.3.0" targetFramework="net461" />
46 <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net461" />
7新增: <package id="NPOI" version="2.5.6" targetFramework="net461" />
8新增: <package id="Npoi.Mapper" version="4.1.0" targetFramework="net461" />
9新增: <package id="Portable.BouncyCastle" version="1.8.9" targetFramework="net461" />
10新增: <package id="SharpZipLib" version="1.3.3" targetFramework="net461" />
511 <package id="SQLitePCLRaw.core" version="2.0.6" targetFramework="net461" />
612 <package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.115.5" targetFramework="net461" />
713 <package id="System.Buffers" version="4.4.0" targetFramework="net461" />
@@ -12,5 +18,6 @@
1218 <package id="System.Memory" version="4.5.3" targetFramework="net461" />
1319 <package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net461" />
1420 <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net461" />
21新增: <package id="System.ValueTuple" version="4.3.0" targetFramework="net461" />
1522 <package id="TaskScheduler" version="2.10.1" targetFramework="net461" />
1623</packages>
文件末尾没有换行
修改UI/App.config+8 −0看文件
@@ -13,6 +13,14 @@
1313 <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
1414 <bindingRedirect oldVersion="0.0.0.0-1.0.115.5" newVersion="1.0.115.5" />
1515 </dependentAssembly>
16新增: <dependentAssembly>
17新增: <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
18新增: <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
19新增: </dependentAssembly>
20新增: <dependentAssembly>
21新增: <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
22新增: <bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
23新增: </dependentAssembly>
1624 </assemblyBinding>
1725 </runtime>
1826</configuration>
修改UI/Models/SettingPageModel.cs+6 −0看文件
@@ -41,5 +41,11 @@ namespace UI.Models
4141
4242 private DateTime DelDataEndMonthDate_;
4343 public DateTime DelDataEndMonthDate { get { return DelDataEndMonthDate_; } set { DelDataEndMonthDate_ = value; OnPropertyChanged(); } }
44新增:
45新增: private DateTime ExportDataStartMonthDate_;
46新增: public DateTime ExportDataStartMonthDate { get { return ExportDataStartMonthDate_; } set { ExportDataStartMonthDate_ = value; OnPropertyChanged(); } }
47新增:
48新增: private DateTime ExportDataEndMonthDate_;
49新增: public DateTime ExportDataEndMonthDate { get { return ExportDataEndMonthDate_; } set { ExportDataEndMonthDate_ = value; OnPropertyChanged(); } }
4450 }
4551}
修改UI/ViewModels/SettingPageVM.cs+25 −1看文件
@@ -10,6 +10,7 @@ using System.Linq;
1010using System.Reflection;
1111using System.Text;
1212using System.Threading.Tasks;
13新增:using System.Windows.Forms;
1314using UI.Controls;
1415using UI.Models;
1516
@@ -24,6 +25,7 @@ namespace UI.ViewModels
2425 public Command OpenURL { get; set; }
2526 public Command CheckUpdate { get; set; }
2627 public Command DelDataCommand { get; set; }
28新增: public Command ExportDataCommand { get; set; }
2729
2830 public SettingPageVM(IAppConfig appConfig, MainViewModel mainVM, IData data)
2931 {
@@ -34,6 +36,7 @@ namespace UI.ViewModels
3436 OpenURL = new Command(new Action<object>(OnOpenURL));
3537 CheckUpdate = new Command(new Action<object>(OnCheckUpdate));
3638 DelDataCommand = new Command(new Action<object>(OnDelData));
39新增: ExportDataCommand = new Command(new Action<object>(OnExportData));
3740
3841 Init();
3942 }
@@ -101,8 +104,10 @@ namespace UI.ViewModels
101104 Version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
102105
103106 DelDataStartMonthDate = DateTime.Now;
104删除:
105107 DelDataEndMonthDate = DateTime.Now;
108新增:
109新增: ExportDataStartMonthDate = DateTime.Now;
110新增: ExportDataEndMonthDate = DateTime.Now;
106111 }
107112
108113
@@ -169,5 +174,24 @@ namespace UI.ViewModels
169174
170175 mainVM.Toast("操作已完成", Controls.Window.ToastType.Success);
171176 }
177新增:
178新增: private void OnExportData(object obj)
179新增: {
180新增: try
181新增: {
182新增: FolderBrowserDialog dialog = new FolderBrowserDialog();
183新增: dialog.Description = "请选择导出位置";
184新增: if (dialog.ShowDialog() == DialogResult.OK)
185新增: {
186新增: data.ExportToExcel(dialog.SelectedPath, ExportDataStartMonthDate, ExportDataEndMonthDate);
187新增: mainVM.Toast("导出数据完成", Controls.Window.ToastType.Success);
188新增: }
189新增: }
190新增: catch (Exception ec)
191新增: {
192新增: Logger.Error(ec.ToString());
193新增: mainVM.Toast("导出数据失败", Controls.Window.ToastType.Error, Controls.Base.IconTypes.Blocked);
194新增: }
195新增: }
172196 }
173197}
修改UI/Views/SettingPage.xaml+13 −1看文件
@@ -56,7 +56,19 @@
5656 <Btn:Button Margin="20,0,0,0" Content="执行" Width="80" Background="#f51837" Foreground="White" Command="{Binding DelDataCommand}"/>
5757 </StackPanel>
5858 </Border>
59删除:
59新增: <TextBlock Text="导出数据" FontSize="14" Margin="0,15,0,0"/>
60新增: <Border Background="White" Padding="20" CornerRadius="6" Margin="0,15,0,0">
61新增: <StackPanel>
62新增: <TextBlock Text="导出为xlsx和csv格式,需要注意:没有设置分类的应用数据不会导出。" Foreground="#989CA1" FontSize="12"/>
63新增: <StackPanel Orientation="Horizontal" Margin="0,10,0,0">
64新增: <TextBlock Text="从" VerticalAlignment="Center"/>
65新增: <select:DateSelect Date="{Binding ExportDataStartMonthDate,Mode=TwoWay}" Margin="10,0" SelectType="Month"/>
66新增: <TextBlock Text="到" VerticalAlignment="Center"/>
67新增: <select:DateSelect Date="{Binding ExportDataEndMonthDate,Mode=TwoWay}" Margin="10,0" SelectType="Month"/>
68新增: <Btn:Button Margin="20,0,0,0" Content="导出" Width="80" Command="{Binding ExportDataCommand}"/>
69新增: </StackPanel>
70新增: </StackPanel>
71新增: </Border>
6072 </StackPanel>
6173 </TabItem>
6274 <TabItem>