提交记录修改Core/Servicers/Instances/AppData.cs+15 −2看文件
修改Core/Servicers/Instances/Data.cs+41 −30看文件
修改Core/Servicers/Instances/Main.cs+10 −3看文件
修改Core/Servicers/Interfaces/IAppData.cs+7 −0看文件
修改Core/Servicers/Interfaces/IData.cs+4 −4看文件
修改UI/MainWindow.xaml+3 −1看文件
新增UI/Models/CategoryAppList/ChooseAppModel.cs+17 −0看文件
修改UI/Models/DetailPageModel.cs+17 −5看文件
修改UI/Models/MainWindowModel.cs+9 −1看文件
修改UI/ViewModels/DataPageVM.cs+7 −2看文件
修改UI/ViewModels/DetailPageVM.cs+70 −30看文件
修改UI/ViewModels/IndexPageVM.cs+8 −2看文件
修改UI/ViewModels/MainViewModel.cs+23 −2看文件
修改UI/ViewModels/SettingPageVM.cs+2 −2看文件
修改UI/Views/DetailPage.xaml+16 −5看文件
修改UI/Views/DetailPage.xaml.cs+17 −1看文件
| @@ -26,6 +26,8 @@ namespace Core.Servicers.Instances | ||
| 26 | 26 | dispatcherTimer.Interval = new TimeSpan(0, 30, 0); |
| 27 | 27 | dispatcherTimer.Tick += DispatcherTimer_Tick; |
| 28 | 28 | dispatcherTimer.Start(); |
| 29 | 新增: | |
| 30 | 新增: _apps = new List<AppModel>(); | |
| 29 | 31 | } |
| 30 | 32 | |
| 31 | 33 | |
| @@ -82,7 +84,10 @@ namespace Core.Servicers.Instances | ||
| 82 | 84 | { |
| 83 | 85 | return _apps.Where(m => m.Name == name).FirstOrDefault(); |
| 84 | 86 | } |
| 85 | 删除: | |
| 87 | 新增: public AppModel GetApp(int id) | |
| 88 | 新增: { | |
| 89 | 新增: return _apps.Where(m => m.ID == id).FirstOrDefault(); | |
| 90 | 新增: } | |
| 86 | 91 | public void AddApp(AppModel app) |
| 87 | 92 | { |
| 88 | 93 | if (_apps.Where(m => m.Name == app.Name).Any()) |
| @@ -103,6 +108,7 @@ namespace Core.Servicers.Instances | ||
| 103 | 108 | |
| 104 | 109 | public void SaveAppChanges() |
| 105 | 110 | { |
| 111 | 新增: | |
| 106 | 112 | using (var db = new TaiDbContext()) |
| 107 | 113 | { |
| 108 | 114 | foreach (var item in _updateTempApps) |
| @@ -116,11 +122,18 @@ namespace Core.Servicers.Instances | ||
| 116 | 122 | app.Name = item.Name; |
| 117 | 123 | app.CategoryID = item.CategoryID; |
| 118 | 124 | app.Description = item.Description; |
| 119 | 删除: app.Category = item.Category; | |
| 125 | 新增: //app.Category = item.Category; | |
| 120 | 126 | } |
| 121 | 127 | } |
| 122 | 128 | db.SaveChanges(); |
| 129 | 新增: _updateTempApps.Clear(); | |
| 123 | 130 | } |
| 131 | 新增: | |
| 132 | 新增: } | |
| 133 | 新增: | |
| 134 | 新增: public List<AppModel> GetAppsByCategoryID(int categoryID) | |
| 135 | 新增: { | |
| 136 | 新增: return _apps.Where(m => m.CategoryID == categoryID).ToList(); | |
| 124 | 137 | } |
| 125 | 138 | } |
| 126 | 139 | } |
| @@ -100,6 +100,9 @@ namespace Core.Servicers.Instances | ||
| 100 | 100 | |
| 101 | 101 | public IEnumerable<DailyLogModel> GetDateRangelogList(DateTime start, DateTime end) |
| 102 | 102 | { |
| 103 | 新增: | |
| 104 | 新增: IEnumerable<AppModel> apps = appData.GetAllApps(); | |
| 105 | 新增: | |
| 103 | 106 | //using (var db = new StatisticContext()) |
| 104 | 107 | //{ |
| 105 | 108 | |
| @@ -108,23 +111,45 @@ namespace Core.Servicers.Instances | ||
| 108 | 111 | // //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 | 112 | using (var db = new TaiDbContext()) |
| 110 | 113 | { |
| 114 | 新增: //var res = db.DailyLog | |
| 115 | 新增: //.Include(m => m.AppModel) | |
| 116 | 新增: //.Where(m => m.Date >= start && m.Date <= end && m.AppModelID != 0) | |
| 117 | 新增: //.GroupBy(m => m.AppModelID) | |
| 118 | 新增: //.Select(m => new | |
| 119 | 新增: //{ | |
| 120 | 新增: // Time = m.Sum(a => a.Time), | |
| 121 | 新增: // App = m.FirstOrDefault().AppModel, | |
| 122 | 新增: // Date = m.FirstOrDefault().Date, | |
| 123 | 新增: //}) | |
| 124 | 新增: //.ToList() | |
| 125 | 新增: //.Select(m => new DailyLogModel | |
| 126 | 新增: //{ | |
| 127 | 新增: // Time = m.Time, | |
| 128 | 新增: // AppModel = m.App, | |
| 129 | 新增: // Date = m.Date | |
| 130 | 新增: //}); | |
| 131 | 新增: | |
| 111 | 132 | var res = db.DailyLog |
| 112 | 删除: .Include(m => m.AppModel) | |
| 113 | 133 | .Where(m => m.Date >= start && m.Date <= end && m.AppModelID != 0) |
| 114 | 134 | .GroupBy(m => m.AppModelID) |
| 115 | 135 | .Select(m => new |
| 116 | 136 | { |
| 117 | 137 | Time = m.Sum(a => a.Time), |
| 118 | 删除: App = m.FirstOrDefault().AppModel, | |
| 119 | 138 | Date = m.FirstOrDefault().Date, |
| 139 | 新增: AppID = m.FirstOrDefault().AppModelID | |
| 120 | 140 | }) |
| 121 | 141 | .ToList() |
| 122 | 142 | .Select(m => new DailyLogModel |
| 123 | 143 | { |
| 124 | 144 | Time = m.Time, |
| 125 | 删除: AppModel = m.App, | |
| 126 | 删除: Date = m.Date | |
| 127 | 删除: }); | |
| 145 | 新增: Date = m.Date, | |
| 146 | 新增: AppModelID = m.AppID | |
| 147 | 新增: }).ToList(); | |
| 148 | 新增: | |
| 149 | 新增: foreach (var log in res) | |
| 150 | 新增: { | |
| 151 | 新增: log.AppModel = appData.GetApp(log.AppModelID); | |
| 152 | 新增: } | |
| 128 | 153 | |
| 129 | 154 | return res; |
| 130 | 155 | } |
| @@ -218,13 +243,13 @@ namespace Core.Servicers.Instances | ||
| 218 | 243 | |
| 219 | 244 | } |
| 220 | 245 | |
| 221 | 删除: public List<DailyLogModel> GetProcessMonthLogList(string processName, DateTime month) | |
| 246 | 新增: public List<DailyLogModel> GetProcessMonthLogList(int appID, DateTime month) | |
| 222 | 247 | { |
| 223 | 删除: var app = appData.GetApp(processName); | |
| 224 | 删除: if (app == null) | |
| 225 | 删除: { | |
| 226 | 删除: return new List<DailyLogModel>(); | |
| 227 | 删除: } | |
| 248 | 新增: //var app = appData.GetApp(processName); | |
| 249 | 新增: //if (app == null) | |
| 250 | 新增: //{ | |
| 251 | 新增: // return new List<DailyLogModel>(); | |
| 252 | 新增: //} | |
| 228 | 253 | using (var db = new TaiDbContext()) |
| 229 | 254 | { |
| 230 | 255 | |
| @@ -232,7 +257,7 @@ namespace Core.Servicers.Instances | ||
| 232 | 257 | m => |
| 233 | 258 | m.Date.Year == month.Year |
| 234 | 259 | && m.Date.Month == month.Month |
| 235 | 删除: && m.AppModelID == app.ID | |
| 260 | 新增: && m.AppModelID == appID | |
| 236 | 261 | ); |
| 237 | 262 | if (res != null) |
| 238 | 263 | { |
| @@ -243,45 +268,31 @@ namespace Core.Servicers.Instances | ||
| 243 | 268 | } |
| 244 | 269 | |
| 245 | 270 | |
| 246 | 删除: public void Clear(string processName, DateTime month) | |
| 271 | 新增: public void Clear(int appID, DateTime month) | |
| 247 | 272 | { |
| 248 | 删除: if (string.IsNullOrEmpty(processName)) | |
| 249 | 删除: { | |
| 250 | 删除: return; | |
| 251 | 删除: } | |
| 252 | 273 | |
| 253 | 删除: var app = appData.GetApp(processName); | |
| 254 | 删除: if (app == null) | |
| 255 | 删除: { | |
| 256 | 删除: return; | |
| 257 | 删除: } | |
| 258 | 274 | using (var db = new TaiDbContext()) |
| 259 | 275 | { |
| 260 | 276 | |
| 261 | 277 | db.DailyLog.RemoveRange( |
| 262 | 278 | db.DailyLog.Where(m => |
| 263 | 删除: m.AppModelID == app.ID | |
| 279 | 新增: m.AppModelID == appID | |
| 264 | 280 | && m.Date.Year == month.Year |
| 265 | 281 | && m.Date.Month == month.Month)); |
| 266 | 282 | db.SaveChanges(); |
| 267 | 283 | } |
| 268 | 284 | } |
| 269 | 285 | |
| 270 | 删除: public DailyLogModel GetProcess(string processName, DateTime day) | |
| 286 | 新增: public DailyLogModel GetProcess(int appID, DateTime day) | |
| 271 | 287 | { |
| 272 | 删除: var app = appData.GetApp(processName); | |
| 273 | 288 | |
| 274 | 删除: if (app == null) | |
| 275 | 删除: { | |
| 276 | 删除: return null; | |
| 277 | 删除: } | |
| 278 | 289 | |
| 279 | 290 | using (var db = new TaiDbContext()) |
| 280 | 291 | { |
| 281 | 292 | |
| 282 | 293 | |
| 283 | 294 | var res = db.DailyLog.Where(m => |
| 284 | 删除: m.AppModelID == app.ID | |
| 295 | 新增: m.AppModelID == appID | |
| 285 | 296 | && m.Date.Year == day.Year |
| 286 | 297 | && m.Date.Month == day.Month |
| 287 | 298 | && m.Date.Day == day.Day); |
| @@ -25,6 +25,7 @@ namespace Core.Servicers.Instances | ||
| 25 | 25 | private readonly IAppConfig appConfig; |
| 26 | 26 | private readonly IDateObserver dateObserver; |
| 27 | 27 | private readonly IAppData appData; |
| 28 | 新增: private readonly ICategorys categories; | |
| 28 | 29 | // 忽略的进程 |
| 29 | 30 | private readonly string[] IgnoreProcess = new string[] { |
| 30 | 31 | "Tai", |
| @@ -80,7 +81,7 @@ namespace Core.Servicers.Instances | ||
| 80 | 81 | ISleepdiscover sleepdiscover, |
| 81 | 82 | IAppConfig appConfig, |
| 82 | 83 | IDateObserver dateObserver, |
| 83 | 删除: IAppData appData) | |
| 84 | 新增: IAppData appData, ICategorys categories) | |
| 84 | 85 | { |
| 85 | 86 | this.observer = observer; |
| 86 | 87 | this.data = data; |
| @@ -88,6 +89,7 @@ namespace Core.Servicers.Instances | ||
| 88 | 89 | this.appConfig = appConfig; |
| 89 | 90 | this.dateObserver = dateObserver; |
| 90 | 91 | this.appData = appData; |
| 92 | 新增: this.categories = categories; | |
| 91 | 93 | |
| 92 | 94 | observer.OnAppActive += Observer_OnAppActive; |
| 93 | 95 | sleepdiscover.SleepStatusChanged += Sleepdiscover_SleepStatusChanged; |
| @@ -132,10 +134,15 @@ namespace Core.Servicers.Instances | ||
| 132 | 134 | db.SelfCheck(); |
| 133 | 135 | } |
| 134 | 136 | Debug.WriteLine("db self check over!"); |
| 137 | 新增: | |
| 138 | 新增: // 加载app信息 | |
| 139 | 新增: appData.Load(); | |
| 140 | 新增: | |
| 141 | 新增: // 加载分类信息 | |
| 142 | 新增: categories.Load(); | |
| 135 | 143 | }); |
| 136 | 144 | |
| 137 | 删除: // 加载app信息 | |
| 138 | 删除: appData.Load(); | |
| 145 | 新增: | |
| 139 | 146 | |
| 140 | 147 | // 加载应用配置(确保配置文件最先加载 |
| 141 | 148 | appConfig.Load(); |
| @@ -23,6 +23,7 @@ namespace Core.Servicers.Interfaces | ||
| 23 | 23 | /// <param name="name"></param> |
| 24 | 24 | /// <returns></returns> |
| 25 | 25 | AppModel GetApp(string name); |
| 26 | 新增: AppModel GetApp(int id); | |
| 26 | 27 | /// <summary> |
| 27 | 28 | /// 获取所有app |
| 28 | 29 | /// </summary> |
| @@ -33,5 +34,11 @@ namespace Core.Servicers.Interfaces | ||
| 33 | 34 | /// 加载已存储的app列表,仅建议在启动时调用一次,无必要请勿再次调用 |
| 34 | 35 | /// </summary> |
| 35 | 36 | void Load(); |
| 37 | 新增: /// <summary> | |
| 38 | 新增: /// 获取app列表通过分类ID | |
| 39 | 新增: /// </summary> | |
| 40 | 新增: /// <param name="categoryID">分类ID</param> | |
| 41 | 新增: /// <returns></returns> | |
| 42 | 新增: List<AppModel> GetAppsByCategoryID(int categoryID); | |
| 36 | 43 | } |
| 37 | 44 | } |
| @@ -9,7 +9,7 @@ namespace Core.Servicers.Interfaces | ||
| 9 | 9 | { |
| 10 | 10 | public interface IData |
| 11 | 11 | { |
| 12 | 删除: | |
| 12 | 新增: | |
| 13 | 13 | /// <summary> |
| 14 | 14 | /// 设置进程数据 |
| 15 | 15 | /// </summary> |
| @@ -55,14 +55,14 @@ namespace Core.Servicers.Interfaces | ||
| 55 | 55 | /// <param name="processName"></param> |
| 56 | 56 | /// <param name="month"></param> |
| 57 | 57 | /// <returns></returns> |
| 58 | 删除: List<DailyLogModel> GetProcessMonthLogList(string processName, DateTime month); | |
| 58 | 新增: List<DailyLogModel> GetProcessMonthLogList(int appID, DateTime month); | |
| 59 | 59 | |
| 60 | 60 | |
| 61 | 61 | /// <summary> |
| 62 | 62 | /// 清空指定进程某月的数据 |
| 63 | 63 | /// </summary> |
| 64 | 64 | /// <param name="processName"></param> |
| 65 | 删除: void Clear(string processName, DateTime month); | |
| 65 | 新增: void Clear(int appID, DateTime month); | |
| 66 | 66 | |
| 67 | 67 | /// <summary> |
| 68 | 68 | /// 获取指定进程某天的数据 |
| @@ -70,6 +70,6 @@ namespace Core.Servicers.Interfaces | ||
| 70 | 70 | /// <param name="processName"></param> |
| 71 | 71 | /// <param name="day"></param> |
| 72 | 72 | /// <returns></returns> |
| 73 | 删除: DailyLogModel GetProcess(string processName, DateTime day); | |
| 73 | 新增: DailyLogModel GetProcess(int appID, DateTime day); | |
| 74 | 74 | } |
| 75 | 75 | } |
| @@ -15,7 +15,9 @@ | ||
| 15 | 15 | Icon="/Resources/Icons/tai32.ico" |
| 16 | 16 | IsShowToast="{Binding IsShowToast,Mode=TwoWay}" |
| 17 | 17 | ToastContent="{Binding ToastContent,Mode=TwoWay}" |
| 18 | 删除: ToastIcon="{Binding ToastIcon}"> | |
| 18 | 新增: ToastIcon="{Binding ToastIcon}" | |
| 19 | 新增: ToastType="{Binding ToastType}" | |
| 20 | 新增: > | |
| 19 | 21 | <Grid> |
| 20 | 22 | <!--主要功能--> |
| 21 | 23 | <Grid> |
| @@ -0,0 +1,17 @@ | ||
| 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 | 新增:using UI.Controls.Select; | |
| 8 | 新增: | |
| 9 | 新增:namespace UI.Models.CategoryAppList | |
| 10 | 新增:{ | |
| 11 | 新增: public class ChooseAppModel | |
| 12 | 新增: { | |
| 13 | 新增: public bool IsChoosed { get; set; } | |
| 14 | 新增: public AppModel App { get; set; } | |
| 15 | 新增: public SelectItemModel Value { get; set; } = new SelectItemModel(); | |
| 16 | 新增: } | |
| 17 | 新增:} | |
| @@ -1,4 +1,5 @@ | ||
| 1 | 删除:using System; | |
| 1 | 新增:using Core.Models; | |
| 2 | 新增:using System; | |
| 2 | 3 | using System.Collections.Generic; |
| 3 | 4 | using System.Collections.ObjectModel; |
| 4 | 5 | using System.Linq; |
| @@ -6,6 +7,7 @@ using System.Text; | ||
| 6 | 7 | using System.Threading.Tasks; |
| 7 | 8 | using System.Windows; |
| 8 | 9 | using UI.Controls.Charts.Model; |
| 10 | 新增:using UI.Controls.Select; | |
| 9 | 11 | |
| 10 | 12 | namespace UI.Models |
| 11 | 13 | { |
| @@ -21,8 +23,8 @@ namespace UI.Models | ||
| 21 | 23 | get { return Data_; } |
| 22 | 24 | set { Data_ = value; OnPropertyChanged(); } |
| 23 | 25 | } |
| 24 | 删除: private ChartsDataModel Process_; | |
| 25 | 删除: public ChartsDataModel Process { get { return Process_; } set { Process_ = value; OnPropertyChanged(); } } | |
| 26 | 新增: private AppModel App_; | |
| 27 | 新增: public AppModel App { get { return App_; } set { App_ = value; OnPropertyChanged(); } } | |
| 26 | 28 | private bool IsLoading_; |
| 27 | 29 | public bool IsLoading { get { return IsLoading_; } set { IsLoading_ = value; OnPropertyChanged(); } } |
| 28 | 30 | |
| @@ -38,8 +40,6 @@ namespace UI.Models | ||
| 38 | 40 | private string LongDay_; |
| 39 | 41 | public string LongDay { get { return LongDay_; } set { LongDay_ = value; OnPropertyChanged(); } } |
| 40 | 42 | |
| 41 | 删除: private string ProcessName_; | |
| 42 | 删除: public string ProcessName { get { return ProcessName_; } set { ProcessName_ = value; OnPropertyChanged(); } } | |
| 43 | 43 | |
| 44 | 44 | private bool IsIgnore_; |
| 45 | 45 | public bool IsIgnore |
| @@ -79,5 +79,17 @@ namespace UI.Models | ||
| 79 | 79 | /// 相比昨日 |
| 80 | 80 | /// </summary> |
| 81 | 81 | public string Yesterday { get { return Yesterday_; } set { Yesterday_ = value; OnPropertyChanged(); } } |
| 82 | 新增: | |
| 83 | 新增: private List<SelectItemModel> Categorys_; | |
| 84 | 新增: /// <summary> | |
| 85 | 新增: /// 分类数据 | |
| 86 | 新增: /// </summary> | |
| 87 | 新增: public List<SelectItemModel> Categorys { get { return Categorys_; } set { Categorys_ = value; OnPropertyChanged(); } } | |
| 88 | 新增: | |
| 89 | 新增: private SelectItemModel Category_; | |
| 90 | 新增: /// <summary> | |
| 91 | 新增: /// 当前分类 | |
| 92 | 新增: /// </summary> | |
| 93 | 新增: public SelectItemModel Category { get { return Category_; } set { Category_ = value; OnPropertyChanged(); } } | |
| 82 | 94 | } |
| 83 | 95 | } |
| @@ -7,6 +7,7 @@ using System.Threading.Tasks; | ||
| 7 | 7 | using UI.Controls; |
| 8 | 8 | using UI.Controls.Base; |
| 9 | 9 | using UI.Controls.Navigation.Models; |
| 10 | 新增:using UI.Controls.Window; | |
| 10 | 11 | |
| 11 | 12 | namespace UI.Models |
| 12 | 13 | { |
| @@ -87,5 +88,12 @@ namespace UI.Models | ||
| 87 | 88 | public bool IsShowToast { get { return IsShowToast_; } set { IsShowToast_ = value; OnPropertyChanged(); } } |
| 88 | 89 | private IconTypes ToastIcon_; |
| 89 | 90 | public IconTypes ToastIcon { get { return ToastIcon_; } set { ToastIcon_ = value; OnPropertyChanged(); } } |
| 91 | 新增: | |
| 92 | 新增: private ToastType ToastType_; | |
| 93 | 新增: public ToastType ToastType | |
| 94 | 新增: { | |
| 95 | 新增: get { return ToastType_; } | |
| 96 | 新增: set { ToastType_ = value; OnPropertyChanged(); } | |
| 97 | 新增: } | |
| 90 | 98 | } |
| 91 | 删除:} | |
| 99 | 新增:} | |
| 文件末尾没有换行 | ||
| @@ -1,5 +1,6 @@ | ||
| 1 | 1 | using Core.Librarys; |
| 2 | 2 | using Core.Librarys.Image; |
| 3 | 新增:using Core.Models; | |
| 3 | 4 | using Core.Servicers.Interfaces; |
| 4 | 5 | using System; |
| 5 | 6 | using System.Collections.Generic; |
| @@ -57,8 +58,12 @@ namespace UI.ViewModels | ||
| 57 | 58 | |
| 58 | 59 | if (data != null) |
| 59 | 60 | { |
| 60 | 删除: main.Data = data; | |
| 61 | 删除: main.Uri = nameof(DetailPage); | |
| 61 | 新增: var model = data.Data as DailyLogModel; | |
| 62 | 新增: if (model != null && model.AppModel != null) | |
| 63 | 新增: { | |
| 64 | 新增: main.Data = model.AppModel; | |
| 65 | 新增: main.Uri = nameof(DetailPage); | |
| 66 | 新增: } | |
| 62 | 67 | } |
| 63 | 68 | } |
| 64 | 69 | |
| @@ -11,6 +11,7 @@ using System.Threading.Tasks; | ||
| 11 | 11 | using System.Windows; |
| 12 | 12 | using UI.Controls; |
| 13 | 13 | using UI.Controls.Charts.Model; |
| 14 | 新增:using UI.Controls.Select; | |
| 14 | 15 | using UI.Librays; |
| 15 | 16 | using UI.Models; |
| 16 | 17 | |
| @@ -21,17 +22,21 @@ namespace UI.ViewModels | ||
| 21 | 22 | private readonly IData data; |
| 22 | 23 | private readonly MainViewModel main; |
| 23 | 24 | private readonly IAppConfig appConfig; |
| 25 | 新增: private readonly ICategorys categories; | |
| 26 | 新增: private readonly IAppData appData; | |
| 24 | 27 | |
| 25 | 28 | private ConfigModel config; |
| 26 | 29 | public Command BlockActionCommand { get; set; } |
| 27 | 30 | public Command ClearSelectMonthDataCommand { get; set; } |
| 28 | 31 | public Command InfoMenuActionCommand { get; set; } |
| 29 | 32 | public DetailPageVM( |
| 30 | 删除: IData data, MainViewModel main, IAppConfig appConfig) | |
| 33 | 新增: IData data, MainViewModel main, IAppConfig appConfig, ICategorys categories, IAppData appData) | |
| 31 | 34 | { |
| 32 | 35 | this.data = data; |
| 33 | 36 | this.main = main; |
| 34 | 37 | this.appConfig = appConfig; |
| 38 | 新增: this.categories = categories; | |
| 39 | 新增: this.appData = appData; | |
| 35 | 40 | |
| 36 | 41 | BlockActionCommand = new Command(new Action<object>(OnBlockActionCommand)); |
| 37 | 42 | ClearSelectMonthDataCommand = new Command(new Action<object>(OnClearSelectMonthDataCommand)); |
| @@ -43,7 +48,7 @@ namespace UI.ViewModels | ||
| 43 | 48 | |
| 44 | 49 | private async void Init() |
| 45 | 50 | { |
| 46 | 删除: Process = main.Data as ChartsDataModel; | |
| 51 | 新增: App = main.Data as AppModel; | |
| 47 | 52 | |
| 48 | 53 | Date = DateTime.Now; |
| 49 | 54 | |
| @@ -61,30 +66,30 @@ namespace UI.ViewModels | ||
| 61 | 66 | switch (obj.ToString()) |
| 62 | 67 | { |
| 63 | 68 | case "copy processname": |
| 64 | 删除: Clipboard.SetText(ProcessName); | |
| 69 | 新增: Clipboard.SetText(App.Name); | |
| 65 | 70 | |
| 66 | 71 | break; |
| 67 | 72 | case "copy process file": |
| 68 | 删除: Clipboard.SetText(Process.PopupText); | |
| 73 | 新增: Clipboard.SetText(App.File); | |
| 69 | 74 | break; |
| 70 | 75 | case "open dir": |
| 71 | 删除: if (File.Exists(Process.PopupText)) | |
| 76 | 新增: if (File.Exists(App.File)) | |
| 72 | 77 | { |
| 73 | 删除: System.Diagnostics.Process.Start("explorer.exe", "/select, " + Process.PopupText); | |
| 78 | 新增: System.Diagnostics.Process.Start("explorer.exe", "/select, " + App.File); | |
| 74 | 79 | } |
| 75 | 80 | else |
| 76 | 81 | { |
| 77 | 删除: main.Toast("进程文件似乎不存在", Controls.Base.IconTypes.Blocked); | |
| 82 | 新增: main.Toast("进程文件似乎不存在", Controls.Window.ToastType.Error, Controls.Base.IconTypes.Blocked); | |
| 78 | 83 | } |
| 79 | 84 | break; |
| 80 | 85 | case "open exe": |
| 81 | 删除: if (File.Exists(Process.PopupText)) | |
| 86 | 新增: if (File.Exists(App.File)) | |
| 82 | 87 | { |
| 83 | 删除: System.Diagnostics.Process.Start(Process.PopupText); | |
| 88 | 新增: System.Diagnostics.Process.Start(App.File); | |
| 84 | 89 | } |
| 85 | 90 | else |
| 86 | 91 | { |
| 87 | 删除: main.Toast("进程文件似乎不存在", Controls.Base.IconTypes.Blocked); | |
| 92 | 新增: main.Toast("进程文件似乎不存在", Controls.Window.ToastType.Error, Controls.Base.IconTypes.Blocked); | |
| 88 | 93 | } |
| 89 | 94 | break; |
| 90 | 95 | } |
| @@ -99,15 +104,15 @@ namespace UI.ViewModels | ||
| 99 | 104 | { |
| 100 | 105 | if (obj.ToString() == "block") |
| 101 | 106 | { |
| 102 | 删除: config.Behavior.IgnoreProcessList.Add(ProcessName); | |
| 107 | 新增: config.Behavior.IgnoreProcessList.Add(App.Name); | |
| 103 | 108 | IsIgnore = true; |
| 104 | 删除: main.Toast("进程已忽略"); | |
| 109 | 新增: main.Toast("应用已忽略"); | |
| 105 | 110 | } |
| 106 | 111 | else |
| 107 | 112 | { |
| 108 | 删除: config.Behavior.IgnoreProcessList.Remove(ProcessName); | |
| 113 | 新增: config.Behavior.IgnoreProcessList.Remove(App.Name); | |
| 109 | 114 | IsIgnore = false; |
| 110 | 删除: main.Toast("进程已取消忽略"); | |
| 115 | 新增: main.Toast("已取消忽略"); | |
| 111 | 116 | } |
| 112 | 117 | |
| 113 | 118 | appConfig.Save(); |
| @@ -119,24 +124,60 @@ namespace UI.ViewModels | ||
| 119 | 124 | { |
| 120 | 125 | await LoadData(); |
| 121 | 126 | } |
| 127 | 新增: | |
| 128 | 新增: if (e.PropertyName == nameof(Category)) | |
| 129 | 新增: { | |
| 130 | 新增: if (App.Category == null && Category != null || Category != null && App.Category.Name != Category.Name) | |
| 131 | 新增: { | |
| 132 | 新增: App.Category = Category.Data as CategoryModel; | |
| 133 | 新增: | |
| 134 | 新增: var app = appData.GetApp(App.ID); | |
| 135 | 新增: if (app != null) | |
| 136 | 新增: { | |
| 137 | 新增: app.CategoryID = App.Category.ID; | |
| 138 | 新增: appData.UpdateApp(app); | |
| 139 | 新增: } | |
| 140 | 新增: } | |
| 141 | 新增: | |
| 142 | 新增: } | |
| 143 | 新增: } | |
| 144 | 新增: | |
| 145 | 新增: private void LoadCategorys(string categoryName) | |
| 146 | 新增: { | |
| 147 | 新增: var list = new List<SelectItemModel>(); | |
| 148 | 新增: foreach (var item in categories.GetCategories()) | |
| 149 | 新增: { | |
| 150 | 新增: var option = new SelectItemModel() | |
| 151 | 新增: { | |
| 152 | 新增: Data = item, | |
| 153 | 新增: Img = item.IconFile, | |
| 154 | 新增: Name = item.Name, | |
| 155 | 新增: }; | |
| 156 | 新增: list.Add(option); | |
| 157 | 新增: if (categoryName == option.Name) | |
| 158 | 新增: { | |
| 159 | 新增: Category = option; | |
| 160 | 新增: } | |
| 161 | 新增: } | |
| 162 | 新增: | |
| 163 | 新增: Categorys = list; | |
| 164 | 新增: | |
| 122 | 165 | } |
| 123 | 166 | |
| 124 | 167 | private async Task LoadInfo() |
| 125 | 168 | { |
| 126 | 169 | await Task.Run(() => |
| 127 | 170 | { |
| 128 | 删除: if (Process != null) | |
| 171 | 新增: if (App != null) | |
| 129 | 172 | { |
| 130 | 删除: var info = Process.Data as DailyLogModel; | |
| 131 | 删除: if (info != null) | |
| 132 | 删除: { | |
| 133 | 删除: ProcessName = info.AppModel?.Name; | |
| 134 | 删除: // 判断是否是忽略的进程 | |
| 135 | 删除: IsIgnore = config.Behavior.IgnoreProcessList.Contains(ProcessName); | |
| 136 | 删除: } | |
| 137 | 173 | |
| 138 | 删除: var today = data.GetProcess(ProcessName, DateTime.Now); | |
| 139 | 删除: var yesterday = data.GetProcess(ProcessName, DateTime.Now.AddDays(-1)); | |
| 174 | 新增: // 判断是否是忽略的进程 | |
| 175 | 新增: IsIgnore = config.Behavior.IgnoreProcessList.Contains(App.Name); | |
| 176 | 新增: | |
| 177 | 新增: LoadCategorys(App.Category?.Name); | |
| 178 | 新增: | |
| 179 | 新增: var today = data.GetProcess(App.ID, DateTime.Now); | |
| 180 | 新增: var yesterday = data.GetProcess(App.ID, DateTime.Now.AddDays(-1)); | |
| 140 | 181 | |
| 141 | 182 | if (today != null) |
| 142 | 183 | { |
| @@ -185,11 +226,10 @@ namespace UI.ViewModels | ||
| 185 | 226 | { |
| 186 | 227 | await Task.Run(() => |
| 187 | 228 | { |
| 188 | 删除: if (Process != null) | |
| 229 | 新增: if (App != null) | |
| 189 | 230 | { |
| 190 | 231 | |
| 191 | 删除: var info = Process.Data as DailyLogModel; | |
| 192 | 删除: var monthData = data.GetProcessMonthLogList(info.AppModel.Name, Date); | |
| 232 | 新增: var monthData = data.GetProcessMonthLogList(App.ID, Date); | |
| 193 | 233 | int monthTotal = monthData.Sum(m => m.Time); |
| 194 | 234 | Total = Timer.Fromat(monthTotal); |
| 195 | 235 | |
| @@ -231,10 +271,10 @@ namespace UI.ViewModels | ||
| 231 | 271 | { |
| 232 | 272 | await Task.Run(async () => |
| 233 | 273 | { |
| 234 | 删除: if (Process != null) | |
| 274 | 新增: if (App != null) | |
| 235 | 275 | { |
| 236 | 276 | main.Toast("正在处理"); |
| 237 | 删除: data.Clear(ProcessName, Date); | |
| 277 | 新增: data.Clear(App.ID, Date); | |
| 238 | 278 | |
| 239 | 279 | await LoadData(); |
| 240 | 280 | await LoadInfo(); |
| @@ -253,7 +293,7 @@ namespace UI.ViewModels | ||
| 253 | 293 | { |
| 254 | 294 | var bindModel = new ChartsDataModel(); |
| 255 | 295 | bindModel.Data = item; |
| 256 | 删除: bindModel.Name =item.AppModel.Name; | |
| 296 | 新增: bindModel.Name = item.AppModel.Name; | |
| 257 | 297 | bindModel.Value = item.Time; |
| 258 | 298 | bindModel.Tag = Timer.Fromat(item.Time); |
| 259 | 299 | bindModel.PopupText = item.AppModel.File; |
| @@ -1,5 +1,6 @@ | ||
| 1 | 1 | using Core.Librarys; |
| 2 | 2 | using Core.Librarys.Image; |
| 3 | 新增:using Core.Models; | |
| 3 | 4 | using Core.Servicers.Interfaces; |
| 4 | 5 | using System; |
| 5 | 6 | using System.Collections.Generic; |
| @@ -64,8 +65,13 @@ namespace UI.ViewModels | ||
| 64 | 65 | |
| 65 | 66 | if (data != null) |
| 66 | 67 | { |
| 67 | 删除: main.Data = data; | |
| 68 | 删除: main.Uri = nameof(DetailPage); | |
| 68 | 新增: var model = data.Data as DailyLogModel; | |
| 69 | 新增: if (model != null && model.AppModel != null) | |
| 70 | 新增: { | |
| 71 | 新增: main.Data = model.AppModel; | |
| 72 | 新增: main.Uri = nameof(DetailPage); | |
| 73 | 新增: } | |
| 74 | 新增: | |
| 69 | 75 | } |
| 70 | 76 | } |
| 71 | 77 | |
| @@ -6,6 +6,7 @@ using System.Threading.Tasks; | ||
| 6 | 6 | using UI.Controls; |
| 7 | 7 | using UI.Controls.Base; |
| 8 | 8 | using UI.Controls.Navigation.Models; |
| 9 | 新增:using UI.Controls.Window; | |
| 9 | 10 | using UI.Models; |
| 10 | 11 | using UI.Views; |
| 11 | 12 | |
| @@ -72,6 +73,7 @@ namespace UI.ViewModels | ||
| 72 | 73 | IndexUriList = new List<string>(); |
| 73 | 74 | IndexUriList.Add(nameof(IndexPage)); |
| 74 | 75 | IndexUriList.Add(nameof(DataPage)); |
| 76 | 新增: IndexUriList.Add(nameof(CategoryPage)); | |
| 75 | 77 | |
| 76 | 78 | |
| 77 | 79 | Items.Add(new Controls.Navigation.Models.NavigationItemModel() |
| @@ -85,19 +87,38 @@ namespace UI.ViewModels | ||
| 85 | 87 | Items.Add(new Controls.Navigation.Models.NavigationItemModel() |
| 86 | 88 | { |
| 87 | 89 | Icon = Controls.Base.IconTypes.BIDashboard, |
| 88 | 删除: Title = "详细", | |
| 90 | 新增: Title = "统计", | |
| 89 | 91 | ID = 1, |
| 90 | 92 | Uri = nameof(DataPage), |
| 91 | 93 | |
| 94 | 新增: }); | |
| 95 | 新增: Items.Add(new Controls.Navigation.Models.NavigationItemModel() | |
| 96 | 新增: { | |
| 97 | 新增: Icon = Controls.Base.IconTypes.ClipboardListMirrored, | |
| 98 | 新增: //Icon = Controls.Base.IconTypes.BIDashboard, | |
| 99 | 新增: Title = "详细", | |
| 100 | 新增: ID = 2, | |
| 101 | 新增: Uri = nameof(DataPage), | |
| 102 | 新增: | |
| 103 | 新增: }); | |
| 104 | 新增: Items.Add(new Controls.Navigation.Models.NavigationItemModel() | |
| 105 | 新增: { | |
| 106 | 新增: Icon = Controls.Base.IconTypes.TagGroup, | |
| 107 | 新增: Title = "分类", | |
| 108 | 新增: ID = 3, | |
| 109 | 新增: Uri = nameof(CategoryPage), | |
| 110 | 新增: | |
| 92 | 111 | }); |
| 93 | 112 | NavSelectedItem = Items[0]; |
| 94 | 113 | } |
| 95 | 114 | |
| 96 | 删除: public void Toast(string content, IconTypes icon = IconTypes.Accept) | |
| 115 | 新增: public void Toast(string content, ToastType type = ToastType.Info, IconTypes icon = IconTypes.Accept) | |
| 97 | 116 | { |
| 98 | 117 | ToastContent = content; |
| 99 | 118 | ToastIcon = icon; |
| 119 | 新增: ToastType = type; | |
| 100 | 120 | IsShowToast = true; |
| 121 | 新增: | |
| 101 | 122 | } |
| 102 | 123 | } |
| 103 | 124 | } |
| @@ -53,7 +53,7 @@ namespace UI.ViewModels | ||
| 53 | 53 | |
| 54 | 54 | if (!File.Exists(updaterExePath)) |
| 55 | 55 | { |
| 56 | 删除: mainVM.Toast("升级程序似乎已被删除,请手动前往发布页查看新版本", Controls.Base.IconTypes.None); | |
| 56 | 新增: mainVM.Toast("升级程序似乎已被删除,请手动前往发布页查看新版本", Controls.Window.ToastType.Error, Controls.Base.IconTypes.None); | |
| 57 | 57 | return; |
| 58 | 58 | } |
| 59 | 59 | File.Copy(updaterExePath, updaterCacheExePath, true); |
| @@ -70,7 +70,7 @@ namespace UI.ViewModels | ||
| 70 | 70 | CheckUpdateBtnVisibility = System.Windows.Visibility.Visible; |
| 71 | 71 | |
| 72 | 72 | Logger.Error(ex.Message); |
| 73 | 删除: mainVM.Toast("无法正确启动检查更新程序", Controls.Base.IconTypes.None); | |
| 73 | 新增: mainVM.Toast("无法正确启动检查更新程序", Controls.Window.ToastType.Error, Controls.Base.IconTypes.None); | |
| 74 | 74 | } |
| 75 | 75 | } |
| 76 | 76 | |
| @@ -1,4 +1,4 @@ | ||
| 1 | 删除:<Page | |
| 1 | 新增:<Page xmlns:Select="clr-namespace:UI.Controls.Select" | |
| 2 | 2 | xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
| 3 | 3 | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
| 4 | 4 | xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
| @@ -34,7 +34,8 @@ | ||
| 34 | 34 | <ColumnDefinition Width="3*"/> |
| 35 | 35 | |
| 36 | 36 | </Grid.ColumnDefinitions> |
| 37 | 删除: <Image Source="{Binding Process.Icon}" Width="25" HorizontalAlignment="Center" VerticalAlignment="Center"/> | |
| 37 | 新增: <base:Img URL="{Binding App.IconFile}" Width="25" HorizontalAlignment="Center" VerticalAlignment="Center"/> | |
| 38 | 新增: <!--<Image Source="{Binding Process.Icon}" Width="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>--> | |
| 38 | 39 | |
| 39 | 40 | <StackPanel Grid.Column="1" VerticalAlignment="Center"> |
| 40 | 41 | <!--<StackPanel Orientation="Horizontal"> |
| @@ -55,10 +56,20 @@ | ||
| 55 | 56 | </StackPanel> |
| 56 | 57 | </Border> |
| 57 | 58 | |
| 58 | 删除: <TextBlock ToolTip="描述" Grid.Column="1" Text="{Binding Process.Name}" FontSize="18" VerticalAlignment="Center" TextWrapping="WrapWithOverflow"/> | |
| 59 | 新增: <TextBlock ToolTip="描述" Grid.Column="1" Text="{Binding App.Description}" FontSize="18" VerticalAlignment="Center" TextWrapping="WrapWithOverflow"/> | |
| 59 | 60 | |
| 60 | 删除: <TextBlock ToolTip="进程名" Text="{Binding ProcessName}" FontSize="12" Foreground="Gray" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5,0,0"/> | |
| 61 | 删除: <TextBlock ToolTip="进程文件路径" Foreground="Gray" Text="{Binding Process.PopupText}" Margin="0,5,0,0" TextWrapping="WrapWithOverflow"/> | |
| 61 | 新增: <TextBlock ToolTip="进程名" Text="{Binding App.Name}" FontSize="12" Foreground="Gray" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5,0,0"/> | |
| 62 | 新增: <TextBlock ToolTip="进程文件路径" Foreground="Gray" Text="{Binding App.File}" Margin="0,5,0,0" TextWrapping="WrapWithOverflow"/> | |
| 63 | 新增: <!--分类--> | |
| 64 | 新增: | |
| 65 | 新增: <!--<Border Margin="0,10,0,0" Background="#f9f9f9" HorizontalAlignment="Left" Padding="5" CornerRadius="5"> | |
| 66 | 新增: | |
| 67 | 新增: <StackPanel Orientation="Horizontal"> | |
| 68 | 新增: <base:Img URL="{Binding Process.Data.AppModel.Category.IconFile}" Width="25" Height="25" VerticalAlignment="Center"/> | |
| 69 | 新增: <TextBlock Text="{Binding Process.Data.AppModel.Category.Name}" VerticalAlignment="Center" Margin="5,0,0,0"/> | |
| 70 | 新增: </StackPanel> | |
| 71 | 新增: </Border>--> | |
| 72 | 新增: <Select:Select ToolTip="分类" SelectedItem="{Binding Category,Mode=TwoWay}" Options="{Binding Categorys}"/> | |
| 62 | 73 | |
| 63 | 74 | </StackPanel> |
| 64 | 75 | |
| @@ -24,8 +24,24 @@ namespace UI.Views | ||
| 24 | 24 | public DetailPage(DetailPageVM vm) |
| 25 | 25 | { |
| 26 | 26 | InitializeComponent(); |
| 27 | 删除: | |
| 27 | 新增: | |
| 28 | 28 | DataContext = vm; |
| 29 | 新增: | |
| 30 | 新增: | |
| 31 | 新增: //test.Options = new List<Controls.Select.SelectItemModel>() | |
| 32 | 新增: //{ | |
| 33 | 新增: // new Controls.Select.SelectItemModel() | |
| 34 | 新增: //{ | |
| 35 | 新增: // Name = "123abc", | |
| 36 | 新增: // Img = "D:\\projects\\moneylog\\icon.png" | |
| 37 | 新增: //},new Controls.Select.SelectItemModel() | |
| 38 | 新增: //{ | |
| 39 | 新增: // Name = "AAA", | |
| 40 | 新增: // Img = "D:\\projects\\moneylog\\icon.png" | |
| 41 | 新增: //} | |
| 42 | 新增: //}; | |
| 43 | 新增: | |
| 44 | 新增: //test.SelectedItem = test.Options[0]; | |
| 29 | 45 | } |
| 30 | 46 | } |
| 31 | 47 | } |

