Skip to content

Add setting to hide unread activity dot indicators#2923

Open
chagai95 wants to merge 11 commits into
cinnyapp:devfrom
chagai95:dev
Open

Add setting to hide unread activity dot indicators#2923
chagai95 wants to merge 11 commits into
cinnyapp:devfrom
chagai95:dev

Conversation

@chagai95

@chagai95 chagai95 commented May 2, 2026

Copy link
Copy Markdown

The idea is to get rid of showing those type of unread rooms and keep only the ones with the number which are a lot more reliable and important.

This is how it looks before:
image

and this is after:
image

@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown


Thank you for your submission, we really appreciate it. Like many open-source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution. You can sign the CLA by just posting a Pull Request Comment same as the below format.


I have read the CLA Document and I hereby sign the CLA


1 out of 2 committers have signed the CLA.
✅ (chagai95)[https://github.com/chagai95]
@claude
You can retrigger this bot by commenting recheck in this Pull Request. Posted by the CLA Assistant Lite bot.

@chagai95
chagai95 marked this pull request as ready for review May 2, 2026 01:19
@chagai95
chagai95 marked this pull request as draft May 2, 2026 01:20
@chagai95

chagai95 commented May 2, 2026

Copy link
Copy Markdown
Author

I have read the CLA Document and I hereby sign the CLA

ajbura added a commit to cinnyapp/cla that referenced this pull request May 2, 2026
@chagai95

chagai95 commented May 2, 2026

Copy link
Copy Markdown
Author

recheck

@chagai95

chagai95 commented May 2, 2026

Copy link
Copy Markdown
Author

Here's a netlify link, if you wanted to test:
https://dev--cinny-chagai.netlify.app/home/

Rooms with unread activity but no notification count (muted rooms,
push-rule-downgraded rooms) showed a small grey dot in the room list
and kept appearing in the collapsed "unread only" nav section even
though nothing actually needed attention.

This adds a "Hide Unread Activity Dots" toggle (off by default) under
Settings › Notifications › System with three coordinated effects:

1. UnreadBadge: when the setting is on, skip rendering the dot
   entirely for rooms where count=0 and highlight=false.

2. Nav collapse filter (Direct, Home, Space): reads the same setting
   reactively — when on, the collapsed category shows only rooms with
   total>0 or highlight>0; when off, it reverts to the original
   behaviour of showing all rooms that have any unread activity.
   Toggling the setting in Settings updates the nav instantly without
   a page reload.

3. Settings UI: adds the toggle under Settings › Notifications › System.
@chagai95
chagai95 marked this pull request as ready for review May 6, 2026 23:22
@CrazyNicc

Copy link
Copy Markdown

Uhm, maybe I'm misunderstanding the purpose of this PR, but your "After" screenshot just seems to hide all the rooms that had this Unread Indicator

@chagai95

chagai95 commented May 7, 2026

Copy link
Copy Markdown
Author

@CrazyNicc thx for answering so quickly!

Yes that's exactly the point. A lot of irrelevant events trigger that unread marker and I think it makes sense to hide them for some users who get a lot of messages 🙈

Also it is shown when the room is muted I think and probably in other scenarios. There are also a lot of bugs that are related to them.

@CrazyNicc

Copy link
Copy Markdown

@chagai95 Oh, afaik muting the room also removed all the read indicators.

A lot of irrelevant events trigger that unread marker and I think it makes sense to hide them for some users who get a lot of messages

But your screenshot completely hides the rooms themselves, not just the unread markers of these rooms. Or did I miss something?

@chagai95

chagai95 commented May 7, 2026

Copy link
Copy Markdown
Author

@chagai95 Oh, afaik muting the room also removed all the read indicators.

A lot of irrelevant events trigger that unread marker and I think it makes sense to hide them for some users who get a lot of messages

But your screenshot completely hides the rooms themselves, not just the unread markers of these rooms. Or did I miss something?

It hides them from the unread view, when the section is closed (arrow not down), maybe muting the room helps with that, didn't check but I don't want to start muting all my rooms just to avoid seeing this, on fluffy chat it's not shown by default in the unread tab.

@chagai95

Copy link
Copy Markdown
Author

Hi everyone, just wondering if there is something missing here?

@CrazyNicc

Copy link
Copy Markdown

See the notice in the Project README:

We are currently in the process of replacing the matrix-js-sdk with our own SDK. As a result, we will not be accepting any pull requests until further notice. Thank you for your understanding.

claude added 9 commits July 16, 2026 15:22
…message"

Replying to a voice note (m.audio .ogg, e.g. a bridged WhatsApp "Voice
message.ogg") — or any media without a text body — rendered the quoted
preview as "Failed to load message" even though the replied-to event
loaded fine.

Root cause: Reply.tsx only used the event's `body`. When `body` was
missing/empty (or was only the stripped reply-quote), it fell through to
the generic MessageFailedContent fallback, which reads "Failed to load
message".

Fix: when a loaded reply target has no usable text body, derive a
msgtype-based preview (🎤 Voice message / 🔊 Audio / 🖼️ Image /
🎬 Video / 📄 File / 📍 Location) instead of the failure fallback.
Voice notes are detected via the MSC3245/MSC1767 voice extension on
m.audio. Only genuinely un-renderable events (redacted → deleted notice;
unknown/no content → failure) still hit the fallbacks. General across all
media msgtypes, not a voice-only band-aid.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VPNRaVnHM9hmpwYyewbeVj
…e estimates

The emoji board virtualizes at the group level but used a flat
estimateSize of 40px per group. Before any group was measured, the
virtualizer therefore believed all ~10 groups fit in the 400px viewport
and eagerly mounted every group — ~1,900 emoji <button> nodes — on the
very first paint, defeating the virtualization and making the popover
slow to open.

Estimate each group's real rendered height from its item count (48px
emoji / 112px sticker buttons, ~6/3 per row + group chrome) so only the
groups that actually fit the viewport mount on open (~700 nodes now,
dominated by the first "People" category), and drop overscan 2 -> 1 so
an off-screen 500+ item category isn't eagerly built. Scroll/search,
categories, recents and custom emoji/stickers are unchanged.
…guage setting

Add an in-app, client-side transcription action for voice/audio messages
(m.audio / m.voice). A microphone button next to the audio player opens an
app-only popover that requests a transcript from the local Whisper backend
(POST /transcribe with { room_id, event_id, mxc, language? }) and shows the
returned text plus the detected language, with copy-to-clipboard. The
transcript is cached in component state and is NEVER posted to the chat or
forwarded anywhere — it is a purely client-side overlay. Transcript text is
rendered strictly as text (untrusted content).

Adds a per-user default transcription language setting (General settings) and
optional backend URL/secret overrides. The API base and shared secret are
configurable via Vite env vars VITE_TRANSCRIBE_API_BASE and
VITE_TRANSCRIBE_API_SECRET (with settings overrides taking precedence), so the
endpoint can be re-pointed without a code change; no secret is hardcoded.

New files live under src/app/features/transcription/ to avoid overlap with the
parallel in-app translation feature. Shared files touched additively:
settings.ts (new fields), RenderMessageContent/AudioContent (thread roomId/
eventId to the button), General.tsx (settings section), RoomTimeline.tsx (pass
identifiers at the two message render sites).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add per-message translate button + auto-translate-all toggle to Cinny,
backed by Chagai's on-box argos/"Libre" translation API (offline, no cloud
translator). New self-contained `translation` feature (kept separate from the
voice-note transcription UI to minimize merge conflicts):

- Per-message "Translate" trigger under each text message with a language
  picker; shows the translation inline. Result cached per event+target.
- Global "auto-translate everywhere into <lang>" toggle + language in a new
  Settings > Translation page; per-chat override in room settings General.
- Settings persist in Matrix account data (`in.cinny.translation`) so they
  sync across devices; room override beats the global setting.
- Backend URL + shared token read from public/config.json
  (ClientConfig.translation); feature hides itself when unconfigured.
- Message text is only translated, never interpreted (injection-safe).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VPNRaVnHM9hmpwYyewbeVj
…lback to Settings)

Ship the on-box transcription API base+secret in public/config.json (mirrors the
translation block) so the 🎤 transcribe button works out of the box on the static
Netlify site. TranscribeButton falls back to config.json when the per-user Settings
overrides are empty (precedence: Settings > config.json > built-in default).
Also fill the translation token in config.json.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VPNRaVnHM9hmpwYyewbeVj
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants