-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProcessFileWorker.cs
107 lines (95 loc) · 3.32 KB
/
ProcessFileWorker.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NewProcessMonitoring
{
internal class ProcessFileWorker
{
public readonly string _filePath = string.Empty;
public Dictionary<string, ProcessFileItem> ItemsByFullPath { get; private set; } = new Dictionary<string, ProcessFileItem>();
public ProcessFileWorker(string logFilePath)
{
if (string.IsNullOrEmpty(logFilePath))
throw new ArgumentNullException(nameof(logFilePath));
Debug.WriteLine($"Process file: {logFilePath}");
_filePath = logFilePath;
CheckDir();
LoadFromFile();
}
public void ClearAllAddedProcesses()
{
ItemsByFullPath.Clear();
Save();
}
public void TryAddNewProcess(IEnumerable<ProcessFileItem> logItems)
{
bool isNeedSave = false;
foreach (var logItem in logItems)
{
if (ItemsByFullPath.TryGetValue(logItem.FullPath, out ProcessFileItem existItem))
{
if (existItem?.IsTrusted != logItem.IsTrusted)
{
ItemsByFullPath[logItem.FullPath] = logItem;
isNeedSave = true;
}
}
else
{
ItemsByFullPath.Add(logItem.FullPath, logItem);
isNeedSave = true;
}
}
if(isNeedSave)
this.Save();
}
public void SetProcessToTrusted()
{
File.WriteAllText(_filePath, string.Empty); //already check for exists
}
public void Save()
{
Debug.WriteLine("Save file");
var json = JsonConvert.SerializeObject(ItemsByFullPath.Values.ToList());
File.WriteAllText(_filePath, json); //already check for exists
}
private void LoadFromFile()
{
ItemsByFullPath.Clear();
if (File.Exists(_filePath))
{
var json = File.ReadAllText(_filePath);
if (!string.IsNullOrWhiteSpace(json))
{
try
{
var deserializedItems = JsonConvert.DeserializeObject<List<ProcessFileItem>>(json);
if (deserializedItems != null)
{
foreach (var item in deserializedItems) {
ItemsByFullPath.Add(item.FullPath, item);
}
}
}
catch {
File.Delete(_filePath); //remove if can't deserialize
}
}
}
}
private void CheckDir()
{
var fileDir = Path.GetDirectoryName(_filePath);
if (fileDir != null)
{
if (!Directory.Exists(fileDir))
Directory.CreateDirectory(fileDir);
}
}
}
}