UNPKG

epub-full-text-search

Version:
101 lines (72 loc) 2.83 kB
'use strict'; var _xml2js = require('xml2js'); var _xml2js2 = _interopRequireDefault(_xml2js); var _q = require('q'); var _q2 = _interopRequireDefault(_q); 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 parser = new _xml2js2.default.Parser(), parseString = _q2.default.denodeify(parser.parseString); var MetaDataParser = {}; var container = 'container.xml'; MetaDataParser.getMetaDataFromUrl = function (urlToEpub) { var containerLink = urlToEpub + 'META-INF/' + container; return new Promise(function (resolve, reject) { _Helper2.default.getContent(containerLink).then(function (xmlString) { return getManifest(xmlString); }).then(function (result) { var opfFile = urlToEpub + result; return _Helper2.default.getContent(opfFile); }).then(function (opfContent) { return _q2.default.all([getBookTitle(opfContent), getSpineItems(opfContent)]); }).then(function (results) { resolve({ title: results[0], spineItems: results[1], url: urlToEpub }); }).catch(function (err) { _Logger2.default.log('error', err); reject(err); }); }); }; function getManifest(data) { return parseString(data).then(function (result) { return result.container.rootfiles[0].rootfile[0].$['full-path']; }).fail(function (err) { _Logger2.default.log('error', err); }); } function getBookTitle(data) { return parseString(data).then(function (result) { var metadata = result.package.metadata[0]; return metadata['dc:title'][0]._ || metadata['dc:title'][0]; }).fail(function (err) { _Logger2.default.log('error', err); }); } function getSpineItems(data) { return parseString(data).then(function (r) { var manifest = r.package.manifest[0]; var spine = r.package.spine[0]; var result = []; for (var i = 0; i < spine.itemref.length; i++) { var spineItem = manifest.item.filter(function (value) { if (value.$.id === spine.itemref[i].$.idref) return value; }); var spineitem = {}; spineitem.id = spineItem[0].$.id; spineitem.href = spineItem[0].$.href; spineitem.baseCfi = "/" + '6' + "/" + (i + 1) * 2 + '[' + spineitem.id + ']!'; result.push(spineitem); } return result; }).fail(function (err) { _Logger2.default.log('error', err); }); } module.exports = MetaDataParser;