- Sneedchat: detect a reconnect that silently lands as a guest (server's
own can_send permission flag) and force a session refresh + relogin;
add an idle-read timeout so a dead websocket is actually noticed
- Sneedchat: multipart file upload support in http.rs, wired into
sendMessage's attachment path (qu.ax-hosted images/video)
- Discord-style optimistic message sends: dim pending messages, resolve
to the real server echo, turn red and offer Retry on failure/timeout
- MessageList: fix scroll-to-end/New-divider landing, anchored-scroll
reliability during scrollbar drags, and BBCode [img][/img] tags
merging into one URL when posted back-to-back
- MediaEmbed: real audio output device, working scrub-bar seek/pan,
restart-from-start on a finished video
- DaemonStatusSettings: chatd connection indicator + build (git branch)
badge for DMS's plugin manager pane
- BufferList: scope the "+" join-channel affordance to IRC accounts only
- DisplaySettingsPanel: new toggle for content-sniffing unrecognized
media links
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Rust daemon (chatd-rs) speaking IRC, Discord, and Sneedchat (SockChat over
Tor) behind a shared Unix-socket JSON-RPC/event protocol, plus the QML
frontend (accounts, buffers, messages, settings) that drives it. The
earlier libpurple-based C daemon and its vendored/submoduled protocol
plugins have been fully superseded and are not carried into this history.
Co-Authored-By: Claude Sonnet 5 <[email protected]>