CatStation/Content.Server/Corvax/GuideGenerator/MetaLicenseGenerator.cs
2026-05-12 18:38:50 +07:00

53 lines
1.8 KiB
C#

using System.IO;
using System.Text.Encodings.Web;
using System.Text.Json;
namespace Content.Server.Corvax.GuideGenerator;
public static class MetaLicenseGenerator
{
private static readonly JsonSerializerOptions SerializeOptions = new()
{
WriteIndented = true,
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
public static void PublishJson(Stream stream)
{
var workingDir = Directory.GetCurrentDirectory();
var resourcesRoot = Path.Combine(workingDir, "Resources");
if (!Directory.Exists(resourcesRoot))
return;
var output = new Dictionary<string, Dictionary<string, string>>();
foreach (var metaPath in Directory.EnumerateFiles(resourcesRoot, "meta.json", SearchOption.AllDirectories))
{
var json = File.ReadAllText(metaPath);
using var doc = JsonDocument.Parse(json);
var root = doc.RootElement;
var license = root.TryGetProperty("license", out var licEl) && licEl.ValueKind == JsonValueKind.String
? licEl.GetString() ?? string.Empty
: string.Empty;
var copyright = root.TryGetProperty("copyright", out var copyEl) && copyEl.ValueKind == JsonValueKind.String
? copyEl.GetString() ?? string.Empty
: string.Empty;
var resourceDir = Path.GetDirectoryName(metaPath) ?? metaPath;
var relativeResourcePath = Path.GetRelativePath(workingDir, resourceDir).Replace('\\', '/');
output[relativeResourcePath] = new Dictionary<string, string>
{
{ "license", license },
{ "copyright", copyright }
};
}
if (output.Count == 0)
return;
JsonSerializer.Serialize(stream, output, SerializeOptions);
}
}