epub-full-text-search
Version:
97 lines (69 loc) • 2.69 kB
JavaScript
;
var _cheerio = require('cheerio');
var _cheerio2 = _interopRequireDefault(_cheerio);
var _MetaDataParser = require('./MetaDataParser');
var _MetaDataParser2 = _interopRequireDefault(_MetaDataParser);
var _Helper = require('./../Helper');
var _Helper2 = _interopRequireDefault(_Helper);
var _Logger = require('./../Logger');
var _Logger2 = _interopRequireDefault(_Logger);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Preparer = {};
/**************
* public
*************/
Preparer.normalize = function (urlToEPUBs) {
_Logger2.default.log('info', 'URL of EPUB data: '.blue + urlToEPUBs.green);
return _MetaDataParser2.default.getMetaDataFromUrl(urlToEPUBs).then(function (metaData) {
return prepareEPUBDataForIndexing(metaData);
}).catch(function (err) {
_Logger2.default.log('error', 'normalize url' + urlToEPUBs + ' ' + err);
});
};
// It is necessary to remove hyphens from uuid because search-index process it wrong with hyphens.
// Otherwise search for uuid fails.
Preparer.normalizeUUID = function (str) {
return str.replace(/-/g, '');
};
/**************
* private
*************/
function prepareEPUBDataForIndexing(metaData) {
if (!metaData.spineItems.length) return;
var data = [];
var arrayOfPromises = metaData.spineItems.map(function (spineItem) {
var spineUri = metaData.url + 'EPUB/' + spineItem.href;
return _Helper2.default.getContent(spineUri).then(function (body) {
return _cheerio2.default.load(body);
});
});
return Promise.all(arrayOfPromises).then(function (arrayOf$) {
//doc.spineItemPath = spineUri;
arrayOf$.forEach(function ($, i) {
var doc = {};
$("title").each(function (i, e) {
var title = $(e);
doc.title = trim(title.text());
});
$("body").each(function (i, e) {
var body = $(e);
doc.body = trim(body.text());
});
setMetaData(doc, metaData, metaData.spineItems[i]);
data.push(doc);
});
return data;
}).catch(function (err) {
_Logger2.default.log('error', 'prepareEPUBDataForIndexing: ' + err);
});
}
function setMetaData(jsonDoc, meta, spineItemMeta) {
jsonDoc.spineItemPath = meta.url + 'EPUB/' + spineItemMeta.href;
jsonDoc.href = spineItemMeta.href;
jsonDoc.baseCfi = spineItemMeta.baseCfi;
jsonDoc.id = spineItemMeta.id + ':' + meta.title;
}
function trim(str) {
return str.replace(/\W/g, ' ').replace(/\s+/g, ' ');
}
module.exports = Preparer;