From b5ff20a615649c1c624ad3569aed479877fbd9a9 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Tue, 23 Nov 2021 13:02:28 +0100 Subject: [PATCH] ui: logpanel: fix glitching fast task logs if the total we got was bigger than the last line number, we appended empty lines at the end of the panel, to which we scrolled the only time we need to do that is when we do not follow the task log 'live' but when we are elsewhere (to keep the scroll position/size) so give the lines directly to 'updateView' and let it decide if we append the empty lines at the end Signed-off-by: Dominik Csapak --- src/panel/LogView.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/panel/LogView.js b/src/panel/LogView.js index 1772737..51335fa 100644 --- a/src/panel/LogView.js +++ b/src/panel/LogView.js @@ -45,27 +45,33 @@ Ext.define('Proxmox.panel.LogView', { return maxPos - pos; }, - updateView: function(text, first, total) { + updateView: function(lines, first, total) { let me = this; let view = me.getView(); let viewModel = me.getViewModel(); let content = me.lookup('content'); let data = viewModel.get('data'); - if (first === data.first && total === data.total && text.length === data.textlen) { + if (first === data.first && total === data.total && lines.length === data.lines) { return; // same content, skip setting and scrolling } viewModel.set('data', { first: first, total: total, - textlen: text.length, + lines: lines.length, }); let scrollPos = me.scrollPosBottom(); + let scrollToBottom = view.scrollToEnd && scrollPos <= 5; - content.update(text); + if (!scrollToBottom) { + // so that we have the 'correct' height for the text + lines.length = total; + } - if (view.scrollToEnd && scrollPos <= 5) { + content.update(lines.join('
')); + + if (scrollToBottom) { // we use setTimeout to work around scroll handling on touchscreens setTimeout(function() { view.scrollTo(0, Infinity); }, 10); } @@ -97,8 +103,7 @@ Ext.define('Proxmox.panel.LogView', { lines[line.n - 1] = Ext.htmlEncode(line.t); }); - lines.length = total; - me.updateView(lines.join('
'), first - 1, total); + me.updateView(lines, first - 1, total); me.running = false; if (me.requested) { me.requested = false;