From 5acd8d2afcdee3c53f8329b55f21d61e959b2eaa Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Tue, 22 Dec 2020 18:25:14 +0300 Subject: [PATCH] added remaining time to progress (experimental)... Signed-off-by: Alex A. Naanou --- Viewer/features/core.js | 4 ++-- Viewer/features/ui-progress.js | 33 ++++++++++++++++++++++++++++++--- Viewer/package-lock.json | 6 +++--- Viewer/package.json | 2 +- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/Viewer/features/core.js b/Viewer/features/core.js index 36ca23cf..90d81bbb 100755 --- a/Viewer/features/core.js +++ b/Viewer/features/core.js @@ -2766,10 +2766,10 @@ function(title, func){ // NOTE: we are also adding a ref to args here to keep things consistent... args.length > 0 && (args = [args]) - q.push(...(items instanceof Array ? + q.add(items instanceof Array ? items.map(function(e){ return [e, ...args] }) - : [items, ...args])) + : [items, ...args]) return q.promise() } } // run... diff --git a/Viewer/features/ui-progress.js b/Viewer/features/ui-progress.js index 98369ab0..ccfebd22 100755 --- a/Viewer/features/ui-progress.js +++ b/Viewer/features/ui-progress.js @@ -94,7 +94,9 @@ var ProgressActions = actions.Actions({ // XXX multiple containers... // XXX shorten the nested css class names... // XXX revise styles... - // XXX make the "X" bigger -- finger usable... + // XXX make the "X" finger usable... + // XXX add time estimation... + // ....based on last 10 tasks... __progress_cache: null, showProgress: ['- Interface/Show progress bar...', core.doc`Progress bar widget... @@ -168,9 +170,26 @@ var ProgressActions = actions.Actions({ : parseInt(value)) : v) } - value = updateValue('value', value) + // XXX REMAINING_TIME + var prev = cache.prev || 0 + value = cache.prev = updateValue('value', value) max = updateValue('max', max) + // XXX REMAINING_TIME + // estimate time to completion... + var t0 = cache.timestamp || Date.now() + var t = (cache.timestamp = Date.now()) - t0 + var avg = cache.avg_time = + // rolling average -- feels a bit too smooth... + (((cache.avg_time || 0) * prev + t) / value) || 0 + var remaining = new Date(0) + avg > 0 + && remaining.setMilliseconds( + avg + * (max-value) + // make the estimate a bit pessimistic... + * 1.3) + // update not due yet... if('timeout' in cache){ cache.update = true @@ -258,13 +277,21 @@ var ProgressActions = actions.Actions({ timeout && clearTimeout(JSON.parse(timeout)) + //* XXX REMAINING_TIME + // time remaining... + var t = remaining ? + ` t:-${ + remaining.toISOString() + .substr(11, 8) + .replace(/^00:/, '') }s` + : '' // format the message... msg = msg ? ': '+msg : '' msg = ' '+ msg + (value && value >= (max || 0) ? ' (done)' : max && value != max ? - ' ('+ (value || 0) +' of '+ max +')' + ` (${value || 0} of ${max}${t})` : '...') // update widget... diff --git a/Viewer/package-lock.json b/Viewer/package-lock.json index 831e5580..601c62c8 100755 --- a/Viewer/package-lock.json +++ b/Viewer/package-lock.json @@ -1211,9 +1211,9 @@ "integrity": "sha512-7gSU0Qg4E0rnCPuITu6nJzgr4N73tFN57CISVrQjB+EglixfDI5SwOVRgPtG0EBOgtE8IL4O7fmq/UV87OUYyA==" }, "ig-types": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/ig-types/-/ig-types-6.0.6.tgz", - "integrity": "sha512-TOW58/yBQ7YqFukFT5K2Qd7u9k1CYgoQXXreS6u7pw9ttcWJLC3hJUTcLWsHTPKm3vNbFJ0NVI1o1U3SQlUu5w==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/ig-types/-/ig-types-6.0.7.tgz", + "integrity": "sha512-9pm+Hdq71v58B6NhLwsMqzHOpL5duAEHCX2UtGYG5iwGKZBxAr2DEl/tOn6Ui5xxq9mq1X6lW7PzXLrjXvuEgQ==", "requires": { "ig-object": "^5.4.12", "object-run": "^1.0.1" diff --git a/Viewer/package.json b/Viewer/package.json index c2534eb6..bcd4f6c2 100755 --- a/Viewer/package.json +++ b/Viewer/package.json @@ -34,7 +34,7 @@ "ig-argv": "^2.16.3", "ig-features": "^3.4.5", "ig-object": "^5.4.14", - "ig-types": "^6.0.6", + "ig-types": "^6.0.7", "json5": "^2.1.3", "object-run": "^1.0.1", "requirejs": "^2.3.6",