Files
MercuryConverter/Data/Database.cs
T
2025-08-13 20:13:40 -07:00

102 lines
3.2 KiB
C#

using System;
using System.IO;
using System.Linq;
using System.Text.Json;
namespace MercuryConverter.Data;
public static class Database
{
public static void Setup(string dataDirPath)
{
// Check that path exists
if (!Directory.Exists(dataDirPath))
{
Console.WriteLine($"Folder {dataDirPath} doesn't exist!");
return;
}
// Get metadata.json
var jPath = Path.Combine(dataDirPath, "metadata.json");
string jStr;
JsonElement mdObj;
try
{
jStr = File.ReadAllText(jPath);
}
catch (Exception e)
{
Console.WriteLine($"Couldn't read {jPath}: {e}");
return;
}
try
{
mdObj = JsonDocument.Parse(jStr).RootElement.GetProperty("Exports")[0].GetProperty("Table").GetProperty("Data");
}
catch (Exception e)
{
Console.WriteLine($"Couldn't parse JSON object: {e}");
return;
}
// TODO: Clear existing structures
// Parse metadata.json
foreach (var mdSong in mdObj.EnumerateArray())
{
var id = "";
var title = "";
var rubi = "";
var artist = "";
var genre = -1;
var copyright = "";
var bpm = "";
var version = -1;
var previewTime = -1;
var previewLength = -1;
var jacketPath = "";
var level = new string?[] { null, null, null, null };
var levelBGA = new string?[] { null, null, null, null};
var levelAudio = new string?[] { null, null, null, null };
var levelDesigner = new string?[] { null, null, null, null };
var levelClearRequirements = new string?[] { null, null, null, null };
foreach (var prop in mdSong.GetProperty("Value").EnumerateArray())
{
var value = prop.GetProperty("Value");
// Console.WriteLine($"{prop.GetProperty("Name")}={prop.GetProperty("Value")}");
switch (prop.GetProperty("Name").GetString()!)
{
case "AssetDirectory":
id = value.GetString()!;
break;
case "ScoreGenre":
genre = value.GetInt16();
break;
case "MusicMessage":
title = value.GetString();
break;
case "ArtistMessage":
artist = value.GetString();
break;
case "Rubi":
rubi = value.GetString();
break;
case "Bpm":
bpm = value.GetString();
break;
case "CopyrightMessage":
var c = value.GetString();
if (!new string?[] { "", "-", null }.Contains(c))
{
copyright = c;
}
break;
}
}
Console.WriteLine($"[{id}] {artist} - {title}");
}
}
}