fix: use configured furni source and catalog assets

This commit is contained in:
Simo committed 2026-08-02 14:22:05 +02:00
1 parent aed70db81f
commit c78f8812ad
25 files changed
+368 -129

No files matched your search

+13 -22
View File
@@ -1,16 +1,11 @@
import { promises as fs } from "node:fs";
import path from "node:path";
import { withAdmin } from "@/lib/api-handler";
import { apiOk } from "@/lib/api-response";
import { PERMS } from "@/lib/permissions";
const CATALOGUE_DIR = path.join(
/*turbopackIgnore: true*/ process.cwd(),
"public",
"swf",
"c_images",
"catalogue",
);
import {
catalogueAssetDirectories,
readCatalogueAssetFiles,
} from "@/lib/services/catalog-assets";
import { getGamedataRoot } from "@/lib/services/furni-asset-dirs";
export const GET = withAdmin(
{ permission: PERMS.CATALOG_VIEW },
@@ -23,18 +18,14 @@ export const GET = withAdmin(
const offset = Math.max(Number(sp.get("offset") || 0) || 0, 0);
const search = (sp.get("search") || "").trim().toLowerCase();
let icons: number[] = [];
try {
const files = await fs.readdir(CATALOGUE_DIR);
icons = files
.map((f) => /^icon_(\d+)\.(?:png|gif)$/i.exec(f))
.filter((m): m is RegExpExecArray => Boolean(m))
.map((m) => Number(m[1]))
.filter((n) => Number.isFinite(n))
.sort((a, b) => a - b);
} catch {
icons = [];
}
const directories = catalogueAssetDirectories(await getGamedataRoot());
const files = await readCatalogueAssetFiles(directories);
let icons = files
.map((f) => /^icon_(\d+)\.(?:png|gif)$/i.exec(f))
.filter((m): m is RegExpExecArray => Boolean(m))
.map((m) => Number(m[1]))
.filter((n) => Number.isFinite(n))
.sort((a, b) => a - b);
if (search) {
icons = icons.filter((id) => String(id).includes(search));
+15 -23
View File
@@ -1,16 +1,11 @@
import { promises as fs } from "node:fs";
import path from "node:path";
import { withAdmin } from "@/lib/api-handler";
import { apiOk } from "@/lib/api-response";
import { PERMS } from "@/lib/permissions";
const CATALOGUE_DIR = path.join(
/*turbopackIgnore: true*/ process.cwd(),
"public",
"swf",
"c_images",
"catalogue",
);
import {
catalogueAssetDirectories,
readCatalogueAssetFiles,
} from "@/lib/services/catalog-assets";
import { getGamedataRoot } from "@/lib/services/furni-asset-dirs";
export const GET = withAdmin(
{ permission: PERMS.CATALOG_VIEW },
@@ -25,20 +20,17 @@ export const GET = withAdmin(
const type = sp.get("type") || "all";
let names: string[] = [];
try {
const files = await fs.readdir(CATALOGUE_DIR);
const seen = new Set<string>();
for (const file of files) {
if (/^icon_\d+\./i.test(file)) continue;
const base = file.replace(/\.(png|gif|jpg|jpeg|webp)$/i, "");
if (!base || seen.has(base)) continue;
seen.add(base);
names.push(base);
}
names.sort((a, b) => a.localeCompare(b));
} catch {
names = [];
const directories = catalogueAssetDirectories(await getGamedataRoot());
const files = await readCatalogueAssetFiles(directories);
const seen = new Set<string>();
for (const file of files) {
if (/^icon_\d+\./i.test(file)) continue;
const base = file.replace(/\.(png|gif|jpg|jpeg|webp)$/i, "");
if (!base || seen.has(base)) continue;
seen.add(base);
names.push(base);
}
names.sort((a, b) => a.localeCompare(b));
if (type === "header") {
names = names.filter((n) => /header/i.test(n));