by updating the start to 'total-limit' if we follow the task log live.
to do that, we decouple the 'scroll' event from updating the 'start'
parameter and call that directly after we scrolled down.

to not trigger the scroll event multiple times, suspend the scroll event
while doing that.

while we're touching those lines, remove the 'setTimeout' workaround
for touchscreens, since it seems to work fine since extjs 7.0

this also fixes the issue that the scroll event is not called sometimes

Signed-off-by: Dominik Csapak <d.csa...@proxmox.com>
---
 src/panel/LogView.js | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/panel/LogView.js b/src/panel/LogView.js
index 51335fa..0ce48f5 100644
--- a/src/panel/LogView.js
+++ b/src/panel/LogView.js
@@ -72,8 +72,11 @@ Ext.define('Proxmox.panel.LogView', {
            content.update(lines.join('<br>'));
 
            if (scrollToBottom) {
-               // we use setTimeout to work around scroll handling on 
touchscreens
-               setTimeout(function() { view.scrollTo(0, Infinity); }, 10);
+               let scroller = view.getScrollable();
+               scroller.suspendEvent('scroll');
+               view.scrollTo(0, Infinity);
+               me.updateStart(true);
+               scroller.resumeEvent('scroll');
            }
        },
 
@@ -126,6 +129,25 @@ Ext.define('Proxmox.panel.LogView', {
            });
        },
 
+       updateStart: function(scrolledToBottom, targetLine) {
+           let me = this;
+           let view = me.getView();
+           let viewModel = me.getViewModel();
+
+           let limit = viewModel.get('params.limit');
+
+           if (scrolledToBottom) {
+               let total = viewModel.get('data.total');
+               viewModel.set('params.start',
+                   Math.max(parseInt(total - limit, 10), 0));
+           } else {
+               viewModel.set('params.start',
+                   Math.max(parseInt(targetLine - (limit / 2) + 10, 10), 0));
+           }
+
+           view.loadTask.delay(200);
+       },
+
        onScroll: function(x, y) {
            let me = this;
            let view = me.getView();
@@ -141,9 +163,7 @@ Ext.define('Proxmox.panel.LogView', {
            let viewEnd = parseInt(line + viewLines + 1 + view.viewBuffer, 10);
 
            if (viewStart < start || viewEnd > start+limit) {
-               viewModel.set('params.start',
-                   Math.max(parseInt(line - (limit / 2) + 10, 10), 0));
-               view.loadTask.delay(200);
+               me.updateStart(false, line);
            }
        },
 
-- 
2.30.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to