- Matrix: interactive device verification (SAS emoji flow), recovery-key
backup/restore, membership announcement moderation, member/room avatars,
power-level-aware moderation menu, and an encryption lock indicator on
the composer - verified live with two independent devices.
- Replace the single combined join panel with a dedicated page per
protocol (IrcJoinPanel/MatrixJoinPanel/DiscordJoinPanel), routed by
whichever account the "+" button was clicked for rather than listing
every account in one expandable page.
- Discord: friends list (Online/All, click-to-DM, add-friend, matches
READY's relationships + live PRESENCE_UPDATE), create-a-server, and
join-by-invite alongside the existing DM-by-ID flow.
- Discord: an expired attachment-link fallback ("Open in Discord") for
scrollback media whose signed cdn.discordapp.com URL has lapsed -
Discord's own /attachments/refresh-urls re-sign endpoint hard-rejects
this backend's user-token requests, confirmed live, so this opens the
real message instead of showing a broken embed.
- Discord: detect gateway close code 4004 (revoked token) as a distinct
ConnState::AuthFailed instead of retrying a dead credential forever;
the Accounts pane shows a clear "needs login" state that routes
straight to a fresh QR login, which upserts the same account id in
place (no lost buffers/scrollback).
- Fix the unread-DM pinned-buffer flash never reliably triggering: an
implicit property binding computed via nested closures over two
separate properties wasn't consistently re-evaluated by QML's
dependency tracker; replaced with an explicit recompute function called
at every actual mutation point.
- Fix ChatBarWidget.qml's pill double-padding against BasePill's own
padding.
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]>
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]>