When `select!` drops a JoinHandle, it doesn't abort the spawned task - it detaches it. From tokio docs:
A JoinHandle detaches the associated task when it is dropped, which means that there is no
longer any handle to the task, and no way to join on it.
This means the spawn task is still spinning in the background:
1. c2s completes (client disconnected)
2. select! drops the s2c JoinHandle
3. The s2c task continues running in the background, detached
4. That task holds the Mumble server connection open
The fix is to hand the async calls directly to select! instead of
calling tokio::spawn.
(Turns out not) Pretty simple, if the average amplitude is under a certain value clear
out the buffer! The value I chose (.001) was an arbitrary value I got
from printf debugging. I was able to show that this worked pretty well
on the desktop session. Hopefully we'll add this to the settings page at
some point.
Once the app has been under that threshold for more than 200ms, we stop transmitting and send a terminator packet.
Reviewed-on: #13
Reviewed-by: restitux <restitux@ohea.xyz>
I noticed our BRB and AFK rooms were borked and made a change to fix that. I've attached a photo showing the result.
Overview:
- Add suppress field to UserState struct
- Process suppress field from UserState protobuf messages
- Update UI to show suppressed users with blacked out styling and muted icon
- Disable mute toggle button when user is suppressed
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Reviewed-on: #16
This adds android builds to the CI infrastructure. These builds generate an `apk` file that you can download and install.
- Adds a new container build job that builds a container with all the required android dependencies
- Adds a new release build that builds an android apk
- Updated the imp module to split out mobile and desktop behavior
- Adds logic to request microphone permissions
- Added a custom android manifest that declares the required permissions
Reviewed-on: #9
I vibe coded a change so that I can use mumble-web2 when I only have it in a small area instead of a full screen.
Scaling for smol screens:

Full screen scaling:

Reviewed-on: #15
Reviewed-by: restitux <restitux@ohea.xyz>
Co-authored-by: Samuel Warfield <samuel.warfield2@gmail.com>
Co-committed-by: Samuel Warfield <samuel.warfield2@gmail.com>
Add background color to #main in loader styles to prevent white flash
while app CSS loads after WASM initialization.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Shows a themed spinner overlay while the large WASM bundle downloads,
improving perceived load time on slower connections.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The PR was merged into upstream. They haven't cut a release yet though so we still need to pull from git.
Reviewed-on: #7
Reviewed-by: Sam Sartor <cap@samsartor.com>
Remove public_url config option
Use proxy_url instead for example configs
Get status from relative endpoint, like /config
Show version on login page
Reviewed-on: #5
Co-authored-by: Sam Sartor <me@samsartor.com>
Co-committed-by: Sam Sartor <me@samsartor.com>
Reviewed-on: #3
Automatically choose supported profile
Play stream once created
Co-authored-by: Sam Sartor <me@samsartor.com>
Co-committed-by: Sam Sartor <me@samsartor.com>
Adds a windows container build and a windows client build.
Outstanding issues:
- I'm not sure if `workflow_dispatch` works. Based on [this PR](https://github.com/go-gitea/gitea/pull/28163) it seems like it should, but I don't see a button. It might only work after merging into the default branch.
- The windows build container is building dioxus from git HEAD because there is an unreleased bugfix we are depending on. We should revert this to a versioned release (maybe using `binstall`) once they cut 0.7.2
Reviewed-on: #2