From 3a679eb03c862635734e767e2cef8bdfb11b55ab Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 8 Dec 2025 16:02:51 -0500 Subject: [PATCH] chore: match uploads by stripping timestamp prefixes --- .../backend/scripts/reprocess_uploads.js | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/photo-gallery-app/backend/scripts/reprocess_uploads.js b/photo-gallery-app/backend/scripts/reprocess_uploads.js index 749d0b9..5b4b77e 100644 --- a/photo-gallery-app/backend/scripts/reprocess_uploads.js +++ b/photo-gallery-app/backend/scripts/reprocess_uploads.js @@ -61,14 +61,25 @@ const isHeifBuffer = (buffer) => buffer && buffer.length >= 12 && HEIF_BRANDS.ha function parseBaseName(doc) { const raw = path.basename(doc.filename || doc.path || '', path.extname(doc.filename || doc.path || '')); // Strip any trailing brace artifacts from older filenames - const cleaned = raw.endsWith('}') ? raw.slice(0, -1) : raw; - const match = raw.match(/^(.*?)(-md|-sm)?$/); - const base = match ? match[1] : raw; - return cleaned !== raw ? cleaned : base; + const cleaned = raw.replace(/[}]+$/, ''); + const match = cleaned.match(/^(.*?)(-md|-sm)?$/); + return match ? match[1] : cleaned; +} + +function deriveCandidateBases(baseName) { + const bases = new Set(); + bases.add(baseName); + // If name starts with a leading timestamp and dash, also try the suffix (original filename) + const tsMatch = baseName.match(/^(\d{8,})-(.+)$/); + if (tsMatch) { + bases.add(tsMatch[2]); + } + return Array.from(bases); } function sourceCandidates(doc) { const baseName = parseBaseName(doc); + const candidateBases = deriveCandidateBases(baseName); const preferred = new Set(); const fromDocPath = doc.path ? doc.path.replace(/^\/+/, '') : ''; const fromDocFile = doc.filename ? path.join('uploads', doc.filename) : ''; @@ -76,14 +87,16 @@ function sourceCandidates(doc) { .filter(Boolean) .forEach(rel => preferred.add(path.join(UPLOAD_DIR, rel.replace(/^uploads[\\/]/, '')))); - // Look for any common source extension using the base name - for (const ext of SOURCE_EXTS) { - preferred.add(path.join(UPLOAD_DIR, `${baseName}${ext}`)); - } - // Also check variant-style names in case only a variant exists - for (const ext of SOURCE_EXTS) { - preferred.add(path.join(UPLOAD_DIR, `${baseName}-md${ext}`)); - preferred.add(path.join(UPLOAD_DIR, `${baseName}-sm${ext}`)); + // Look for any common source extension using candidate base names + for (const base of candidateBases) { + for (const ext of SOURCE_EXTS) { + preferred.add(path.join(UPLOAD_DIR, `${base}${ext}`)); + } + // Also check variant-style names in case only a variant exists + for (const ext of SOURCE_EXTS) { + preferred.add(path.join(UPLOAD_DIR, `${base}-md${ext}`)); + preferred.add(path.join(UPLOAD_DIR, `${base}-sm${ext}`)); + } } return Array.from(preferred); }