diff --git a/lib/server/index.js b/lib/server/index.js index d9b3378..314acb1 100644 --- a/lib/server/index.js +++ b/lib/server/index.js @@ -1,5 +1,6 @@ 'use strict'; var Agent = require('./agent'); +var AdmZip = require('adm-zip'); var defaultExtension = 'cbz'; var EventEmitter = require('events').EventEmitter; var fs = require('fs'); @@ -100,6 +101,28 @@ function enqueueChapter(emitter, queue, task, chapter, done) { }); } +/** + * Updates embedded meta information with new information. + * @param {!Object} task + * @param {string} oldPath + * @param {function(Error)} done + */ +function enqueueChapterMeta(task, oldPath, done) { + var zip = new AdmZip(oldPath); + var zipEntry = zip.getEntry('ComicInfo.xml'); + if (!zipEntry) return done(); + var xml = zipEntry.getData().toString('utf8'); + shared.publisher.Meta.load(xml, function(err, meta) { + if (err) return done(err); + meta.number = task.chapter.number; + meta.volume = task.chapter.volume; + zip.deleteFile('ComicInfo.xml'); + zip.addFile('ComicInfo.xml', new Buffer(meta.xml(), 'utf8')); + zip.writeZip(oldPath); + done(); + }); +} + /** * Checks the persistence entry and renames the chapter when applicable. * @private @@ -112,11 +135,14 @@ function enqueueChapterPersistent(emitter, task, done) { var oldName = task.persistent[task.chapter.identifier]; if (task.chapterName === oldName) return done(); var oldPath = path.join(task.seriesPath, oldName); - task.persistent[task.chapter.identifier] = task.chapterName; - emitter.emit('data', {item: task.chapterName, type: 'switched'}); - fs.rename(oldPath, task.chapterPath, function(err) { + enqueueChapterMeta(task, oldPath, function(err) { if (err) return done(err); - save(task.persistentPath, task.persistent, done); + task.persistent[task.chapter.identifier] = task.chapterName; + emitter.emit('data', {item: task.chapterName, type: 'switched'}); + fs.rename(oldPath, task.chapterPath, function(err) { + if (err) return done(err); + save(task.persistentPath, task.persistent, done); + }); }); } diff --git a/package.json b/package.json index 04d0ce4..799b342 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "mangarack": "./bin/mangarack" }, "dependencies": { + "adm-zip": "^0.4.4", "archiver": "^0.13.0", "cheerio": "^0.18.0", "commander": "^2.5.0",