145 lines
3.9 KiB
JavaScript
145 lines
3.9 KiB
JavaScript
var fs = require("fs");
|
|
var JSZip = require('jszip');
|
|
var EpubWriter = require('../src/epub')
|
|
|
|
let zip = new JSZip()
|
|
let epub = new EpubWriter()
|
|
|
|
new JSZip.external.Promise((resolve, reject)=>{
|
|
fs.readFile('test/mythical_man_month__the__essays_on_software_engineering__anniversary_edition.zip',
|
|
(err, data)=>{
|
|
if (err){
|
|
reject(err);
|
|
} else {
|
|
resolve(data);
|
|
}
|
|
})
|
|
})
|
|
.then((data)=>{
|
|
return JSZip.loadAsync(data, {
|
|
checkCRC32: true
|
|
})
|
|
})
|
|
.then((zip)=>{
|
|
return loadBookInfo(zip)
|
|
.then((book_info)=>{
|
|
createEbook(epub, book_info)
|
|
return copyContent(epub, zip)
|
|
})
|
|
.then(()=>{
|
|
return epub.generateAsync()
|
|
})
|
|
.then((file)=>{
|
|
fs.writeFile('ttttest.epub', file, (err) => {
|
|
if (err)
|
|
return console.log(err);
|
|
})
|
|
})
|
|
})
|
|
.catch((reason)=>{
|
|
console.log(`Error: ${reason}`)
|
|
})
|
|
|
|
function copyContent(epub, zip)
|
|
{
|
|
let jobs = []
|
|
zip.folder('EPUB').forEach((fileName, zipObj)=>{
|
|
console.log(`${fileName}`)
|
|
jobs.push(
|
|
zipObj.async('uint8array')
|
|
.then((buffer)=>{
|
|
epub.addFile(fileName, buffer)
|
|
})
|
|
)
|
|
})
|
|
return Promise.all(jobs)
|
|
}
|
|
|
|
function loadBookInfo(zip)
|
|
{
|
|
let book_json = zip.file('EPUB/book.json')
|
|
if (!book_json){
|
|
book_json = zip.file('META-INF/book.json')
|
|
}
|
|
return book_json.async('string')
|
|
.then((blob)=>{
|
|
return JSON.parse(blob)
|
|
})
|
|
}
|
|
|
|
function createEbook(epub, book_info)
|
|
{
|
|
console.log(`${book_info}`)
|
|
|
|
// OPF file info.
|
|
fillManifest(epub, book_info)
|
|
fillSpine(epub, book_info)
|
|
fillGuide(epub, book_info)
|
|
fillMetadata(epub, book_info)
|
|
|
|
// NCX and NAV files.
|
|
fillToc(epub, book_info)
|
|
}
|
|
|
|
function fillMetadata(epub, book_info)
|
|
{
|
|
epub.meta.addTitle(book_info.book_info.title)
|
|
epub.meta.addLanguage(book_info.book_info.language)
|
|
epub.meta.addBookId(book_info.book_info.isbn)
|
|
for (let i in book_info.book_info.authors){
|
|
let author = book_info.book_info.authors[i]
|
|
epub.meta.addAuthor(author)
|
|
}
|
|
for (let i in book_info.book_info.publishers){
|
|
let publisher = book_info.book_info.publishers[i]
|
|
epub.meta.addPublisher(publisher.name)
|
|
}
|
|
// # The metadata element or deprecated dc-metadata element contains
|
|
// # at least one identifier element, at least one title element,
|
|
// # and at least one language element drawn from the Dublin Core tag
|
|
// # set.
|
|
// epub.set_title('Test Title')
|
|
// epub.set_language('en')
|
|
// epub.set_direction('ltr')
|
|
// # epub.set_cover(file_name, content, create_page=True):
|
|
// # epub.add_author(author, file_as=None, role=None, uid='creator'):
|
|
// # epub.add_metadata(namespace, name, value, others=None):
|
|
// # epub.set_unique_metadata(namespace, name, value, others=None):
|
|
|
|
}
|
|
|
|
function fillManifest(epub, book_info)
|
|
{
|
|
for (let key in book_info.book_files){
|
|
let f = book_info.book_files[key]
|
|
epub.meta.addManifest(f.filename, f.mime)
|
|
}
|
|
|
|
let f = book_info.book_files[book_info.book_info.cover]
|
|
epub.meta.addCover(f.filename)
|
|
}
|
|
|
|
function fillToc(epub, book_info)
|
|
{
|
|
for (let i in book_info.book_toc){
|
|
let toc_item = book_info.book_toc[i]
|
|
epub.meta.addToc(
|
|
toc_item.filename,
|
|
toc_item.label,
|
|
toc_item.depth)
|
|
}
|
|
}
|
|
|
|
function fillSpine(epub, book_info)
|
|
{
|
|
for (let i in book_info.book_info.chapters){
|
|
let s = book_info.book_info.chapters[i].split('/')
|
|
epub.meta.addSpine(s[s.length-1])
|
|
// let url = book_info.book_info.chapters[i]
|
|
// let full_name = book_info.chapter_info[url].full_name
|
|
// epub.meta.addSpine(full_name)
|
|
}
|
|
}
|
|
|
|
function fillGuide(epub, book_info)
|
|
{} |