Multiworld

This commit is contained in:
2025-03-13 21:51:53 -05:00
parent 13042ec841
commit fd2e8190c3
9 changed files with 262 additions and 39 deletions

View File

@@ -4,6 +4,7 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
@@ -52,6 +53,10 @@
result["meta"] = json;
}
if (files.TryGetValue("parent", out var parent)) {
result["parent"] = parent.ToString();
}
if (settings.Race != RaceMode.Race && files.TryGetValue("spoiler.json", out var spoilerData)) {
var json = JsonDocument.Parse(spoilerData.ToString());
result["spoiler"] = json;
@@ -61,5 +66,56 @@
return result;
}
public async Task<IDictionary<string, object>> GetMulti(string multiId) {
var files = await this.AzureStorage.GetFiles(multiId);
this.Logger.LogDebug("Found files: {@files}", files.Keys);
var result = new Dictionary<string, object>();
if (!files.TryGetValue("settings.json", out var settingsData)) {
result["status"] = 404;
result["error"] = "multi not found";
return result;
}
var settingsJson = JsonDocument.Parse(settingsData.ToString());
result["settings"] = settingsJson;
var settings = settingsJson.Deserialize<IList<SeedSettings>>(JsonOptions.Default) ?? new List<SeedSettings>();
if (!files.TryGetValue("multidata", out var multidata)) {
if (files.ContainsKey("generating")) {
result["status"] = 409;
result["error"] = "generation still in progress";
return result;
} else {
result["status"] = 404;
result["error"] = "generation failed";
return result;
}
}
result["multidata"] = Convert.ToBase64String(multidata.ToArray());
if (files.TryGetValue("meta.json", out var metaData)) {
var json = JsonDocument.Parse(metaData.ToString());
result["meta"] = json;
}
if (files.TryGetValue("worlds.json", out var worlds)) {
var json = JsonDocument.Parse(worlds.ToString());
result["worlds"] = json;
}
if (!settings.Any(s => s.Race == RaceMode.Race) && files.TryGetValue("spoiler.json", out var spoilerData)) {
var json = JsonDocument.Parse(spoilerData.ToString());
result["spoiler"] = json;
}
result["status"] = 200;
return result;
}
}
}