-
Notifications
You must be signed in to change notification settings - Fork 0
/
QTCLConfig.cs
59 lines (50 loc) · 1.98 KB
/
QTCLConfig.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
using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace qtcl
{
public static class QTCLConfigLoader
{
public static string DefaultJSON = $$"""
{
"RandomFileTextLookupOperator":
{
"Directory": "{{QTCLH.APP_DIR}}data\random-text-files\",
"FileType": ".txt"
}
}
""";
public static QTCLConfig? Load()
{
string confPath = QTCLH.APP_DIR + "qtcl.conf";
if (!QTCLH.FILE.Exists(confPath))
{
QTCLH.FILE.Create(confPath);
QTCLH.FILE.PutAllContent(confPath, QTCLConfigLoader.DefaultJSON);
}
string rawConfContents = QTCLH.FILE.GetAllContent(confPath);
// The config file is written to be user friendly. Some of the contents will make the JSONSerializer panic.
// Below we "sanitize" the contents.
// Filesystem Paths are written with single backslash chars "\", so we must manually escape them.
// Note: We do not do any checking for invalid path chararters here. The parser and interpreter will handle these.
string cleanConfContents = rawConfContents.Replace(@"\", @"\\");
QTCLConfig? ret = JsonSerializer.Deserialize<QTCLConfig>(cleanConfContents);
return ret;
}
}
// https://json2csharp.com/ is a lifesaver for generating these classes.
// NOTE: When you use the site, be sure to escape the strings.
public class RandomFileTextLookupOperator
{
[JsonPropertyName("Directory")]
public string? Directory { get; set; }
[JsonPropertyName("FileType")]
public string? FileType { get; set; }
}
public class QTCLConfig
{
[JsonPropertyName("RandomFileTextLookupOperator")]
public RandomFileTextLookupOperator? RandomFileTextLookupOperator { get; set; }
}
}