Compare commits

...

5 Commits

Author SHA1 Message Date
ce73256133 fix: automatically reconnect after losing a WebSocket connection
All checks were successful
actionlint check / actionlint check (pull_request) Successful in 12s
conventional commit messages check / conventional commit messages check (pull_request) Successful in 22s
conventional pull request title check / conventional pull request title check (pull_request) Successful in 4s
checkov check / checkov check (pull_request) Successful in 1m19s
dotenv-linter check / dotenv-linter check (pull_request) Successful in 10s
GitLeaks check / GitLeaks check (pull_request) Successful in 13s
hadolint check / hadolint check (pull_request) Successful in 11s
htmlhint check / htmlhint check (pull_request) Successful in 41s
markdownlint check / markdownlint check (pull_request) Successful in 34s
Prettier check / Prettier check (pull_request) Successful in 37s
ShellCheck check / ShellCheck check (pull_request) Successful in 25s
Stylelint check / Stylelint check (pull_request) Successful in 40s
yamllint check / yamllint check (pull_request) Successful in 29s
Rust check / Rust check (pull_request) Successful in 1h1m8s
2026-01-23 18:01:39 +01:00
00bb8d7951 ci: update the Rust check dependencies (#115) 2026-01-23 16:59:59 +00:00
393173f218 ci: update the Rust check dependencies
All checks were successful
actionlint check / actionlint check (pull_request) Successful in 6s
conventional commit messages check / conventional commit messages check (pull_request) Successful in 7s
conventional pull request title check / conventional pull request title check (pull_request) Successful in 6s
dotenv-linter check / dotenv-linter check (pull_request) Successful in 10s
GitLeaks check / GitLeaks check (pull_request) Successful in 10s
hadolint check / hadolint check (pull_request) Successful in 30s
htmlhint check / htmlhint check (pull_request) Successful in 44s
checkov check / checkov check (pull_request) Successful in 1m6s
markdownlint check / markdownlint check (pull_request) Successful in 48s
Prettier check / Prettier check (pull_request) Successful in 27s
ShellCheck check / ShellCheck check (pull_request) Successful in 25s
yamllint check / yamllint check (pull_request) Successful in 25s
Stylelint check / Stylelint check (pull_request) Successful in 27s
Rust check / Rust check (pull_request) Successful in 14m21s
2026-01-23 17:28:58 +01:00
8fd5fe2d4e chore: remove unused CSS configuration (#110) 2026-01-11 08:53:33 +00:00
d165e58443 chore: remove unused CSS configuration
All checks were successful
actionlint check / actionlint check (pull_request) Successful in 6s
conventional pull request title check / conventional pull request title check (pull_request) Successful in 3s
conventional commit messages check / conventional commit messages check (pull_request) Successful in 5s
dotenv-linter check / dotenv-linter check (pull_request) Successful in 9s
GitLeaks check / GitLeaks check (pull_request) Successful in 11s
hadolint check / hadolint check (pull_request) Successful in 18s
htmlhint check / htmlhint check (pull_request) Successful in 46s
markdownlint check / markdownlint check (pull_request) Successful in 42s
Prettier check / Prettier check (pull_request) Successful in 33s
checkov check / checkov check (pull_request) Successful in 1m30s
ShellCheck check / ShellCheck check (pull_request) Successful in 32s
Stylelint check / Stylelint check (pull_request) Successful in 34s
yamllint check / yamllint check (pull_request) Successful in 32s
Rust check / Rust check (pull_request) Successful in 23m25s
2026-01-10 13:00:51 +01:00
4 changed files with 51 additions and 30 deletions

View File

@@ -21,9 +21,9 @@ jobs:
run: > run: >
apt-get update && apt-get install -y apt-get update && apt-get install -y
libgtk-3-dev=3.24.33-1ubuntu2.2 libgtk-3-dev=3.24.33-1ubuntu2.2
libjavascriptcoregtk-4.1-dev=2.50.3-0ubuntu0.22.04.1 libjavascriptcoregtk-4.1-dev=2.50.4-0ubuntu0.22.04.1
libsoup-3.0-dev=3.0.7-0ubuntu1 libsoup-3.0-dev=3.0.7-0ubuntu1
libwebkit2gtk-4.1-dev=2.50.3-0ubuntu0.22.04.1 libwebkit2gtk-4.1-dev=2.50.4-0ubuntu0.22.04.1
libxdo-dev=1:3.20160805.1-4 libxdo-dev=1:3.20160805.1-4
- name: Rust toolchain installation - name: Rust toolchain installation
uses: dtolnay/rust-toolchain@9bc92bc5598b4f3bec5d910d352094982cb0c3b9 # 1.92.0 uses: dtolnay/rust-toolchain@9bc92bc5598b4f3bec5d910d352094982cb0c3b9 # 1.92.0

View File

@@ -1,6 +1,6 @@
use dioxus::{ use dioxus::{
CapturedError, CapturedError,
fullstack::{Loader, Loading, WebSocketOptions, use_websocket}, fullstack::{Loader, Loading, WebSocketOptions},
prelude::*, prelude::*,
}; };
use serde::{Serialize, de::DeserializeOwned}; use serde::{Serialize, de::DeserializeOwned};
@@ -13,6 +13,29 @@ use crate::{
}, },
}; };
fn use_on_document_become_visible(mut callback: impl FnMut() + 'static) {
let callback = use_callback(move |_| callback());
use_effect(move || {
spawn(async move {
let mut eval = document::eval(
r#"
document.addEventListener("visibilitychange", () => {
if (!document.hidden) {
dioxus.send(0);
}
});
"#,
);
loop {
eval.recv::<u8>()
.await
.expect("The JS code returned a value not parsable to `u8`.");
callback.call(());
}
});
});
}
#[allow(clippy::result_large_err)] #[allow(clippy::result_large_err)]
fn sort_loader_result<T: Ord + Clone>( fn sort_loader_result<T: Ord + Clone>(
result: Result<Loader<Vec<T>>, Loading>, result: Result<Loader<Vec<T>>, Loading>,
@@ -34,17 +57,37 @@ where
E: Into<CapturedError> + 'static, E: Into<CapturedError> + 'static,
{ {
let mut refresh_tick = use_signal(|| 0u64); let mut refresh_tick = use_signal(|| 0u64);
let mut websocket_reset_tick = use_signal(|| 0u64);
let loader = use_loader(move || { let loader = use_loader(move || {
let _ = refresh_tick(); // Read => dependency. let _ = refresh_tick(); // Read => dependency.
future() future()
}); });
let mut socket = use_websocket(|| subscribe_to_updates(WebSocketOptions::default())); use_effect(move || {
use_future(move || async move { let initial_websocket_reset_tick = websocket_reset_tick();
while socket.recv().await.is_ok() { spawn(async move {
refresh_tick += 1; let Ok(socket) =
} subscribe_to_updates(WebSocketOptions::new().with_automatic_reconnect()).await
else {
return;
};
while socket.recv().await.is_ok() {
if websocket_reset_tick() != initial_websocket_reset_tick {
// A new WebSocket has been created (a new task spawned), cleaning this one up.
break;
}
refresh_tick += 1;
}
});
});
/* So that when the device goes to sleep or suspends the app, the WebSocket gets recreated on
waking up. It is important to do this only on becoming visible (document.hidden == false),
because becoming hidden is the part when network may not work and thus cause errors. */
use_on_document_become_visible(move || {
websocket_reset_tick += 1;
refresh_tick += 1;
}); });
loader loader

View File

@@ -1,12 +0,0 @@
/** @type {import("tailwindcss").Config} */
module.exports = {
mode: "all",
content: ["./src/**/*.{rs,html,css}"],
theme: {
fontFamily: {
sans: ["Inter", "sans-serif"],
},
extend: {},
},
plugins: [],
};

View File

@@ -1,10 +0,0 @@
/* stylelint-disable */
/* noinspection CssInvalidAtRule */
@tailwind base;
/* noinspection CssInvalidAtRule */
@tailwind components;
/* noinspection CssInvalidAtRule */
@tailwind utilities;
/* stylelint-enable */