This commit is contained in:
1 parent
8efd032cc6
commit
df38dccbf1
735 files changed
+128321
-120870
No files matched your search
@@ -1,49 +1,55 @@
|
||||
import { resolveGamedataFile } from "@/lib/services/import/core/asset-paths";
|
||||
import {
|
||||
readGamedataJson,
|
||||
withGamedataLock,
|
||||
writeGamedataJsonAtomic,
|
||||
readGamedataJson,
|
||||
withGamedataLock,
|
||||
writeGamedataJsonAtomic,
|
||||
} from "@/lib/services/import/core/gamedata-json";
|
||||
import { siteSettings } from "@/lib/services/site-settings";
|
||||
|
||||
export interface FigureLibrary {
|
||||
id: string;
|
||||
revision: number;
|
||||
parts?: Array<{ id: number; type: string }>;
|
||||
id: string;
|
||||
revision: number;
|
||||
parts?: Array<{ id: number; type: string }>;
|
||||
}
|
||||
|
||||
interface FigureMapFile {
|
||||
libraries: FigureLibrary[];
|
||||
libraries: FigureLibrary[];
|
||||
}
|
||||
|
||||
let pathOverride: string | null = null;
|
||||
export function __setFigureMapPathForTests(p: string | null): void {
|
||||
pathOverride = p;
|
||||
pathOverride = p;
|
||||
}
|
||||
|
||||
export async function getFigureMapPath(): Promise<string> {
|
||||
if (pathOverride) return pathOverride;
|
||||
const url = await siteSettings.get("figuremap_url", "/nitro-assets/gamedata/FigureMap.json");
|
||||
return resolveGamedataFile(url ?? "/nitro-assets/gamedata/FigureMap.json", "FigureMap.json");
|
||||
if (pathOverride) return pathOverride;
|
||||
const url = await siteSettings.get(
|
||||
"figuremap_url",
|
||||
"/nitro-assets/gamedata/FigureMap.json",
|
||||
);
|
||||
return resolveGamedataFile(
|
||||
url ?? "/nitro-assets/gamedata/FigureMap.json",
|
||||
"FigureMap.json",
|
||||
);
|
||||
}
|
||||
|
||||
export async function listFigureLibraries(): Promise<FigureLibrary[]> {
|
||||
const file = await getFigureMapPath();
|
||||
const data = await readGamedataJson<Partial<FigureMapFile>>(file);
|
||||
return Array.isArray(data.libraries) ? data.libraries : [];
|
||||
const file = await getFigureMapPath();
|
||||
const data = await readGamedataJson<Partial<FigureMapFile>>(file);
|
||||
return Array.isArray(data.libraries) ? data.libraries : [];
|
||||
}
|
||||
|
||||
export async function mergeLibrary(lib: FigureLibrary): Promise<void> {
|
||||
const file = await getFigureMapPath();
|
||||
await withGamedataLock(file, async () => {
|
||||
const data = await readGamedataJson<{ libraries?: FigureLibrary[] }>(file);
|
||||
const libraries = Array.isArray(data.libraries) ? data.libraries : [];
|
||||
const idx = libraries.findIndex((l) => l.id === lib.id);
|
||||
if (idx >= 0) {
|
||||
libraries[idx] = lib;
|
||||
} else {
|
||||
libraries.push(lib);
|
||||
}
|
||||
await writeGamedataJsonAtomic(file, { ...data, libraries });
|
||||
});
|
||||
const file = await getFigureMapPath();
|
||||
await withGamedataLock(file, async () => {
|
||||
const data = await readGamedataJson<{ libraries?: FigureLibrary[] }>(file);
|
||||
const libraries = Array.isArray(data.libraries) ? data.libraries : [];
|
||||
const idx = libraries.findIndex((l) => l.id === lib.id);
|
||||
if (idx >= 0) {
|
||||
libraries[idx] = lib;
|
||||
} else {
|
||||
libraries.push(lib);
|
||||
}
|
||||
await writeGamedataJsonAtomic(file, { ...data, libraries });
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user