Commit multilingual editorial frontend work
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import { mkdir, copyFile, readFile, readdir, writeFile } from "node:fs/promises";
|
||||
import { existsSync } from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
const root = process.cwd();
|
||||
const sourceDir = path.join(root, "images", "facebook-060426");
|
||||
const manifestPath = path.join(root, "tmp", "facebook-060426-manifest.json");
|
||||
const targetDir = path.join(root, "public", "images", "family-lab", "facebook-060426");
|
||||
const targetManifest = path.join(targetDir, "manifest.json");
|
||||
|
||||
const supported = new Set([".jpg", ".jpeg", ".png", ".webp", ".gif"]);
|
||||
|
||||
function titleFromFilename(filename) {
|
||||
const stem = path.parse(filename).name;
|
||||
return stem
|
||||
.replace(/^\d+_[0-9a-z]+_/i, "")
|
||||
.replace(/[_-]+/g, " ")
|
||||
.replace(/\s+/g, " ")
|
||||
.trim() || "Untitled Photo";
|
||||
}
|
||||
|
||||
function fallbackRowsFromFiles(files) {
|
||||
return files.map((filename) => ({
|
||||
filename,
|
||||
title: titleFromFilename(filename),
|
||||
description: "Family archive snapshot awaiting fuller annotation.",
|
||||
tags: ["family"],
|
||||
duplicate_of: null,
|
||||
named_file: !/^\d{6,}_/.test(filename) && !/^unnamed/i.test(filename),
|
||||
}));
|
||||
}
|
||||
|
||||
async function main() {
|
||||
await mkdir(targetDir, { recursive: true });
|
||||
|
||||
const sourceFiles = (await readdir(sourceDir))
|
||||
.filter((filename) => supported.has(path.extname(filename).toLowerCase()))
|
||||
.sort((a, b) => a.localeCompare(b));
|
||||
|
||||
let rows;
|
||||
if (existsSync(manifestPath)) {
|
||||
rows = JSON.parse(await readFile(manifestPath, "utf-8"));
|
||||
} else {
|
||||
rows = fallbackRowsFromFiles(sourceFiles);
|
||||
}
|
||||
|
||||
const uniqueRows = rows
|
||||
.filter((row) => !row.duplicate_of)
|
||||
.map((row) => ({
|
||||
...row,
|
||||
src: `/images/family-lab/facebook-060426/${row.filename}`,
|
||||
}));
|
||||
|
||||
for (const row of uniqueRows) {
|
||||
await copyFile(path.join(sourceDir, row.filename), path.join(targetDir, row.filename));
|
||||
}
|
||||
|
||||
await writeFile(targetManifest, `${JSON.stringify(uniqueRows, null, 2)}\n`, "utf-8");
|
||||
console.log(`Family lab synced: ${uniqueRows.length} unique photos`);
|
||||
}
|
||||
|
||||
main().catch((error) => {
|
||||
console.error(error);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user