Mwalker has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/96972


Change subject: Report status
......................................................................

Report status

Change-Id: I5e4c14381fb6185b2bf937787ae3aa35dd4ed0a1
---
M bin/mw-latexer
M lib/index.js
A lib/status.js
3 files changed, 44 insertions(+), 0 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Collection/OfflineContentGenerator/latex_renderer
 refs/changes/72/96972/1

diff --git a/bin/mw-latexer b/bin/mw-latexer
index 912a714..e29744e 100755
--- a/bin/mw-latexer
+++ b/bin/mw-latexer
@@ -2,6 +2,7 @@
 
 var program = require('commander');
 var latexer = require('../');
+var status = require('../lib/status');
 
 program
        .version(latexer.version)
@@ -49,6 +50,9 @@
        log: log
 };
 
+// TODO: Update this number if we add more stages to the renderer
+status.setNumStages(4);
+
 latexer.convert(options).then(function(status) {
        process.exit(status);
 }).done();
diff --git a/lib/index.js b/lib/index.js
index 7f52dd7..658b525 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -8,6 +8,7 @@
 var gammalatex = require('gammalatex');
 var guard = require('when/guard');
 var path = require('path');
+var status = require('./status');
 var stream = require('stream');
 var tmp = require('tmp');
 var url = require('url');
@@ -543,11 +544,16 @@
 // (after the bundle has been unpacked)
 var unpackBundle = function(options) {
        var metabook, builddir;
+
+       status.createStage(0);
+
        // first create a temporary directory
        return P.call(tmp.dir, tmp, {
                prefix: json.name,
                unsafeCleanup: !options.debug
        }).then(function(_builddir) {
+               status.report('Reading data bundle for document construction');
+
                builddir = _builddir;
                // now unpack the zip archive
                options.log('Unpacking bundle in', builddir);
@@ -643,7 +649,10 @@
        var imagedb =
                new Db(path.join(builddir, 'imageinfo.db'), { readonly: true });
        var p = when.resolve();
+
+       status.createStage(imagedb.length);
        return imagedb.forEach(function(key, val) {
+               status.report('Processing media files for inclusion', 
val.filename);
                if (!/^https?:\/\//.test(key)) {
                        // compatibility with pediapress format
                        key = val.resource;
@@ -691,6 +700,8 @@
        }
        var p = P.call(output.write, output, head);
 
+       status.createStage(1 /* XXX This should be the total number of nodes 
we're going to visit */);
+
        // XXX HACK ONLY VISIT THE FIRST ITEM
        var item = metabook;
        while (item.type !== 'article') {
@@ -715,6 +726,7 @@
                        imagemap: imagemap,
                        parindent: false
                });
+               status.report('Traversing page DOM', item.title); /* XXX Call 
this for every node */
                visitor.visit(document.body);
                var result = visitor.output.join('\n');
                return P.call(output.write, output, result);
@@ -730,6 +742,9 @@
 // compiled to a PDF.
 var compileLatex = function(builddir, options) {
        options.log('Compiling to PDF with xelatex');
+       status.createStage(0);
+       status.report('Compiling to PDF with xelatex');
+
        gammalatex.setCompileCommand({
                command: "xelatex",
                options: [
diff --git a/lib/status.js b/lib/status.js
new file mode 100644
index 0000000..d5a4c04
--- /dev/null
+++ b/lib/status.js
@@ -0,0 +1,25 @@
+var percentComplete = 0;
+var currentStage = 0.0;
+var stagesInv = 1.0;
+var stageLen = 0;
+
+module.exports.setNumStages = function(num) {
+       stagesInv = 1.0 / num;
+};
+
+module.exports.createStage = function(len) {
+       percentComplete = currentStage * stagesInv;
+       currentStage += 1;
+       if (len) {
+               stageLen = 1.0 / len;
+       } else {
+               stageLen = 0;
+       }
+};
+
+module.exports.report = function(message, file) {
+       percentComplete += 100.0 * (stagesInv * stageLen);
+       if (process.send) {
+               process.send(JSON.stringify({status: message, file: file, 
percent: percentComplete}));
+       }
+};
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/96972
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5e4c14381fb6185b2bf937787ae3aa35dd4ed0a1
Gerrit-PatchSet: 1
Gerrit-Project: 
mediawiki/extensions/Collection/OfflineContentGenerator/latex_renderer
Gerrit-Branch: master
Gerrit-Owner: Mwalker <mwal...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to