-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJsonFileHandler.cs
More file actions
160 lines (142 loc) · 6.33 KB
/
JsonFileHandler.cs
File metadata and controls
160 lines (142 loc) · 6.33 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
using System;
using System.IO;
using System.Text.Json;
using System.Text.Json.Serialization;
using ReleaseNotesUpdater.Models;
namespace ReleaseNotesUpdater
{
public class JsonFileHandler
{
private readonly string _downloadPath;
private readonly JsonSerializerOptions _jsonOptions;
public JsonFileHandler(string downloadPath)
{
_downloadPath = downloadPath;
_jsonOptions = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
ReadCommentHandling = JsonCommentHandling.Skip
};
}
public string? FindJsonFile(string runtimeId, string jsonFileNamePattern)
{
string runtimeFolderPath = Path.Combine(_downloadPath, $"release-manifests_{runtimeId}", "release-manifests");
if (Directory.Exists(runtimeFolderPath))
{
string[] files = Directory.GetFiles(runtimeFolderPath, jsonFileNamePattern, SearchOption.AllDirectories);
if (files.Length > 0)
{
return files[0]; // Return the first matching file
}
}
return null; // Return null if no matching file is found
}
public T? DeserializeJsonFile<T>(string jsonFilePath)
{
if (!File.Exists(jsonFilePath))
{
throw new FileNotFoundException($"JSON file not found: {jsonFilePath}");
}
string jsonContent = File.ReadAllText(jsonFilePath);
return JsonSerializer.Deserialize<T>(jsonContent, _jsonOptions);
}
public ReleasesConfiguration? DeserializeReleasesConfiguration(string jsonFilePath)
{
return DeserializeJsonFile<ReleasesConfiguration>(jsonFilePath);
}
public ReleaseNotes? DeserializeReleaseNotes(string jsonFilePath)
{
return DeserializeJsonFile<ReleaseNotes>(jsonFilePath);
}
public CoreReleasesConfiguration? DeserializeCoreReleasesConfiguration(string jsonFilePath)
{
return DeserializeJsonFile<CoreReleasesConfiguration>(jsonFilePath);
} public List<MsrcConfig> LoadMsrcInformation(string configFilePath)
{
if (!File.Exists(configFilePath))
{
Console.WriteLine($"WARNING: Config file not found at: {configFilePath}");
return new List<MsrcConfig>();
}
try
{
string jsonContent = File.ReadAllText(configFilePath);
using var document = JsonDocument.Parse(jsonContent);
if (document.RootElement.TryGetProperty("MsrcInformation", out var msrcElement))
{
var result = JsonSerializer.Deserialize<List<MsrcConfig>>(msrcElement.GetRawText(), _jsonOptions);
return result ?? new List<MsrcConfig>();
}
return new List<MsrcConfig>();
}
catch (Exception ex)
{
Console.WriteLine($"ERROR: Failed to parse MSRC information from config: {ex.Message}");
return new List<MsrcConfig>();
}
}
/// <summary>
/// Load release reference configuration from separate JSON files
/// </summary>
/// <param name="configDirectory">Directory containing the configuration JSON files</param>
/// <returns>ReleaseReferenceConfiguration with loaded data</returns>
public ReleaseReferenceConfiguration LoadReleaseReferenceConfiguration(string configDirectory)
{
var config = new ReleaseReferenceConfiguration();
try
{
// Load launch dates
string launchDatesPath = Path.Combine(configDirectory, "launch-dates.json");
if (File.Exists(launchDatesPath))
{
string jsonContent = File.ReadAllText(launchDatesPath);
var launchDates = JsonSerializer.Deserialize<Dictionary<string, string>>(jsonContent, _jsonOptions);
if (launchDates != null)
{
config.LaunchDates = launchDates;
}
}
else
{
Console.WriteLine($"WARNING: Launch dates configuration file not found at: {launchDatesPath}");
}
// Load announcement links
string announcementLinksPath = Path.Combine(configDirectory, "announcement-links.json");
if (File.Exists(announcementLinksPath))
{
string jsonContent = File.ReadAllText(announcementLinksPath);
var announcementLinks = JsonSerializer.Deserialize<Dictionary<string, string>>(jsonContent, _jsonOptions);
if (announcementLinks != null)
{
config.AnnouncementLinks = announcementLinks;
}
}
else
{
Console.WriteLine($"WARNING: Announcement links configuration file not found at: {announcementLinksPath}");
}
// Load EOL announcement links
string eolAnnouncementLinksPath = Path.Combine(configDirectory, "eol-announcement-links.json");
if (File.Exists(eolAnnouncementLinksPath))
{
string jsonContent = File.ReadAllText(eolAnnouncementLinksPath);
var eolAnnouncementLinks = JsonSerializer.Deserialize<Dictionary<string, string>>(jsonContent, _jsonOptions);
if (eolAnnouncementLinks != null)
{
config.EolAnnouncementLinks = eolAnnouncementLinks;
}
}
else
{
Console.WriteLine($"WARNING: EOL announcement links configuration file not found at: {eolAnnouncementLinksPath}");
}
}
catch (Exception ex)
{
Console.WriteLine($"ERROR: Failed to load release reference configuration: {ex.Message}");
}
return config;
}
}
}