4 Commits

Author SHA1 Message Date
bl 9858460696 chore: Release cnats version 0.2.2
Release / build (x86_64, ubuntu-latest) (push) Successful in 7m10s
Release / docker (push) Successful in 3m59s
Release / build (aarch64, aarch64) (push) Successful in 15m24s
Release / update-aur (push) Successful in 12s
2026-07-28 12:03:23 +02:00
bl 9550fa1f72 CI: install cargo-leptos via cargo-binstall instead of building from source
Building cargo-leptos from source pulls in swc/lightningcss/rhai and was
OOM-killing the aarch64 (Raspberry Pi) runner. cargo-leptos publishes
prebuilt aarch64-unknown-linux-gnu binaries, so binstall sidesteps the
compile entirely.
2026-07-28 12:02:26 +02:00
bl e0061af9ce chore: Release cnats version 0.2.1
Release / update-aur (push) Has been cancelled
Release / build (aarch64, aarch64) (push) Has been cancelled
Release / build (x86_64, ubuntu-latest) (push) Successful in 20m47s
Release / docker (push) Successful in 4m6s
2026-07-28 10:53:51 +02:00
bl 64bc5222fc Fix release build: box CallPanel's in-call subtree to avoid recursion limit
Mesh calling's nested Show/For inside ChatShell's own Show inlined as a
type parameter, blowing rustc's query recursion limit during the wasm
release build (CI: "queries overflow the depth limit!"). Splitting the
in-call view into its own component and type-erasing both CallPanel
branches with .into_any() keeps the type shallow instead of raising the
crate-wide limit.
2026-07-28 10:53:32 +02:00
5 changed files with 63 additions and 31 deletions
+8 -1
View File
@@ -36,8 +36,15 @@ jobs:
~/.cargo/bin
key: ${{ runner.os }}-${{ matrix.arch }}-cargo-leptos-${{ hashFiles('Cargo.lock') }}
- name: Install cargo-binstall
run: |
command -v cargo-binstall || \
curl -L --proto '=https' --tlsv1.2 -sSf \
https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh \
| bash
- name: Install cargo-leptos
run: command -v cargo-leptos || cargo install cargo-leptos --locked
run: command -v cargo-leptos || cargo binstall cargo-leptos --locked --no-confirm
- name: Build
run: cargo leptos build --release
Generated
+1 -1
View File
@@ -345,7 +345,7 @@ dependencies = [
[[package]]
name = "cnats"
version = "0.2.0"
version = "0.2.2"
dependencies = [
"anyhow",
"async-nats",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "cnats"
version = "0.2.0"
version = "0.2.2"
edition = "2021"
[lib]
+1 -1
View File
@@ -1,6 +1,6 @@
# Maintainer: Bendik Aagaard Lynghaug <bendik.lynghaug@gmail.com>
pkgname=cnats
pkgver=0.2.0
pkgver=0.2.2
pkgrel=1
pkgdesc="Web chat over NATS subjects with Kanidm SSO (Leptos SSR)"
arch=('x86_64' 'aarch64')
+52 -27
View File
@@ -472,45 +472,70 @@ fn CallPanel(room: Memo<String>, me: String) -> impl IntoView {
view! {
<div class="call-panel">
<Show
when=move || in_call.get()
fallback=move || {
{move || {
if in_call.get() {
view! {
<CallActive
local_video_ref=local_video_ref
call_state=call_state.get_value()
on_leave=on_leave
/>
}
.into_any()
} else {
view! {
<button class="call-join" on:click=on_join>
"☎ join call"
</button>
}
.into_any()
}
>
<div class="call-active">
<div class="video-grid">
<video
class="video-tile video-tile-local"
node_ref=local_video_ref
autoplay=true
muted=true
playsinline=true
></video>
<For
each=move || call_state.get_value().peer_streams()
key=|(id, _)| id.clone()
children=move |(_id, stream)| {
view! { <PeerVideoTile stream=stream/> }
}
/>
</div>
<button class="call-leave" on:click=on_leave>
"⏏ leave call"
</button>
</div>
</Show>
}}
</div>
}
.into_any()
}
#[cfg(not(feature = "hydrate"))]
{
let _ = (room, me);
view! { <div class="call-panel"></div> }
view! { <div class="call-panel"></div> }.into_any()
}
}
/// The in-call subtree (video grid + leave button), split out of
/// `CallPanel` so its `<For>`-over-peers view doesn't get inlined as a type
/// parameter of `CallPanel`'s own `if`/`else` branch - that inlining is what
/// was blowing the compiler's query recursion limit once mesh calling's
/// nested `Show`/`For` landed inside `ChatShell`'s own `Show`.
#[cfg(feature = "hydrate")]
#[component]
fn CallActive(
local_video_ref: NodeRef<leptos::html::Video>,
call_state: crate::webrtc::CallState,
on_leave: impl Fn(leptos::ev::MouseEvent) + 'static,
) -> impl IntoView {
view! {
<div class="call-active">
<div class="video-grid">
<video
class="video-tile video-tile-local"
node_ref=local_video_ref
autoplay=true
muted=true
playsinline=true
></video>
<For
each=move || call_state.peer_streams()
key=|(id, _)| id.clone()
children=move |(_id, stream)| {
view! { <PeerVideoTile stream=stream/> }
}
/>
</div>
<button class="call-leave" on:click=on_leave>
"⏏ leave call"
</button>
</div>
}
}