From dccec35f77d6acce65be1bc4b97d16c2d8651b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20P?= Date: Fri, 7 Feb 2025 16:54:20 +0100 Subject: [PATCH] Some error handling + change DN and DO filename parsing --- routes/index.mjs | 34 ++++++++++++++++++++++++++++++---- src/Image.js | 5 +++-- src/common.js | 34 +++++++++++++++------------------- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/routes/index.mjs b/routes/index.mjs index af40abf..7cf8555 100644 --- a/routes/index.mjs +++ b/routes/index.mjs @@ -6,30 +6,56 @@ import express from 'express'; let router = express.Router(); +// TODO Log errors + /* GET manifest JSON */ router.get('/iiif/:manifestid/manifest', async function(req, res) { - const manifest = await generateManifest(req.params.manifestid) + let manifest = {}; res.set('Access-Control-Allow-Origin', '*'); + try { + manifest = await generateManifest(req.params.manifestid) + } catch(error) { + res.status(500).json({ + status: 500, + message: 'There was an error processing this request', + details: error + }); + } res.json(manifest); }); /* GET canvas JSON */ router.get('/iiif/:manifestid/canvas/:name', async function(req, res) { - const canvas = await generateCanvas(req.params.manifestid, req.params.name) + let canvas = {}; res.set('Access-Control-Allow-Origin', '*'); + try { + canvas = await generateCanvas(req.params.manifestid, req.params.name) + } catch(error) { + res.status(500).json({status: 500, message: 'There was an error processing this request'}); + } res.json(canvas); }); /* GET sequence JSON */ router.get('/iiif/:manifestid/sequence/:name', async function(req, res) { - const sequence = await generateSequence(req.params.manifestid, req.params.name) + let sequence = {}; res.set('Access-Control-Allow-Origin', '*'); + try { + sequence = await generateSequence(req.params.manifestid, req.params.name) + } catch(error) { + res.status(500).json({status: 500, message: 'There was an error processing this request'}); + } res.json(sequence); }); /* GET possible params for manifest responses */ router.get('/params', async function(req, res) { - res.json(await exposeParams()); + res.set('Access-Control-Allow-Origin', '*'); + try { + res.json(await exposeParams()); + } catch(error) { + res.status(500).json({status: 500, message: 'There was an error processing this request'}); + } }); export default router; \ No newline at end of file diff --git a/src/Image.js b/src/Image.js index 3d37f68..de98248 100644 --- a/src/Image.js +++ b/src/Image.js @@ -41,8 +41,9 @@ function splitHSI(filename) { function splitDNO(filename) { let splitFilename = filename.split('_'); - const baseFolder = splitFilename.slice(0,2).join('_'); - const subfolder = splitFilename.slice(0,3).join('_'); + const papyrusNumb = splitFilename[1]; + const baseFolder = `PHerc_${papyrusNumb}`; + const subfolder = `PHerc_${papyrusNumb}_${splitFilename[0]}`; return {baseFolder, subfolder}; } diff --git a/src/common.js b/src/common.js index 5aee84e..55f8869 100644 --- a/src/common.js +++ b/src/common.js @@ -86,6 +86,7 @@ Common.getParamsFromFolders = async function() { let files = await fs.promises.readdir( `${process.env.IMAGES_DIR}/${p}/${tech}` ); + files = files.filter(file => /(tiff?|jpe?g|jp2|bmp)/.test(file)); if (files.length) { techniques.push(tech.replace(/PHerc_\d+_/i, '')); } @@ -114,7 +115,7 @@ Common.getImageList = async function (manifestId) { `${process.env.IMAGES_DIR}/${baseFolder}/${folderName}` ); - files = files.filter(file => path.extname(file) !== '.csv'); + files = files.filter(file => !/(c2r|copertina|camice|tit)/.test(file) && !file.startsWith('.')); return files; } @@ -149,9 +150,7 @@ Common.getImageSize = async function (imageId) { Common.getImageName = async function (canvas) { const images = await this.getImageList(canvas.resourceId); - return images.filter( - i => i.includes(canvas.name) - )[0]; + return images.filter(i => i.includes(canvas.name))[0]; } /** * Create a canvas from an image filename @@ -169,8 +168,8 @@ Common.createCanvas = async function (manifest, filename) { hiroxnir: 1, nir: 1, hsi: 1, - do: 3, - dn: 3 + do: 2, + dn: 2 }; const canvasName = filename.split('_')[namePos[manifest.technique]] @@ -211,22 +210,19 @@ Common.createCanvas = async function (manifest, filename) { Common.populateCanvases = async function (manifest, images) { const sequence = new Sequence(process.env.BASE_URL); // There's only one sequence + sequence.generateID(manifest.resourceId, 0); - // Camice e copertina all'inizio per DN e DO - if (manifest.technique.startsWith('d')) { - images = [].concat( - images - .filter(i => i.includes('camice') || i.includes('copertina')) - .reverse(), - images - .filter(i => !i.includes('camice') && !i.includes('copertina')) - ); - } - for (let img of images) { - let canvas = await this.createCanvas(manifest, img); - sequence.addCanvas(canvas); + // Skip failing images (TODO log error to file) + try { + let canvas = await this.createCanvas(manifest, img); + sequence.addCanvas(canvas); + } catch (error) { + console.error(error); + console.log(`\nAffected image: ${img}`); + continue; + } } manifest.addSequence(sequence);