utility scripts: converted to use the Promise interface

This commit is contained in:
Ray Bellis 2019-01-26 23:52:02 +00:00
parent e7dc0766fd
commit 7709fd46e5
4 changed files with 202 additions and 318 deletions

View file

@ -10,88 +10,66 @@ if (process.argv.length != 3) {
}
// get the padID
var padId = process.argv[2];
let padId = process.argv[2];
var db, dirty, padManager, pad, settings;
var neededDBValues = ["pad:"+padId];
let npm = require('../src/node_modules/npm');
var npm = require('../node_modules/ep_etherpad-lite/node_modules/npm');
var async = require('../node_modules/ep_etherpad-lite/node_modules/async');
npm.load({}, async function(er) {
if (er) {
console.error("Could not load NPM: " + er)
process.exit(1);
}
async.series([
// load npm
function(callback) {
npm.load({}, function(er) {
if (er) {
console.error("Could not load NPM: " + er)
process.exit(1);
} else {
callback();
}
})
},
try {
// initialize database
let settings = require('../src/node/utils/Settings');
let db = require('../src/node/db/DB');
await db.init();
// load modules
function(callback) {
settings = require('../node_modules/ep_etherpad-lite/node/utils/Settings');
db = require('../node_modules/ep_etherpad-lite/node/db/DB');
dirty = require('../node_modules/ep_etherpad-lite/node_modules/ueberDB/node_modules/dirty')(padId + ".db");
callback();
},
// load extra modules
let dirtyDB = require('../src/node_modules/dirty');
let padManager = require('../src/node/db/PadManager');
let util = require('util');
// initialize the database
function (callback) {
db.init(callback);
},
// initialize output database
let dirty = dirtyDB(padId + '.db');
// get the pad
function (callback) {
padManager = require('../node_modules/ep_etherpad-lite/node/db/PadManager');
// Promise wrapped get and set function
let wrapped = db.db.db.wrappedDB;
let get = util.promisify(wrapped.get.bind(wrapped));
let set = util.promisify(dirty.set.bind(dirty));
padManager.getPad(padId, function(err, _pad) {
pad = _pad;
callback(err);
});
},
// array in which required key values will be accumulated
let neededDBValues = ['pad:' + padId];
// get the actual pad object
let pad = await padManager.getPad(padId);
function (callback) {
// add all authors
var authors = pad.getAllAuthors();
for (var i = 0; i < authors.length; i++) {
neededDBValues.push('globalAuthor:' + authors[i]);
}
neededDBValues.push(...pad.getAllAuthors().map(author => 'globalAuthor:' + author));
// add all revisions
var revHead = pad.head;
for (var i = 0; i <= revHead; i++) {
neededDBValues.push('pad:' + padId + ':revs:' + i);
for (let rev = 0; rev <= pad.head; ++rev) {
neededDBValues.push('pad:' + padId + ':revs:' + rev);
}
// get all chat values
var chatHead = pad.chatHead;
for (var i = 0; i <= chatHead; i++) {
neededDBValues.push('pad:' + padId + ':chat:' + i);
// add all chat values
for (let chat = 0; chat <= pad.chatHead; ++chat) {
neededDBValues.push('pad:' + padId + ':chat:' + chat);
}
// get and set all values
async.forEach(neededDBValues, function(dbkey, callback) {
db.db.db.wrappedDB.get(dbkey, function(err, dbvalue) {
if (err) { callback(err); return}
for (let dbkey of neededDBValues) {
let dbvalue = await get(dbkey);
if (dbvalue && typeof dbvalue !== 'object') {
dbvalue = JSON.parse(dbvalue);
}
await set(dbkey, dbvalue);
}
if (dbvalue && typeof dbvalue != 'object') {
dbvalue = JSON.parse(dbvalue); // if it's not json then parse it as json
}
dirty.set(dbkey, dbvalue, callback);
});
}, callback);
}
],
function (err) {
if (err) {
throw err;
} else {
console.log("finished");
process.exit();
console.log('finished');
process.exit(0);
} catch (er) {
console.error(er);
process.exit(1);
}
});