提交记录修改Core/Core.csproj+7 −4看文件
改名Core/Librarys/SQLite/StatisticContext.cs → Core/Librarys/SQLite/TaiDbContext.cs+14 −3看文件
新增Core/Models/AppModel.cs+50 −0看文件
修改Core/Models/DailyLogModel.cs+16 −10看文件
修改Core/Models/HoursLogModel.cs+15 −7看文件
新增Core/Servicers/Instances/AppData.cs+126 −0看文件
修改Core/Servicers/Instances/Data.cs+118 −44看文件
修改Core/Servicers/Instances/Main.cs+31 −27看文件
新增Core/Servicers/Interfaces/IAppData.cs+37 −0看文件
修改Core/Servicers/Interfaces/IData.cs+4 −3看文件
修改UI/App.xaml.cs+11 −3看文件
修改UI/ViewModels/DataPageVM.cs+5 −4看文件
修改UI/ViewModels/DetailPageVM.cs+6 −5看文件
修改UI/ViewModels/IndexPageVM.cs+4 −4看文件
| @@ -73,9 +73,6 @@ | ||
| 73 | 73 | <HintPath>..\packages\SQLitePCLRaw.core.2.0.6\lib\netstandard2.0\SQLitePCLRaw.core.dll</HintPath> |
| 74 | 74 | </Reference> |
| 75 | 75 | <Reference Include="System" /> |
| 76 | 删除: <Reference Include="System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> | |
| 77 | 删除: <HintPath>..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll</HintPath> | |
| 78 | 删除: </Reference> | |
| 79 | 76 | <Reference Include="System.ComponentModel.DataAnnotations" /> |
| 80 | 77 | <Reference Include="System.Core" /> |
| 81 | 78 | <Reference Include="System.Data.SQLite, Version=1.0.115.5, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> |
| @@ -88,6 +85,7 @@ | ||
| 88 | 85 | <HintPath>..\packages\System.Data.SQLite.Linq.1.0.115.5\lib\net46\System.Data.SQLite.Linq.dll</HintPath> |
| 89 | 86 | </Reference> |
| 90 | 87 | <Reference Include="System.Drawing" /> |
| 88 | 新增: <Reference Include="System.Management" /> | |
| 91 | 89 | <Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> |
| 92 | 90 | <HintPath>..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll</HintPath> |
| 93 | 91 | </Reference> |
| @@ -98,6 +96,7 @@ | ||
| 98 | 96 | <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> |
| 99 | 97 | <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath> |
| 100 | 98 | </Reference> |
| 99 | 新增: <Reference Include="System.Windows.Forms" /> | |
| 101 | 100 | <Reference Include="System.Xml.Linq" /> |
| 102 | 101 | <Reference Include="System.Data.DataSetExtensions" /> |
| 103 | 102 | <Reference Include="Microsoft.CSharp" /> |
| @@ -115,8 +114,10 @@ | ||
| 115 | 114 | <Compile Include="Librarys\Iconer.cs" /> |
| 116 | 115 | <Compile Include="Librarys\SQLite\SQLiteBuilder.cs" /> |
| 117 | 116 | <Compile Include="Librarys\SQLite\SQLiteConfiguration.cs" /> |
| 118 | 删除: <Compile Include="Librarys\SQLite\StatisticContext.cs" /> | |
| 117 | 新增: <Compile Include="Librarys\SQLite\TaiDbContext.cs" /> | |
| 119 | 118 | <Compile Include="Librarys\Win32API.cs" /> |
| 119 | 新增: <Compile Include="Models\AppModel.cs" /> | |
| 120 | 新增: <Compile Include="Models\CategoryModel.cs" /> | |
| 120 | 121 | <Compile Include="Models\Config\ConfigAttribute.cs" /> |
| 121 | 122 | <Compile Include="Models\Config\ConfigModel.cs" /> |
| 122 | 123 | <Compile Include="Models\Config\BehaviorModel.cs" /> |
| @@ -126,6 +127,7 @@ | ||
| 126 | 127 | <Compile Include="Models\DailyLogModel.cs" /> |
| 127 | 128 | <Compile Include="Properties\AssemblyInfo.cs" /> |
| 128 | 129 | <Compile Include="Servicers\Instances\AppConfig.cs" /> |
| 130 | 新增: <Compile Include="Servicers\Instances\AppData.cs" /> | |
| 129 | 131 | <Compile Include="Servicers\Instances\Data.cs" /> |
| 130 | 132 | <Compile Include="Librarys\Logger.cs" /> |
| 131 | 133 | <Compile Include="Servicers\Instances\DateObserver.cs" /> |
| @@ -133,6 +135,7 @@ | ||
| 133 | 135 | <Compile Include="Servicers\Instances\Observer.cs" /> |
| 134 | 136 | <Compile Include="Servicers\Instances\Sleepdiscover.cs" /> |
| 135 | 137 | <Compile Include="Servicers\Interfaces\IAppConfig.cs" /> |
| 138 | 新增: <Compile Include="Servicers\Interfaces\IAppData.cs" /> | |
| 136 | 139 | <Compile Include="Servicers\Interfaces\IData.cs" /> |
| 137 | 140 | <Compile Include="Servicers\Interfaces\IDateObserver.cs" /> |
| 138 | 141 | <Compile Include="Servicers\Interfaces\IMain.cs" /> |
| @@ -3,13 +3,14 @@ using System; | ||
| 3 | 3 | using System.Collections.Generic; |
| 4 | 4 | using System.Data.Entity; |
| 5 | 5 | using System.Data.SQLite; |
| 6 | 新增:using System.Diagnostics; | |
| 6 | 7 | using System.Linq; |
| 7 | 8 | using System.Text; |
| 8 | 9 | using System.Threading.Tasks; |
| 9 | 10 | |
| 10 | 11 | namespace Core.Librarys.SQLite |
| 11 | 12 | { |
| 12 | 删除: public class StatisticContext : DbContext | |
| 13 | 新增: public class TaiDbContext : DbContext | |
| 13 | 14 | { |
| 14 | 15 | /// <summary> |
| 15 | 16 | /// 每日数据 |
| @@ -20,13 +21,18 @@ namespace Core.Librarys.SQLite | ||
| 20 | 21 | /// </summary> |
| 21 | 22 | public DbSet<HoursLogModel> HoursLog { get; set; } |
| 22 | 23 | public DbSet<AppModel> App { get; set; } |
| 23 | 删除: | |
| 24 | 新增: /// <summary> | |
| 25 | 新增: /// 分类 | |
| 26 | 新增: /// </summary> | |
| 27 | 新增: public DbSet<CategoryModel> Categorys { get; set; } | |
| 24 | 28 | // public StatisticContext(string n) |
| 25 | 29 | //: base("StatisticContext") |
| 26 | 30 | // { |
| 27 | 31 | // DbConfiguration.SetConfiguration(new SQLiteConfiguration()); |
| 28 | 32 | // } |
| 29 | 删除: public StatisticContext() | |
| 33 | 新增: | |
| 34 | 新增: | |
| 35 | 新增: public TaiDbContext() | |
| 30 | 36 | : base(new SQLiteConnection() |
| 31 | 37 | { |
| 32 | 38 | ConnectionString = "Data Source=.\\Data\\data.db" |
| @@ -40,5 +46,10 @@ namespace Core.Librarys.SQLite | ||
| 40 | 46 | var model = modelBuilder.Build(Database.Connection); |
| 41 | 47 | new SQLiteBuilder(model).SelfCheck(); |
| 42 | 48 | } |
| 49 | 新增: | |
| 50 | 新增: public void SelfCheck() | |
| 51 | 新增: { | |
| 52 | 新增: Database.ExecuteSqlCommand("select count(*) from sqlite_master where type='table' and name='tai'"); | |
| 53 | 新增: } | |
| 43 | 54 | } |
| 44 | 55 | } |
| 文件末尾没有换行 | ||
| @@ -0,0 +1,50 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.ComponentModel.DataAnnotations; | |
| 4 | 新增:using System.ComponentModel.DataAnnotations.Schema; | |
| 5 | 新增:using System.Linq; | |
| 6 | 新增:using System.Text; | |
| 7 | 新增:using System.Threading.Tasks; | |
| 8 | 新增: | |
| 9 | 新增:namespace Core.Models | |
| 10 | 新增:{ | |
| 11 | 新增: /// <summary> | |
| 12 | 新增: /// 应用信息模型 | |
| 13 | 新增: /// </summary> | |
| 14 | 新增: public class AppModel | |
| 15 | 新增: { | |
| 16 | 新增: | |
| 17 | 新增: [Key] | |
| 18 | 新增: public int ID { get; set; } | |
| 19 | 新增: | |
| 20 | 新增: /// <summary> | |
| 21 | 新增: /// 名称 | |
| 22 | 新增: /// </summary> | |
| 23 | 新增: public string Name { get; set; } | |
| 24 | 新增: /// <summary> | |
| 25 | 新增: /// 描述 | |
| 26 | 新增: /// </summary> | |
| 27 | 新增: public string Description { get; set; } | |
| 28 | 新增: /// <summary> | |
| 29 | 新增: /// 文件 | |
| 30 | 新增: /// </summary> | |
| 31 | 新增: public string File { get; set; } | |
| 32 | 新增: | |
| 33 | 新增: /// <summary> | |
| 34 | 新增: /// 分类ID | |
| 35 | 新增: /// </summary> | |
| 36 | 新增: public int CategoryID { get; set; } | |
| 37 | 新增: | |
| 38 | 新增: /// <summary> | |
| 39 | 新增: /// 图标路径 | |
| 40 | 新增: /// </summary> | |
| 41 | 新增: public string IconFile { get; set; } | |
| 42 | 新增: /// <summary> | |
| 43 | 新增: /// 累计使用时长 | |
| 44 | 新增: /// </summary> | |
| 45 | 新增: public int TotalTime { get; set; } | |
| 46 | 新增: | |
| 47 | 新增: [ForeignKey("CategoryID")] | |
| 48 | 新增: public virtual CategoryModel Category { get; set; } | |
| 49 | 新增: } | |
| 50 | 新增:} | |
| @@ -1,5 +1,6 @@ | ||
| 1 | 1 | using System; |
| 2 | 2 | using System.Collections.Generic; |
| 3 | 新增:using System.ComponentModel.DataAnnotations.Schema; | |
| 3 | 4 | using System.Linq; |
| 4 | 5 | using System.Text; |
| 5 | 6 | using System.Threading.Tasks; |
| @@ -21,16 +22,21 @@ namespace Core.Models | ||
| 21 | 22 | /// </summary> |
| 22 | 23 | public int Time { get; set; } = 0; |
| 23 | 24 | /// <summary> |
| 24 | 删除: /// 进程名称 | |
| 25 | 新增: /// 应用ID | |
| 25 | 26 | /// </summary> |
| 26 | 删除: public string ProcessName { get; set; } | |
| 27 | 删除: /// <summary> | |
| 28 | 删除: /// 进程描述 | |
| 29 | 删除: /// </summary> | |
| 30 | 删除: public string ProcessDescription { get; set; } | |
| 31 | 删除: /// <summary> | |
| 32 | 删除: /// 进程文件 | |
| 33 | 删除: /// </summary> | |
| 34 | 删除: public string File { get; set; } | |
| 27 | 新增: public int AppModelID { get; set; } | |
| 28 | 新增: ///// <summary> | |
| 29 | 新增: ///// 进程名称 | |
| 30 | 新增: ///// </summary> | |
| 31 | 新增: //public string ProcessName { get; set; } | |
| 32 | 新增: ///// <summary> | |
| 33 | 新增: ///// 进程描述 | |
| 34 | 新增: ///// </summary> | |
| 35 | 新增: //public string ProcessDescription { get; set; } | |
| 36 | 新增: ///// <summary> | |
| 37 | 新增: ///// 进程文件 | |
| 38 | 新增: ///// </summary> | |
| 39 | 新增: //public string File { get; set; } | |
| 40 | 新增: public virtual AppModel AppModel { get; set; } | |
| 35 | 41 | } |
| 36 | 42 | } |
| @@ -20,14 +20,22 @@ namespace Core.Models | ||
| 20 | 20 | /// 使用时长(单位:秒) |
| 21 | 21 | /// </summary> |
| 22 | 22 | public int Time { get; set; } = 0; |
| 23 | 新增: ///// <summary> | |
| 24 | 新增: ///// 【已弃用】进程名称 | |
| 25 | 新增: ///// </summary> | |
| 26 | 新增: //public string ProcessName { get; set; } | |
| 27 | 新增: | |
| 28 | 新增: ///// <summary> | |
| 29 | 新增: ///// 【已弃用】进程文件(记录以防止进程名称重复) | |
| 30 | 新增: ///// </summary> | |
| 31 | 新增: //public string File { get; set; } | |
| 32 | 新增: | |
| 23 | 33 | /// <summary> |
| 24 | 删除: /// 进程名称 | |
| 25 | 删除: /// </summary> | |
| 26 | 删除: public string ProcessName { get; set; } | |
| 27 | 删除: | |
| 28 | 删除: /// <summary> | |
| 29 | 删除: /// 进程文件(记录以防止进程名称重复) | |
| 34 | 新增: /// 应用ID | |
| 30 | 35 | /// </summary> |
| 31 | 删除: public string File { get; set; } | |
| 36 | 新增: public int AppModelID { get; set; } | |
| 37 | 新增: | |
| 38 | 新增: public virtual AppModel AppModel { get; set; } | |
| 39 | 新增: | |
| 32 | 40 | } |
| 33 | 41 | } |
| @@ -0,0 +1,126 @@ | ||
| 1 | 新增:using Core.Librarys.SQLite; | |
| 2 | 新增:using Core.Models; | |
| 3 | 新增:using Core.Servicers.Interfaces; | |
| 4 | 新增:using System; | |
| 5 | 新增:using System.Collections.Generic; | |
| 6 | 新增:using System.Diagnostics; | |
| 7 | 新增:using System.Linq; | |
| 8 | 新增:using System.Text; | |
| 9 | 新增:using System.Threading.Tasks; | |
| 10 | 新增:using System.Windows.Threading; | |
| 11 | 新增: | |
| 12 | 新增:namespace Core.Servicers.Instances | |
| 13 | 新增:{ | |
| 14 | 新增: public class AppData : IAppData | |
| 15 | 新增: { | |
| 16 | 新增: | |
| 17 | 新增: private List<AppModel> _apps; | |
| 18 | 新增: | |
| 19 | 新增: /// <summary> | |
| 20 | 新增: /// 有数据更新的app | |
| 21 | 新增: /// </summary> | |
| 22 | 新增: private List<AppModel> _updateTempApps; | |
| 23 | 新增: public AppData() | |
| 24 | 新增: { | |
| 25 | 新增: DispatcherTimer dispatcherTimer = new DispatcherTimer(); | |
| 26 | 新增: dispatcherTimer.Interval = new TimeSpan(0, 30, 0); | |
| 27 | 新增: dispatcherTimer.Tick += DispatcherTimer_Tick; | |
| 28 | 新增: dispatcherTimer.Start(); | |
| 29 | 新增: } | |
| 30 | 新增: | |
| 31 | 新增: | |
| 32 | 新增: private void DispatcherTimer_Tick(object sender, EventArgs e) | |
| 33 | 新增: { | |
| 34 | 新增: SaveAppChanges(); | |
| 35 | 新增: } | |
| 36 | 新增: public List<AppModel> GetAllApps() | |
| 37 | 新增: { | |
| 38 | 新增: return _apps; | |
| 39 | 新增: } | |
| 40 | 新增: | |
| 41 | 新增: public void Load() | |
| 42 | 新增: { | |
| 43 | 新增: Debug.WriteLine("加载app开始"); | |
| 44 | 新增: using (var db = new TaiDbContext()) | |
| 45 | 新增: { | |
| 46 | 新增: _apps = ( | |
| 47 | 新增: from app in db.App | |
| 48 | 新增: join c in db.Categorys | |
| 49 | 新增: on app.CategoryID equals c.ID into itdata | |
| 50 | 新增: from n in itdata.DefaultIfEmpty() | |
| 51 | 新增: select app | |
| 52 | 新增: ).ToList() | |
| 53 | 新增: .Select(m => new AppModel | |
| 54 | 新增: { | |
| 55 | 新增: ID = m.ID, | |
| 56 | 新增: Category = m.Category != null ? m.Category : null, | |
| 57 | 新增: CategoryID = m.CategoryID, | |
| 58 | 新增: Description = m.Description, | |
| 59 | 新增: File = m.File, | |
| 60 | 新增: IconFile = m.IconFile, | |
| 61 | 新增: Name = m.Name, | |
| 62 | 新增: TotalTime = m.TotalTime | |
| 63 | 新增: }) | |
| 64 | 新增: .ToList(); | |
| 65 | 新增: } | |
| 66 | 新增: | |
| 67 | 新增: _updateTempApps = new List<AppModel>(); | |
| 68 | 新增: } | |
| 69 | 新增: | |
| 70 | 新增: /// <summary> | |
| 71 | 新增: /// 更新app数据,要先调用GetApp获得后更改并传回才有效 | |
| 72 | 新增: /// </summary> | |
| 73 | 新增: /// <param name="app"></param> | |
| 74 | 新增: public void UpdateApp(AppModel app) | |
| 75 | 新增: { | |
| 76 | 新增: if (!_updateTempApps.Where(m => m.ID == app.ID).Any()) | |
| 77 | 新增: { | |
| 78 | 新增: _updateTempApps.Add(app); | |
| 79 | 新增: } | |
| 80 | 新增: } | |
| 81 | 新增: public AppModel GetApp(string name) | |
| 82 | 新增: { | |
| 83 | 新增: return _apps.Where(m => m.Name == name).FirstOrDefault(); | |
| 84 | 新增: } | |
| 85 | 新增: | |
| 86 | 新增: public void AddApp(AppModel app) | |
| 87 | 新增: { | |
| 88 | 新增: if (_apps.Where(m => m.Name == app.Name).Any()) | |
| 89 | 新增: { | |
| 90 | 新增: return; | |
| 91 | 新增: } | |
| 92 | 新增: | |
| 93 | 新增: using (var db = new TaiDbContext()) | |
| 94 | 新增: { | |
| 95 | 新增: db.App.Add(app); | |
| 96 | 新增: int res = db.SaveChanges(); | |
| 97 | 新增: if (res > 0) | |
| 98 | 新增: { | |
| 99 | 新增: _apps.Add(app); | |
| 100 | 新增: } | |
| 101 | 新增: } | |
| 102 | 新增: } | |
| 103 | 新增: | |
| 104 | 新增: public void SaveAppChanges() | |
| 105 | 新增: { | |
| 106 | 新增: using (var db = new TaiDbContext()) | |
| 107 | 新增: { | |
| 108 | 新增: foreach (var item in _updateTempApps) | |
| 109 | 新增: { | |
| 110 | 新增: var app = db.App.Find(item.ID); | |
| 111 | 新增: if (app != null) | |
| 112 | 新增: { | |
| 113 | 新增: app.TotalTime = item.TotalTime; | |
| 114 | 新增: app.File = item.File; | |
| 115 | 新增: app.IconFile = item.IconFile; | |
| 116 | 新增: app.Name = item.Name; | |
| 117 | 新增: app.CategoryID = item.CategoryID; | |
| 118 | 新增: app.Description = item.Description; | |
| 119 | 新增: app.Category = item.Category; | |
| 120 | 新增: } | |
| 121 | 新增: } | |
| 122 | 新增: db.SaveChanges(); | |
| 123 | 新增: } | |
| 124 | 新增: } | |
| 125 | 新增: } | |
| 126 | 新增:} | |
| @@ -1,17 +1,22 @@ | ||
| 1 | 1 | using Core.Librarys.SQLite; |
| 2 | 2 | using Core.Models; |
| 3 | 删除:using Core.Models.Config; | |
| 4 | 3 | using Core.Servicers.Interfaces; |
| 5 | 4 | using System; |
| 6 | 5 | using System.Collections.Generic; |
| 6 | 新增:using System.Diagnostics; | |
| 7 | 7 | using System.Linq; |
| 8 | 删除:using System.Text; | |
| 9 | 删除:using System.Threading.Tasks; | |
| 8 | 新增:using System.Data.Entity; | |
| 9 | 新增:using System.Windows.Threading; | |
| 10 | 10 | |
| 11 | 11 | namespace Core.Servicers.Instances |
| 12 | 12 | { |
| 13 | 13 | public class Data : IData |
| 14 | 14 | { |
| 15 | 新增: private readonly IAppData appData; | |
| 16 | 新增: public Data(IAppData appData) | |
| 17 | 新增: { | |
| 18 | 新增: this.appData = appData; | |
| 19 | 新增: } | |
| 15 | 20 | public void Set(string processName, string processDescription, string file, int seconds) |
| 16 | 21 | { |
| 17 | 22 | if (string.IsNullOrEmpty(processName) || seconds <= 0) |
| @@ -19,19 +24,26 @@ namespace Core.Servicers.Instances | ||
| 19 | 24 | return; |
| 20 | 25 | } |
| 21 | 26 | processDescription = processDescription == null ? string.Empty : processDescription; |
| 22 | 删除: using (var db = new StatisticContext()) | |
| 27 | 新增: | |
| 28 | 新增: AppModel app = appData.GetApp(processName); | |
| 29 | 新增: | |
| 30 | 新增: if (app == null) | |
| 23 | 31 | { |
| 24 | 删除: var today = DateTime.Now.Date; | |
| 25 | 删除: var res = db.DailyLog.SingleOrDefault(m => m.Date == today && m.ProcessName == processName); | |
| 32 | 新增: return; | |
| 33 | 新增: } | |
| 34 | 新增: | |
| 35 | 新增: | |
| 36 | 新增: var today = DateTime.Now.Date; | |
| 37 | 新增: using (var db = new TaiDbContext()) | |
| 38 | 新增: { | |
| 39 | 新增: var res = db.DailyLog.SingleOrDefault(m => m.Date == today && m.AppModelID == app.ID); | |
| 26 | 40 | if (res == null) |
| 27 | 41 | { |
| 28 | 42 | //数据库中没有时则创建 |
| 29 | 43 | db.DailyLog.Add(new Models.DailyLogModel() |
| 30 | 44 | { |
| 31 | 45 | Date = today, |
| 32 | 删除: File = file, | |
| 33 | 删除: ProcessDescription = processDescription, | |
| 34 | 删除: ProcessName = processName, | |
| 46 | 新增: AppModelID = app.ID, | |
| 35 | 47 | Time = seconds, |
| 36 | 48 | }); |
| 37 | 49 | } |
| @@ -47,7 +59,7 @@ namespace Core.Servicers.Instances | ||
| 47 | 59 | var hourslog = db.HoursLog.SingleOrDefault( |
| 48 | 60 | m => |
| 49 | 61 | m.DataTime == nowtime |
| 50 | 删除: && m.ProcessName == processName | |
| 62 | 新增: && m.AppModelID == app.ID | |
| 51 | 63 | ); |
| 52 | 64 | if (hourslog == null) |
| 53 | 65 | { |
| @@ -55,8 +67,7 @@ namespace Core.Servicers.Instances | ||
| 55 | 67 | db.HoursLog.Add(new Models.HoursLogModel() |
| 56 | 68 | { |
| 57 | 69 | DataTime = nowtime, |
| 58 | 删除: ProcessName = processName, | |
| 59 | 删除: File = file, | |
| 70 | 新增: AppModelID = app.ID, | |
| 60 | 71 | Time = seconds |
| 61 | 72 | }); |
| 62 | 73 | } |
| @@ -65,32 +76,61 @@ namespace Core.Servicers.Instances | ||
| 65 | 76 | hourslog.Time += seconds; |
| 66 | 77 | } |
| 67 | 78 | |
| 79 | 新增: // 统计使用时长 | |
| 80 | 新增: app.TotalTime += seconds; | |
| 81 | 新增: | |
| 82 | 新增: appData.UpdateApp(app); | |
| 83 | 新增: | |
| 68 | 84 | db.SaveChanges(); |
| 69 | 85 | } |
| 70 | 86 | } |
| 71 | 87 | |
| 72 | 88 | public List<DailyLogModel> GetTodaylogList() |
| 73 | 89 | { |
| 74 | 删除: using (var db = new StatisticContext()) | |
| 90 | 新增: | |
| 91 | 新增: //return null; | |
| 92 | 新增: | |
| 93 | 新增: using (var db = new TaiDbContext()) | |
| 75 | 94 | { |
| 76 | 95 | var today = DateTime.Now.Date; |
| 77 | 删除: var res = db.DailyLog.Where(m => m.Date == today); | |
| 96 | 新增: var res = db.DailyLog.Where(m => m.Date == today && m.AppModelID != 0); | |
| 78 | 97 | return res.ToList(); |
| 79 | 98 | } |
| 80 | 99 | } |
| 81 | 100 | |
| 82 | 删除: public List<DailyLogModel> GetDateRangelogList(DateTime start, DateTime end) | |
| 101 | 新增: public IEnumerable<DailyLogModel> GetDateRangelogList(DateTime start, DateTime end) | |
| 83 | 102 | { |
| 103 | 新增: //using (var db = new StatisticContext()) | |
| 104 | 新增: //{ | |
| 105 | 新增: | |
| 84 | 106 | |
| 85 | 删除: using (var db = new StatisticContext()) | |
| 107 | 新增: // //var test = db.DailyLog.Include(m=>m.AppModel).Where(m => m.AppModelID != 0).Take(4).ToList(); | |
| 108 | 新增: // //var res = db.DailyLog.Include(m => m.AppModel).SqlQuery("Select *,Sum(Time) as Time,DailyLogModels.ID,AppModelID,Date,AppModels.ID,AppModels.Name,AppModels.Description,AppModels.File,AppModels.CategoryID,AppModels.IconFile,AppModels.TotalTime from DailyLogModels LEFT OUTER JOIN AppModels ON AppModels.ID=DailyLogModels.ID WHERE AppModelID<>0 AND Date between '" + start.ToString("yyyy-MM-dd HH:mm:ss") + "' AND '" + end.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY AppModelID ").ToList(); | |
| 109 | 新增: using (var db = new TaiDbContext()) | |
| 86 | 110 | { |
| 87 | 删除: var today = DateTime.Now.Date; | |
| 88 | 删除: var res = db.DailyLog.SqlQuery("Select Sum(Time) as Time,ProcessName,File,ID,Date,ProcessDescription from DailyLogModels WHERE Date between '" + start.ToString("yyyy-MM-dd HH:mm:ss") + "' AND '" + end.ToString("yyyy-MM-dd HH:mm:ss") + "' GROUP BY ProcessName ").ToList(); | |
| 89 | 删除: return res.ToList(); | |
| 111 | 新增: var res = db.DailyLog | |
| 112 | 新增: .Include(m => m.AppModel) | |
| 113 | 新增: .Where(m => m.Date >= start && m.Date <= end && m.AppModelID != 0) | |
| 114 | 新增: .GroupBy(m => m.AppModelID) | |
| 115 | 新增: .Select(m => new | |
| 116 | 新增: { | |
| 117 | 新增: Time = m.Sum(a => a.Time), | |
| 118 | 新增: App = m.FirstOrDefault().AppModel, | |
| 119 | 新增: Date = m.FirstOrDefault().Date, | |
| 120 | 新增: }) | |
| 121 | 新增: .ToList() | |
| 122 | 新增: .Select(m => new DailyLogModel | |
| 123 | 新增: { | |
| 124 | 新增: Time = m.Time, | |
| 125 | 新增: AppModel = m.App, | |
| 126 | 新增: Date = m.Date | |
| 127 | 新增: }); | |
| 128 | 新增: | |
| 129 | 新增: return res; | |
| 90 | 130 | } |
| 91 | 131 | } |
| 92 | 132 | |
| 93 | 删除: public List<DailyLogModel> GetThisWeeklogList() | |
| 133 | 新增: public IEnumerable<DailyLogModel> GetThisWeeklogList() | |
| 94 | 134 | { |
| 95 | 135 | DateTime weekStartDate = DateTime.Now, weekEndDate = DateTime.Now; |
| 96 | 136 | if (DateTime.Now.DayOfWeek == DayOfWeek.Monday) |
| @@ -113,7 +153,7 @@ namespace Core.Servicers.Instances | ||
| 113 | 153 | return GetDateRangelogList(weekStartDate, weekEndDate); |
| 114 | 154 | } |
| 115 | 155 | |
| 116 | 删除: public List<DailyLogModel> GetLastWeeklogList() | |
| 156 | 新增: public IEnumerable<DailyLogModel> GetLastWeeklogList() | |
| 117 | 157 | { |
| 118 | 158 | DateTime weekStartDate = DateTime.Now, weekEndDate = DateTime.Now; |
| 119 | 159 | |
| @@ -136,10 +176,17 @@ namespace Core.Servicers.Instances | ||
| 136 | 176 | { |
| 137 | 177 | return; |
| 138 | 178 | } |
| 139 | 删除: using (var db = new StatisticContext()) | |
| 179 | 新增: | |
| 180 | 新增: AppModel app = appData.GetApp(processName); | |
| 181 | 新增: if (app == null) | |
| 182 | 新增: { | |
| 183 | 新增: return; | |
| 184 | 新增: } | |
| 185 | 新增: | |
| 186 | 新增: using (var db = new TaiDbContext()) | |
| 140 | 187 | { |
| 141 | 188 | var today = DateTime.Now.Date; |
| 142 | 删除: var res = db.DailyLog.SingleOrDefault(m => m.Date == today && m.ProcessName == processName); | |
| 189 | 新增: var res = db.DailyLog.SingleOrDefault(m => m.Date == today && m.AppModelID == app.ID); | |
| 143 | 190 | if (res != null) |
| 144 | 191 | { |
| 145 | 192 | res.Time += seconds; |
| @@ -152,29 +199,41 @@ namespace Core.Servicers.Instances | ||
| 152 | 199 | var hourslog = db.HoursLog.SingleOrDefault( |
| 153 | 200 | m => |
| 154 | 201 | m.DataTime == nowtime |
| 155 | 删除: && m.ProcessName == processName); | |
| 202 | 新增: && m.AppModelID == app.ID); | |
| 156 | 203 | if (hourslog != null) |
| 157 | 204 | { |
| 158 | 205 | hourslog.Time += seconds; |
| 159 | 206 | } |
| 160 | 删除: db.SaveChanges(); | |
| 161 | 207 | |
| 208 | 新增: | |
| 209 | 新增: // 统计使用时长 | |
| 210 | 新增: | |
| 211 | 新增: app.TotalTime += seconds; | |
| 212 | 新增: | |
| 213 | 新增: appData.UpdateApp(app); | |
| 214 | 新增: | |
| 215 | 新增: | |
| 216 | 新增: db.SaveChanges(); | |
| 162 | 217 | } |
| 218 | 新增: | |
| 163 | 219 | } |
| 164 | 220 | |
| 165 | 221 | public List<DailyLogModel> GetProcessMonthLogList(string processName, DateTime month) |
| 166 | 222 | { |
| 167 | 删除: using (var db = new StatisticContext()) | |
| 223 | 新增: var app = appData.GetApp(processName); | |
| 224 | 新增: if (app == null) | |
| 225 | 新增: { | |
| 226 | 新增: return new List<DailyLogModel>(); | |
| 227 | 新增: } | |
| 228 | 新增: using (var db = new TaiDbContext()) | |
| 168 | 229 | { |
| 169 | 230 | |
| 170 | 删除: var res = db.DailyLog.Where( | |
| 171 | 删除: m => | |
| 172 | 删除: m.Date.Year == month.Year | |
| 173 | 删除: && m.Date.Month == month.Month | |
| 174 | 删除: && m.ProcessName == processName | |
| 175 | 删除: //&& m.ProcessDescription == processDescription | |
| 176 | 删除: //&& m.File == file | |
| 177 | 删除: ); | |
| 231 | 新增: var res = db.DailyLog.Include(m => m.AppModel).Where( | |
| 232 | 新增: m => | |
| 233 | 新增: m.Date.Year == month.Year | |
| 234 | 新增: && m.Date.Month == month.Month | |
| 235 | 新增: && m.AppModelID == app.ID | |
| 236 | 新增: ); | |
| 178 | 237 | if (res != null) |
| 179 | 238 | { |
| 180 | 239 | return res.ToList(); |
| @@ -190,29 +249,42 @@ namespace Core.Servicers.Instances | ||
| 190 | 249 | { |
| 191 | 250 | return; |
| 192 | 251 | } |
| 193 | 删除: using (var db = new StatisticContext()) | |
| 252 | 新增: | |
| 253 | 新增: var app = appData.GetApp(processName); | |
| 254 | 新增: if (app == null) | |
| 255 | 新增: { | |
| 256 | 新增: return; | |
| 257 | 新增: } | |
| 258 | 新增: using (var db = new TaiDbContext()) | |
| 194 | 259 | { |
| 195 | 260 | |
| 196 | 261 | db.DailyLog.RemoveRange( |
| 197 | 删除: db.DailyLog.Where(m => | |
| 198 | 删除: m.ProcessName == processName | |
| 199 | 删除: && m.Date.Year == month.Year | |
| 200 | 删除: && m.Date.Month == month.Month)); | |
| 262 | 新增: db.DailyLog.Where(m => | |
| 263 | 新增: m.AppModelID == app.ID | |
| 264 | 新增: && m.Date.Year == month.Year | |
| 265 | 新增: && m.Date.Month == month.Month)); | |
| 201 | 266 | db.SaveChanges(); |
| 202 | 267 | } |
| 203 | 268 | } |
| 204 | 269 | |
| 205 | 270 | public DailyLogModel GetProcess(string processName, DateTime day) |
| 206 | 271 | { |
| 207 | 删除: using (var db = new StatisticContext()) | |
| 272 | 新增: var app = appData.GetApp(processName); | |
| 273 | 新增: | |
| 274 | 新增: if (app == null) | |
| 275 | 新增: { | |
| 276 | 新增: return null; | |
| 277 | 新增: } | |
| 278 | 新增: | |
| 279 | 新增: using (var db = new TaiDbContext()) | |
| 208 | 280 | { |
| 209 | 281 | |
| 210 | 282 | |
| 211 | 283 | var res = db.DailyLog.Where(m => |
| 212 | 删除: m.ProcessName == processName | |
| 213 | 删除: && m.Date.Year == day.Year | |
| 214 | 删除: && m.Date.Month == day.Month | |
| 215 | 删除: && m.Date.Day == day.Day); | |
| 284 | 新增: m.AppModelID == app.ID | |
| 285 | 新增: && m.Date.Year == day.Year | |
| 286 | 新增: && m.Date.Month == day.Month | |
| 287 | 新增: && m.Date.Day == day.Day); | |
| 216 | 288 | if (res != null) |
| 217 | 289 | { |
| 218 | 290 | return res.FirstOrDefault(); |
| @@ -220,5 +292,7 @@ namespace Core.Servicers.Instances | ||
| 220 | 292 | return null; |
| 221 | 293 | } |
| 222 | 294 | } |
| 295 | 新增: | |
| 296 | 新增: | |
| 223 | 297 | } |
| 224 | 298 | } |
| @@ -24,6 +24,7 @@ namespace Core.Servicers.Instances | ||
| 24 | 24 | private readonly ISleepdiscover sleepdiscover; |
| 25 | 25 | private readonly IAppConfig appConfig; |
| 26 | 26 | private readonly IDateObserver dateObserver; |
| 27 | 新增: private readonly IAppData appData; | |
| 27 | 28 | // 忽略的进程 |
| 28 | 29 | private readonly string[] IgnoreProcess = new string[] { |
| 29 | 30 | "Tai", |
| @@ -77,13 +78,16 @@ namespace Core.Servicers.Instances | ||
| 77 | 78 | IObserver observer, |
| 78 | 79 | IData data, |
| 79 | 80 | ISleepdiscover sleepdiscover, |
| 80 | 删除: IAppConfig appConfig, IDateObserver dateObserver) | |
| 81 | 新增: IAppConfig appConfig, | |
| 82 | 新增: IDateObserver dateObserver, | |
| 83 | 新增: IAppData appData) | |
| 81 | 84 | { |
| 82 | 85 | this.observer = observer; |
| 83 | 86 | this.data = data; |
| 84 | 87 | this.sleepdiscover = sleepdiscover; |
| 85 | 88 | this.appConfig = appConfig; |
| 86 | 89 | this.dateObserver = dateObserver; |
| 90 | 新增: this.appData = appData; | |
| 87 | 91 | |
| 88 | 92 | observer.OnAppActive += Observer_OnAppActive; |
| 89 | 93 | sleepdiscover.SleepStatusChanged += Sleepdiscover_SleepStatusChanged; |
| @@ -117,34 +121,34 @@ namespace Core.Servicers.Instances | ||
| 117 | 121 | } |
| 118 | 122 | } |
| 119 | 123 | |
| 120 | 删除: public void Run() | |
| 124 | 新增: public async void Run() | |
| 121 | 125 | { |
| 122 | 删除: Task.Run(() => | |
| 123 | 删除: { | |
| 124 | 删除: Debug.WriteLine("start"); | |
| 125 | 删除: // 数据库自检 | |
| 126 | 删除: using (var db = new StatisticContext()) | |
| 127 | 删除: { | |
| 128 | 删除: db.Database.ExecuteSqlCommand("select count(*) from sqlite_master where type='table' and name='tai'"); | |
| 129 | 删除: } | |
| 130 | 删除: // 加载app信息 | |
| 131 | 删除: data.LoadAppList(); | |
| 126 | 新增: await Task.Run(() => | |
| 127 | 新增: { | |
| 128 | 新增: Debug.WriteLine("db self check start"); | |
| 129 | 新增: // 数据库自检 | |
| 130 | 新增: using (var db = new TaiDbContext()) | |
| 131 | 新增: { | |
| 132 | 新增: db.SelfCheck(); | |
| 133 | 新增: } | |
| 134 | 新增: Debug.WriteLine("db self check over!"); | |
| 135 | 新增: }); | |
| 132 | 136 | |
| 133 | 删除: // 加载应用配置(确保配置文件最先加载 | |
| 134 | 删除: appConfig.Load(); | |
| 135 | 删除: config = appConfig.GetConfig(); | |
| 137 | 新增: // 加载app信息 | |
| 138 | 新增: appData.Load(); | |
| 136 | 139 | |
| 137 | 删除: // 日期变化观察 | |
| 138 | 删除: dateObserver.Start(); | |
| 140 | 新增: // 加载应用配置(确保配置文件最先加载 | |
| 141 | 新增: appConfig.Load(); | |
| 142 | 新增: config = appConfig.GetConfig(); | |
| 139 | 143 | |
| 140 | 删除: // 启动进程观察 | |
| 141 | 删除: observer.Start(); | |
| 144 | 新增: // 日期变化观察 | |
| 145 | 新增: dateObserver.Start(); | |
| 142 | 146 | |
| 143 | 删除: // 启动睡眠监测 | |
| 144 | 删除: sleepdiscover.Start(); | |
| 145 | 删除: Debug.WriteLine("over!"); | |
| 147 | 新增: // 启动进程观察 | |
| 148 | 新增: observer.Start(); | |
| 146 | 149 | |
| 147 | 删除: }); | |
| 150 | 新增: // 启动睡眠监测 | |
| 151 | 新增: sleepdiscover.Start(); | |
| 148 | 152 | |
| 149 | 153 | } |
| 150 | 154 | |
| @@ -152,7 +156,7 @@ namespace Core.Servicers.Instances | ||
| 152 | 156 | { |
| 153 | 157 | observer?.Stop(); |
| 154 | 158 | |
| 155 | 删除: data.SaveAppChanges(); | |
| 159 | 新增: appData.SaveAppChanges(); | |
| 156 | 160 | } |
| 157 | 161 | |
| 158 | 162 | |
| @@ -172,7 +176,7 @@ namespace Core.Servicers.Instances | ||
| 172 | 176 | //activeTimer.Stop(); |
| 173 | 177 | |
| 174 | 178 | // 更新app数据 |
| 175 | 删除: data.SaveAppChanges(); | |
| 179 | 新增: appData.SaveAppChanges(); | |
| 176 | 180 | } |
| 177 | 181 | else if (sleepStatus == SleepStatus.Wake) |
| 178 | 182 | { |
| @@ -199,13 +203,13 @@ namespace Core.Servicers.Instances | ||
| 199 | 203 | if (!config.Behavior.IgnoreProcessList.Contains(processName) |
| 200 | 204 | && !IgnoreProcess.Contains(processName)) |
| 201 | 205 | { |
| 202 | 删除: AppModel app = data.GetApp(processName); | |
| 206 | 新增: AppModel app = appData.GetApp(processName); | |
| 203 | 207 | if (app == null) |
| 204 | 208 | { |
| 205 | 209 | // 提取icon |
| 206 | 210 | string iconFile = Iconer.ExtractFromFile(file, processName, description); |
| 207 | 211 | |
| 208 | 删除: data.AddApp(new AppModel() | |
| 212 | 新增: appData.AddApp(new AppModel() | |
| 209 | 213 | { |
| 210 | 214 | Name = processName, |
| 211 | 215 | Description = description, |
| @@ -0,0 +1,37 @@ | ||
| 1 | 新增:using Core.Models; | |
| 2 | 新增:using System; | |
| 3 | 新增:using System.Collections.Generic; | |
| 4 | 新增:using System.Linq; | |
| 5 | 新增:using System.Text; | |
| 6 | 新增:using System.Threading.Tasks; | |
| 7 | 新增: | |
| 8 | 新增:namespace Core.Servicers.Interfaces | |
| 9 | 新增:{ | |
| 10 | 新增: public interface IAppData | |
| 11 | 新增: { | |
| 12 | 新增: /// <summary> | |
| 13 | 新增: /// 更新app数据,要先调用GetApp获得后更改并传回才有效 | |
| 14 | 新增: /// </summary> | |
| 15 | 新增: void UpdateApp(AppModel app); | |
| 16 | 新增: /// <summary> | |
| 17 | 新增: /// 保存app数据更改 | |
| 18 | 新增: /// </summary> | |
| 19 | 新增: void SaveAppChanges(); | |
| 20 | 新增: /// <summary> | |
| 21 | 新增: /// 通过进程名称获取app | |
| 22 | 新增: /// </summary> | |
| 23 | 新增: /// <param name="name"></param> | |
| 24 | 新增: /// <returns></returns> | |
| 25 | 新增: AppModel GetApp(string name); | |
| 26 | 新增: /// <summary> | |
| 27 | 新增: /// 获取所有app | |
| 28 | 新增: /// </summary> | |
| 29 | 新增: /// <returns></returns> | |
| 30 | 新增: List<AppModel> GetAllApps(); | |
| 31 | 新增: void AddApp(AppModel app); | |
| 32 | 新增: /// <summary> | |
| 33 | 新增: /// 加载已存储的app列表,仅建议在启动时调用一次,无必要请勿再次调用 | |
| 34 | 新增: /// </summary> | |
| 35 | 新增: void Load(); | |
| 36 | 新增: } | |
| 37 | 新增:} | |
| @@ -9,6 +9,7 @@ namespace Core.Servicers.Interfaces | ||
| 9 | 9 | { |
| 10 | 10 | public interface IData |
| 11 | 11 | { |
| 12 | 新增: | |
| 12 | 13 | /// <summary> |
| 13 | 14 | /// 设置进程数据 |
| 14 | 15 | /// </summary> |
| @@ -29,18 +30,18 @@ namespace Core.Servicers.Interfaces | ||
| 29 | 30 | /// <param name="start"></param> |
| 30 | 31 | /// <param name="end"></param> |
| 31 | 32 | /// <returns></returns> |
| 32 | 删除: List<DailyLogModel> GetDateRangelogList(DateTime start, DateTime end); | |
| 33 | 新增: IEnumerable<DailyLogModel> GetDateRangelogList(DateTime start, DateTime end); | |
| 33 | 34 | |
| 34 | 35 | /// <summary> |
| 35 | 36 | /// 获取本周的数据 |
| 36 | 37 | /// </summary> |
| 37 | 38 | /// <returns></returns> |
| 38 | 删除: List<DailyLogModel> GetThisWeeklogList(); | |
| 39 | 新增: IEnumerable<DailyLogModel> GetThisWeeklogList(); | |
| 39 | 40 | /// <summary> |
| 40 | 41 | /// 获取上周的数据 |
| 41 | 42 | /// </summary> |
| 42 | 43 | /// <returns></returns> |
| 43 | 删除: List<DailyLogModel> GetLastWeeklogList(); | |
| 44 | 新增: IEnumerable<DailyLogModel> GetLastWeeklogList(); | |
| 44 | 45 | /// <summary> |
| 45 | 46 | /// 设置进程数据(仅通过进程名可能会出现重复的问题 |
| 46 | 47 | /// </summary> |
| @@ -39,6 +39,10 @@ namespace UI | ||
| 39 | 39 | private ContextMenu contextMenu; |
| 40 | 40 | |
| 41 | 41 | private DefaultWindow mainWindow; |
| 42 | 新增: | |
| 43 | 新增: private IAppData appData; | |
| 44 | 新增: | |
| 45 | 新增: | |
| 42 | 46 | public App() |
| 43 | 47 | { |
| 44 | 48 | InitStatusBarIcon(); |
| @@ -56,9 +60,8 @@ namespace UI | ||
| 56 | 60 | { |
| 57 | 61 | base.OnExit(e); |
| 58 | 62 | |
| 59 | 删除: var data = serviceProvider.GetService<IData>(); | |
| 60 | 63 | |
| 61 | 删除: data.SaveAppChanges(); | |
| 64 | 新增: appData.SaveAppChanges(); | |
| 62 | 65 | |
| 63 | 66 | Logger.Save(true); |
| 64 | 67 | |
| @@ -66,6 +69,8 @@ namespace UI | ||
| 66 | 69 | } |
| 67 | 70 | private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) |
| 68 | 71 | { |
| 72 | 新增: appData.SaveAppChanges(); | |
| 73 | 新增: | |
| 69 | 74 | // 记录崩溃错误 |
| 70 | 75 | Logger.Error("[程序崩溃异常] " + e.Exception.Message); |
| 71 | 76 | |
| @@ -109,7 +114,7 @@ namespace UI | ||
| 109 | 114 | CreateStatusBarIconMenu(); |
| 110 | 115 | |
| 111 | 116 | statusBarIcon = new System.Windows.Forms.NotifyIcon(); |
| 112 | 删除: statusBarIcon.Text = "Tai! [数据库自检中...请稍后]"; | |
| 117 | 新增: statusBarIcon.Text = "Tai! [数据加载中...请稍后]"; | |
| 113 | 118 | Stream iconStream = GetResourceStream(new Uri("pack://application:,,,/Tai;component/Resources/Icons/taibusy.ico")).Stream; |
| 114 | 119 | statusBarIcon.Icon = new Icon(iconStream); |
| 115 | 120 | //statusBarIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(System.Reflection.Assembly.GetEntryAssembly().ManifestModule.Name); |
| @@ -177,6 +182,7 @@ namespace UI | ||
| 177 | 182 | services.AddSingleton<ISleepdiscover, Sleepdiscover>(); |
| 178 | 183 | services.AddSingleton<IAppConfig, AppConfig>(); |
| 179 | 184 | services.AddSingleton<IDateObserver, DateObserver>(); |
| 185 | 新增: services.AddSingleton<IAppData, AppData>(); | |
| 180 | 186 | |
| 181 | 187 | // 主窗口 |
| 182 | 188 | services.AddSingleton<MainViewModel>(); |
| @@ -219,6 +225,8 @@ namespace UI | ||
| 219 | 225 | // 创建保活窗口 |
| 220 | 226 | keepaliveWindow = new HideWindow(); |
| 221 | 227 | |
| 228 | 新增: | |
| 229 | 新增: appData = serviceProvider.GetService<IAppData>(); | |
| 222 | 230 | } |
| 223 | 231 | |
| 224 | 232 | private void ShowMainWindow() |
| @@ -167,19 +167,20 @@ namespace UI.ViewModels | ||
| 167 | 167 | } |
| 168 | 168 | |
| 169 | 169 | #region 处理数据 |
| 170 | 删除: private List<ChartsDataModel> MapToChartsData(List<Core.Models.DailyLogModel> list) | |
| 170 | 新增: private List<ChartsDataModel> MapToChartsData(IEnumerable<Core.Models.DailyLogModel> list) | |
| 171 | 171 | { |
| 172 | 172 | var resData = new List<ChartsDataModel>(); |
| 173 | 173 | |
| 174 | 174 | foreach (var item in list) |
| 175 | 175 | { |
| 176 | 新增: | |
| 176 | 177 | var bindModel = new ChartsDataModel(); |
| 177 | 178 | bindModel.Data = item; |
| 178 | 删除: bindModel.Name = string.IsNullOrEmpty(item.ProcessDescription) ? item.ProcessName : item.ProcessDescription; | |
| 179 | 新增: bindModel.Name = item.AppModel?.Name; | |
| 179 | 180 | bindModel.Value = item.Time; |
| 180 | 181 | bindModel.Tag = Timer.Fromat(item.Time); |
| 181 | 删除: bindModel.PopupText = item.File; | |
| 182 | 删除: bindModel.Icon = Iconer.Get(item.ProcessName, item.ProcessDescription); | |
| 182 | 新增: bindModel.PopupText = item.AppModel?.File; | |
| 183 | 新增: bindModel.Icon = item.AppModel?.IconFile; | |
| 183 | 184 | resData.Add(bindModel); |
| 184 | 185 | } |
| 185 | 186 | |
| @@ -130,7 +130,7 @@ namespace UI.ViewModels | ||
| 130 | 130 | var info = Process.Data as DailyLogModel; |
| 131 | 131 | if (info != null) |
| 132 | 132 | { |
| 133 | 删除: ProcessName = info.ProcessName; | |
| 133 | 新增: ProcessName = info.AppModel?.Name; | |
| 134 | 134 | // 判断是否是忽略的进程 |
| 135 | 135 | IsIgnore = config.Behavior.IgnoreProcessList.Contains(ProcessName); |
| 136 | 136 | } |
| @@ -187,8 +187,9 @@ namespace UI.ViewModels | ||
| 187 | 187 | { |
| 188 | 188 | if (Process != null) |
| 189 | 189 | { |
| 190 | 新增: | |
| 190 | 191 | var info = Process.Data as DailyLogModel; |
| 191 | 删除: var monthData = data.GetProcessMonthLogList(info.ProcessName, Date); | |
| 192 | 新增: var monthData = data.GetProcessMonthLogList(info.AppModel.Name, Date); | |
| 192 | 193 | int monthTotal = monthData.Sum(m => m.Time); |
| 193 | 194 | Total = Timer.Fromat(monthTotal); |
| 194 | 195 | |
| @@ -252,11 +253,11 @@ namespace UI.ViewModels | ||
| 252 | 253 | { |
| 253 | 254 | var bindModel = new ChartsDataModel(); |
| 254 | 255 | bindModel.Data = item; |
| 255 | 删除: bindModel.Name = string.IsNullOrEmpty(item.ProcessDescription) ? item.ProcessName : item.ProcessDescription; | |
| 256 | 新增: bindModel.Name =item.AppModel.Name; | |
| 256 | 257 | bindModel.Value = item.Time; |
| 257 | 258 | bindModel.Tag = Timer.Fromat(item.Time); |
| 258 | 删除: bindModel.PopupText = item.File; | |
| 259 | 删除: bindModel.Icon = Iconer.Get(item.ProcessName, item.ProcessDescription); | |
| 259 | 新增: bindModel.PopupText = item.AppModel.File; | |
| 260 | 新增: bindModel.Icon = item.AppModel.IconFile; | |
| 260 | 261 | bindModel.DateTime = item.Date; |
| 261 | 262 | resData.Add(bindModel); |
| 262 | 263 | } |
| @@ -122,7 +122,7 @@ namespace UI.ViewModels | ||
| 122 | 122 | #endregion |
| 123 | 123 | |
| 124 | 124 | #region 处理数据 |
| 125 | 删除: private List<ChartsDataModel> MapToChartsData(List<Core.Models.DailyLogModel> list) | |
| 125 | 新增: private List<ChartsDataModel> MapToChartsData(IEnumerable<Core.Models.DailyLogModel> list) | |
| 126 | 126 | { |
| 127 | 127 | var resData = new List<ChartsDataModel>(); |
| 128 | 128 | |
| @@ -130,11 +130,11 @@ namespace UI.ViewModels | ||
| 130 | 130 | { |
| 131 | 131 | var bindModel = new ChartsDataModel(); |
| 132 | 132 | bindModel.Data = item; |
| 133 | 删除: bindModel.Name = string.IsNullOrEmpty(item.ProcessDescription) ? item.ProcessName : item.ProcessDescription; | |
| 133 | 新增: bindModel.Name = item.AppModel?.Name; | |
| 134 | 134 | bindModel.Value = item.Time; |
| 135 | 135 | bindModel.Tag = Timer.Fromat(item.Time); |
| 136 | 删除: bindModel.PopupText = item.File; | |
| 137 | 删除: bindModel.Icon = Iconer.Get(item.ProcessName, item.ProcessDescription); | |
| 136 | 新增: bindModel.PopupText = item.AppModel?.File; | |
| 137 | 新增: bindModel.Icon = item.AppModel?.IconFile; | |
| 138 | 138 | bindModel.DateTime = item.Date; |
| 139 | 139 | resData.Add(bindModel); |
| 140 | 140 | } |

