- 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]>
- Move the ~17 top-level QML files into views/, settings/, and forms/
subdirectories, grouped so cross-directory type references stay minimal
(only 3 files need an added `import` line). Root now only holds the
four surfaces plugin.json points at directly.
- Add a `dms ipc call dankChat popout` IPC target to open the floating
window directly, alongside the existing `toggle`, and document both in
the README along with the new directory layout.
- Add one line of breathing room between the last message and the
composer bar via the message ListView's bottomMargin (measured with
FontMetrics rather than a guessed pixel value).
Co-Authored-By: Claude Sonnet 5 <[email protected]>