跳到主要内容

github/tai

公开

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

浏览文件

AppData.cs

141 行 · 4.2 KB历史下载
1using Core.Librarys;
2using Core.Librarys.SQLite;
3using Core.Models;
4using Core.Servicers.Interfaces;
5using System;
6using System.Collections.Generic;
7using System.Diagnostics;
8using System.Linq;
9using System.Text;
10using System.Threading.Tasks;
11using System.Windows.Threading;
12
13namespace Core.Servicers.Instances
14{
15 public class AppData : IAppData
16 {
17 private List<AppModel> _apps;
18
19 private readonly IDatabase _databse;
20 private readonly object _locker = new object();
21 public AppData(IDatabase databse)
22 {
23 _databse = databse;
24 }
25 public List<AppModel> GetAllApps()
26 {
27 return _apps;
28 }
29
30 public void Load()
31 {
32 Debug.WriteLine("加载app开始");
33 using (var db = _databse.GetReaderContext())
34 {
35 _apps = (
36 from app in db.App
37 join c in db.Categorys
38 on app.CategoryID equals c.ID into itdata
39 from n in itdata.DefaultIfEmpty()
40 select app
41 ).ToList()
42 .Select(m => new AppModel
43 {
44 ID = m.ID,
45 Category = m.Category != null ? m.Category : null,
46 CategoryID = m.CategoryID,
47 Description = m.Description,
48 File = m.File,
49 IconFile = m.IconFile,
50 Name = m.Name,
51 Alias = m.Alias,
52 TotalTime = m.TotalTime
53 })
54 .ToList();
55 }
56 }
57
58 /// <summary>
59 /// 更新app数据,要先调用GetApp获得后更改并传回才有效
60 /// </summary>
61 /// <param name="app"></param>
62 public void UpdateApp(AppModel app_)
63 {
64 try
65 {
66 using (var db = _databse.GetWriterContext())
67 {
68 var app = db.App.FirstOrDefault(c => c.ID.Equals(app_.ID));
69 if (app != null)
70 {
71 app.TotalTime = app_.TotalTime;
72 app.IconFile = app_.IconFile;
73 app.Name = app_.Name;
74 app.Description = app_.Description;
75 app.File = app_.File;
76 app.CategoryID = app_.CategoryID;
77 app.Alias = app_.Alias;
78 db.SaveChanges();
79 }
80 _databse.CloseWriter();
81 }
82 }
83 catch (Exception e)
84 {
85 Logger.Error(e.ToString());
86 }
87 }
88 public AppModel GetApp(string name)
89 {
90 lock (_locker)
91 {
92 return _apps.Where(m => m.Name == name).FirstOrDefault();
93 }
94 }
95 public AppModel GetApp(int id)
96 {
97 lock (_locker)
98 {
99 return _apps.Where(m => m.ID == id).FirstOrDefault();
100 }
101 }
102 public void AddApp(AppModel app)
103 {
104 lock (_locker)
105 {
106 if (_apps.Where(m => m.Name == app.Name).Any())
107 {
108 return;
109 }
110 try
111 {
112 using (var db = _databse.GetWriterContext())
113 {
114 var r = db.App.Add(app);
115 int res = db.SaveChanges();
116 if (res > 0)
117 {
118 Debug.WriteLine("add done!" + r.ID);
119
120 _apps.Add(app);
121 }
122 _databse.CloseWriter();
123 }
124 }
125 catch (Exception e)
126 {
127 Logger.Error(e.ToString());
128 }
129 }
130 }
131
132
133 public List<AppModel> GetAppsByCategoryID(int categoryID)
134 {
135 lock (_locker)
136 {
137 return _apps.Where(m => m.CategoryID == categoryID).ToList();
138 }
139 }
140 }
141}