diff --git a/src/jio/features/jobMaker.js b/src/jio/features/jobMaker.js index 4b26be3a7ab211e29829786841f100723f43c6d5..368ff5e263b8e10292ed11ee8416c6a834e5d26a 100644 --- a/src/jio/features/jobMaker.js +++ b/src/jio/features/jobMaker.js @@ -36,6 +36,24 @@ function enableJobMaker(jio, shared, options) { "options" ]); + function addCommandToJob(param) { + param.command = {}; + param.command.resolve = function () { + shared.emit('jobDone', param, arguments); + }; + param.command.success = param.command.resolve; + param.command.reject = function () { + shared.emit('jobFail', param, arguments); + }; + param.command.error = param.command.reject; + param.command.notify = function () { + shared.emit('jobNotify', param, arguments); + }; + param.command.storage = function () { + return shared.createRestApi.apply(null, arguments); + }; + } + // listeners shared.rest_method_names.forEach(function (method) { @@ -43,27 +61,24 @@ function enableJobMaker(jio, shared, options) { if (param.deferred) { // params are good param.created = new Date(); - param.tried = 0; - param.state = 'ready'; - param.command = {}; - param.command.resolve = function () { - shared.emit('jobDone', param, arguments); - }; - param.command.success = param.command.resolve; - param.command.reject = function () { - shared.emit('jobFail', param, arguments); - }; - param.command.error = param.command.reject; - param.command.notify = function () { - shared.emit('jobNotify', param, arguments); - }; - param.command.storage = function () { - return shared.createRestApi.apply(null, arguments); - }; - param.modified = new Date(); shared.emit('job', param); } }); }); + shared.on('job', function (param) { + // new or recovered job + param.state = 'ready'; + if (typeof param.tried !== 'number' || !isFinite(param.tried)) { + param.tried = 0; + } + if (!param.created) { + param.created = new Date(); + } + if (!param.command) { + addCommandToJob(param); + } + param.modified = new Date(); + }); + }