From 862a17ab4efce27fd6906d1b1ca9c5720db085de Mon Sep 17 00:00:00 2001 From: Pablo Zmdl Date: Fri, 20 Feb 2026 14:22:57 +0100 Subject: [PATCH 1/2] Auto-reload the log view, and scroll to bottom. Includes a button to disable the automatic reloading (useful when inspecting some lines in the middle). Signed-off-by: Pablo Zmdl --- php/src/Controller/DockerController.php | 10 +++----- php/templates/log.twig | 32 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 php/templates/log.twig diff --git a/php/src/Controller/DockerController.php b/php/src/Controller/DockerController.php index a8d1b31b..5cbced40 100644 --- a/php/src/Controller/DockerController.php +++ b/php/src/Controller/DockerController.php @@ -11,6 +11,7 @@ use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use AIO\Data\ConfigurationManager; use Slim\Psr7\NonBufferedBody; +use Slim\Views\Twig; readonly class DockerController { private const string TOP_CONTAINER = 'nextcloud-aio-apache'; @@ -76,13 +77,8 @@ readonly class DockerController { $logs = 'Container not found.'; } - $body = $response->getBody(); - $body->write($logs); - - return $response - ->withStatus(200) - ->withHeader('Content-Type', 'text/plain; charset=utf-8') - ->withHeader('Content-Disposition', 'inline'); + $view = Twig::fromRequest($request); + return $view->render($response, 'log.twig', ['logContent' => $logs]); } public function StartBackupContainerBackup(Request $request, Response $response, array $args) : Response { diff --git a/php/templates/log.twig b/php/templates/log.twig new file mode 100644 index 00000000..c14c9e9f --- /dev/null +++ b/php/templates/log.twig @@ -0,0 +1,32 @@ + + + + + + + +
{{ logContent }}
+
+ + From 280898be6fc66f5c47270f2f2b21c0e9e1dc6793 Mon Sep 17 00:00:00 2001 From: Pablo Zmdl Date: Mon, 23 Feb 2026 13:36:28 +0100 Subject: [PATCH 2/2] Reload every 5s, but only if visible Signed-off-by: Pablo Zmdl --- php/templates/log.twig | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/php/templates/log.twig b/php/templates/log.twig index c14c9e9f..e5b91a31 100644 --- a/php/templates/log.twig +++ b/php/templates/log.twig @@ -13,7 +13,13 @@ // Give the browser a short moment to render all text and calculate the scrollHeight, to avoid // problems with scrolling to the bottom. setTimeout(() => window.scrollTo(0, document.body.scrollHeight), 100); - const reloadTimer = setTimeout(() => location.reload(), 10000); + // Reload after a short while if the window is visible to the user. + const reloadTimer = setTimeout(() => { + if (document.visibilityState === 'visible') { + location.reload() + } + }, 5000); + // Provide a button that allows to disable the reloads. const button = document.querySelector('button'); document.querySelector('button').addEventListener('click', (event) => { event.preventDefault(); @@ -21,6 +27,13 @@ button.disabled = true; button.textContent = 'Reloading was disabled'; }); + // Reload immediately if the window gets visible to the user again (unless the + // no-reload-button had been clicked). + document.addEventListener('visibilitychange', () => { + if (document.visibilityState === 'visible' && button.disabled !== true) { + location.reload(); + } + }); });