diff options
Diffstat (limited to 'js/codeq/core.js')
-rw-r--r-- | js/codeq/core.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/js/codeq/core.js b/js/codeq/core.js index 03c5539..72b4532 100644 --- a/js/codeq/core.js +++ b/js/codeq/core.js @@ -336,6 +336,51 @@ } }; + var makeActivityHandler = function (editor, problem_id) { + var lastActivityMillis = Date.now(), + deltaActivityMillis = function deltaActivityMillisFunc () { + var now = Date.now(), + dt = now - lastActivityMillis; + lastActivityMillis = now; + return dt; + }, + queue = [], + ts = null, + timer = function () { + var promise; + ts = null; + if (queue.length === 0) return Q(true); + promise = codeq.comms.sendActivity(queue, editor.getDoc().getValue(), problem_id); + queue.length = 0; + return promise; + }, + flush = function () { + clearTimeout(ts); + return timer(); + }; + + return { + 'queueTrace': function (trace) { + trace['dt'] = deltaActivityMillis(); + queue.push(trace); + if (ts === null) ts = setTimeout(timer, 10000); // flush every 10 seconds + return this; + }, + 'flush': flush, + 'addAndPurge': function (trace) { + var accumulatedTrace = queue; + queue = []; + trace['dt'] = deltaActivityMillis(); + accumulatedTrace.push(trace); + if (ts !== null) { + clearTimeout(ts); + ts = null; + } + return accumulatedTrace; + } + }; + }; + window.codeq = { 'jsonize': jsonize, @@ -389,6 +434,8 @@ return n; }, + 'makeActivityHandler': makeActivityHandler, + 'wait': function (promise) { jqDisabled.css(waitCssEnter); return promise.fin(function () { |