Some error handling + change DN and DO filename parsing

This commit is contained in:
Nicolò P 2025-02-07 16:54:20 +01:00
parent b9237af986
commit dccec35f77
3 changed files with 48 additions and 25 deletions

View File

@ -6,30 +6,56 @@ import express from 'express';
let router = express.Router(); let router = express.Router();
// TODO Log errors
/* GET manifest JSON */ /* GET manifest JSON */
router.get('/iiif/:manifestid/manifest', async function(req, res) { router.get('/iiif/:manifestid/manifest', async function(req, res) {
const manifest = await generateManifest(req.params.manifestid) let manifest = {};
res.set('Access-Control-Allow-Origin', '*'); 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); res.json(manifest);
}); });
/* GET canvas JSON */ /* GET canvas JSON */
router.get('/iiif/:manifestid/canvas/:name', async function(req, res) { 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', '*'); 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); res.json(canvas);
}); });
/* GET sequence JSON */ /* GET sequence JSON */
router.get('/iiif/:manifestid/sequence/:name', async function(req, res) { 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', '*'); 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); res.json(sequence);
}); });
/* GET possible params for manifest responses */ /* GET possible params for manifest responses */
router.get('/params', async function(req, res) { 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; export default router;

View File

@ -41,8 +41,9 @@ function splitHSI(filename) {
function splitDNO(filename) { function splitDNO(filename) {
let splitFilename = filename.split('_'); let splitFilename = filename.split('_');
const baseFolder = splitFilename.slice(0,2).join('_'); const papyrusNumb = splitFilename[1];
const subfolder = splitFilename.slice(0,3).join('_'); const baseFolder = `PHerc_${papyrusNumb}`;
const subfolder = `PHerc_${papyrusNumb}_${splitFilename[0]}`;
return {baseFolder, subfolder}; return {baseFolder, subfolder};
} }

View File

@ -86,6 +86,7 @@ Common.getParamsFromFolders = async function() {
let files = await fs.promises.readdir( let files = await fs.promises.readdir(
`${process.env.IMAGES_DIR}/${p}/${tech}` `${process.env.IMAGES_DIR}/${p}/${tech}`
); );
files = files.filter(file => /(tiff?|jpe?g|jp2|bmp)/.test(file));
if (files.length) { if (files.length) {
techniques.push(tech.replace(/PHerc_\d+_/i, '')); techniques.push(tech.replace(/PHerc_\d+_/i, ''));
} }
@ -114,7 +115,7 @@ Common.getImageList = async function (manifestId) {
`${process.env.IMAGES_DIR}/${baseFolder}/${folderName}` `${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; return files;
} }
@ -149,9 +150,7 @@ Common.getImageSize = async function (imageId) {
Common.getImageName = async function (canvas) { Common.getImageName = async function (canvas) {
const images = await this.getImageList(canvas.resourceId); const images = await this.getImageList(canvas.resourceId);
return images.filter( return images.filter(i => i.includes(canvas.name))[0];
i => i.includes(canvas.name)
)[0];
} }
/** /**
* Create a canvas from an image filename * Create a canvas from an image filename
@ -169,8 +168,8 @@ Common.createCanvas = async function (manifest, filename) {
hiroxnir: 1, hiroxnir: 1,
nir: 1, nir: 1,
hsi: 1, hsi: 1,
do: 3, do: 2,
dn: 3 dn: 2
}; };
const canvasName = filename.split('_')[namePos[manifest.technique]] const canvasName = filename.split('_')[namePos[manifest.technique]]
@ -211,22 +210,19 @@ Common.createCanvas = async function (manifest, filename) {
Common.populateCanvases = async function (manifest, images) { Common.populateCanvases = async function (manifest, images) {
const sequence = new Sequence(process.env.BASE_URL); const sequence = new Sequence(process.env.BASE_URL);
// There's only one sequence // There's only one sequence
sequence.generateID(manifest.resourceId, 0); 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) { for (let img of images) {
let canvas = await this.createCanvas(manifest, img); // Skip failing images (TODO log error to file)
sequence.addCanvas(canvas); 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); manifest.addSequence(sequence);