Skip to content

Commit

Permalink
Support new hatch version v3
Browse files Browse the repository at this point in the history
For libingesterv3. Also improve metadata, remove duplicate title.
  • Loading branch information
manuq committed Aug 24, 2018
1 parent 2a35a14 commit 5637fd1
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 12 deletions.
45 changes: 41 additions & 4 deletions main.js
Expand Up @@ -27,6 +27,7 @@ let mainWindow;
let _assetMap;
let _tagsMap;
let _title;
let _hatchVersion;

function getManifestPath(hatchFolder) {
return `${hatchFolder}/hatch_manifest.json`;
Expand All @@ -44,12 +45,10 @@ function loadMetadata(metadataPath, id) {
return metadata;
}

function loadHatch(hatchFolder) {
winston.info(`Loading hatch ${hatchFolder}`);
function loadHatchV2(hatchFolder, manifest) {
const assetMap = new Map();
const tagsMap = new Map();

const manifest = loadManifest(hatchFolder);
manifest.assets.forEach(asset => {
const id = asset.asset_id;
assetMap.set(id, loadMetadata(hatchFolder, id));
Expand All @@ -60,6 +59,40 @@ function loadHatch(hatchFolder) {
// Sort assets map for easy finding of things
_assetMap = new Map([...assetMap.entries()].sort());
_tagsMap = new Map([...tagsMap.entries()].sort());
}

function loadHatchV3(hatchFolder, manifest) {
const assetMap = new Map();
const tagsMap = new Map();

for (const id of manifest.assets) {
assetMap.set(id, loadMetadata(hatchFolder, id));
assetMap.get(id).tags.forEach(tag =>
tagsMap.set(tag, (tagsMap.get(tag) || 0) + 1));
}

// Sort assets map for easy finding of things
_assetMap = new Map([...assetMap.entries()].sort());
_tagsMap = new Map([...tagsMap.entries()].sort());
}

function loadHatch(hatchFolder) {
winston.info(`Loading hatch ${hatchFolder}`);

const manifest = loadManifest(hatchFolder);
_hatchVersion = manifest.hatch_version;
winston.debug(`hatch version: ${_hatchVersion}`);

switch (_hatchVersion) {
case 2:
loadHatchV2(hatchFolder, manifest);
break;
case 3:
loadHatchV3(hatchFolder, manifest);
break;
default:
throw new Error(`Invalid hatch version: ${_hatchVersion}`);
}

const hatchName = manifest.name || 'Unknown';
const hatchLanguage = manifest.language || 'Unknown language';
Expand All @@ -76,6 +109,10 @@ exports.getTagsMap = function () {
return _tagsMap;
};

exports.getHatchVersion = function () {
return _hatchVersion;
};

function initApp() {
if (![2, 3].includes(process.argv.length)) {
winston.error(`usage: ${process.argv[0]} ${process.argv[1]} [<hatch directory>]`);
Expand Down Expand Up @@ -109,7 +146,7 @@ function initApp() {
const manifestPath = getManifestPath(hatchFolder);

// Watch manifest for changes to reload the hatch
chokidar.watch(manifestPath)
chokidar.watch(manifestPath, {ignoreInitial: true})
.on('add', () => loadHatch(hatchFolder))
.on('change', () => loadHatch(hatchFolder))
.on('unlink', () => winston.debug(`Manifest ${manifestPath} was deleted`));
Expand Down
5 changes: 2 additions & 3 deletions metadata_renderer.js
Expand Up @@ -3,7 +3,7 @@ const $ = require('jquery');
const {getAssetMap, winston} = main;

const extraPropsByModelType = {
ArticleObject: ['authors', 'published', 'sourceName'],
ArticleObject: ['authors', 'published', 'publishedDate', 'sourceName'],
ImageObject: ['caption', 'height', 'width'],
VideoObject: ['caption', 'duration', 'height', 'transcript', 'width'],
DictionaryWordObject: ['word', 'definition', 'partOfSpeech'],
Expand All @@ -17,7 +17,6 @@ const visibleProps = [
'canonicalURI',
'matchingLinks',

'title',
'synopsis',
'thumbnail',
'license',
Expand Down Expand Up @@ -61,7 +60,7 @@ exports.setMetadataAssetID = function (ID) {

visibleProps.forEach(prop => _appendProp(asset, prop));
extraPropsByModelType[asset.objectType].forEach(prop =>
_appendProp($, asset, prop));
_appendProp(asset, prop));
}
};

Expand Down
23 changes: 18 additions & 5 deletions preview_renderer.js
Expand Up @@ -4,7 +4,7 @@ const $ = require('jquery');
const nsh = require('node-syntaxhighlighter');
const htmlFormatter = require('js-beautify').html;

const {getAssetMap, hatchFolder} = main;
const {getAssetMap, getHatchVersion, hatchFolder} = main;

let showingSource = false;

Expand Down Expand Up @@ -53,19 +53,32 @@ exports.setPreviewAssetID = function (ID) {

const asset = getAssetMap().get(ID);

// Hatch v3 has body, while Hatch v2 has document
let document;
switch (getHatchVersion()) {
case 2:
document = asset.document;
break;
case 3:
document = asset.body;
break;
default:
break;
}

// Enable controls if we're an html document
if (asset.document) {
if (document) {
$('#flip_controls').show();
const prettyHtml = htmlFormatter(asset.document);
const prettyHtml = htmlFormatter(document);
$('#source_code_content').html(nsh.highlight(prettyHtml, nsh.getLanguage('xml')));
} else {
$('#flip_controls').hide();
}

if (asset.document) {
if (document) {
previewFrameHolder.addClass('preview-frame-holder');
const frameBody = frameContents.find('body');
frameBody.html(asset.document || '');
frameBody.html(document || '');
frameBody.scrollTop(0);
frameHTML.find('img').each(/* @this jquery */ function () {
const imgID = $(this).attr('data-soma-job-id');
Expand Down

0 comments on commit 5637fd1

Please sign in to comment.