Skip to content

Commit

Permalink
fix(date-extractor): gracefully handle exif failure
Browse files Browse the repository at this point in the history
  • Loading branch information
klieber committed May 14, 2021
1 parent d845b65 commit 322a503
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 6 deletions.
9 changes: 7 additions & 2 deletions bin/date-extract.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,13 @@

const dateExtractor = require('../lib/support/date-extractor');
const format = require('date-fns/format');
const logger = require('../lib/support/logger').create('bin/date-extract');

(async () => {
const timestamp = await dateExtractor.extractDate(process.argv[2]);
console.log(format(timestamp, 'yyyy-MM-dd_HH.mm.ss'));
try {
const timestamp = await dateExtractor.extractDate(process.argv[2]);
logger.info(format(timestamp, 'yyyy-MM-dd_HH.mm.ss'));
} catch (error) {
logger.error(error);
}
})();
24 changes: 20 additions & 4 deletions lib/support/date-extractor.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const ffprobeStatic = require('ffprobe-static');
const exiftool = require('node-exiftool');
const exiftoolBin = require('dist-exiftool');
const exif = new exiftool.ExiftoolProcess(exiftoolBin);
const dateParse = require('date-fns/parse');
const logger = require('./logger').create('lib/support/date-extractor');

const DATE_TAGS = [
'DateTimeOriginal',
Expand Down Expand Up @@ -46,16 +48,27 @@ async function readExif(filename, tags) {
const { data, error } = await exif.readMetadata(filename, tags);
await exif.close();
if (error) {
throw new Error('unable to read exif: ', error);
throw new Error(error);
}

return data ? data.reduce((combined, item) => Object.assign(combined, item), {}) : {};
}

async function extractDateFromExif(filename) {
const metadata = await readExif(filename, DATE_TAGS);
const dateObject = extractDateFromMetadataTags(metadata);
return dateObject;
try {
const metadata = await readExif(filename, DATE_TAGS);
const dateObject = extractDateFromMetadataTags(metadata);
return dateObject;
} catch (error) {
logger.warn(error);
return null;
}
}

function extractDateFromFilename(filename) {
const dateString = filename.replace(/^.*\/([^\\/]+)\.\w+$/, '$1');
const date = dateParse(dateString, 'yyyy-MM-dd HH.mm.ss', new Date());
return isNaN(date) ? null : date;
}

async function extractDateFromFile(filename) {
Expand All @@ -71,6 +84,9 @@ async function extractDate(filename) {
if (dateObject == null && (await mediaType.isMp4(filename))) {
dateObject = await extractDateFromMp4(filename);
}
if (dateObject == null) {
dateObject = extractDateFromFilename(filename);
}
if (dateObject == null) {
dateObject = await extractDateFromFile(filename);
}
Expand Down

0 comments on commit 322a503

Please sign in to comment.