CI / Build & Quality Checks (pull_request) Successful in 1m39s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 7s
CI / Playwright smoke (e2e) (pull_request) Successful in 10m48s
Joining a voice channel alone sends a call notification (m.rtc.notification) to the room, and the timeline rendered every unanswered one as "Missed call from X", so everyone in the channel saw a missed call from someone who had just joined it. Ringing already excluded these rooms; the missed-call line didn't. utils/callRing.ts (unit-tested) holds the one rule for both: only DMs and invite-only groups outside any space ring or show "Missed call"; voice rooms, space channels, restricted and public rooms don't. Verified headless with the same two notifications from Bob: the Voice Lounge chat showed 2 "Missed call" lines before, 0 after; a small invite-only group still shows its missed call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
19 lines
867 B
TypeScript
19 lines
867 B
TypeScript
import { JoinRule, Room } from 'matrix-js-sdk';
|
|
import { StateEvent } from '../../types/matrix/room';
|
|
import { getStateEvents } from './room';
|
|
|
|
/**
|
|
* Whether a call notification in this room may ring — and, by the same rule,
|
|
* whether an unanswered one may show as "Missed call" (Gitea #162 follow-up).
|
|
* Only DMs and invite-only groups outside any space ring, i.e. rooms where the
|
|
* call button is shown. Persistent voice rooms, space channels, restricted and
|
|
* public rooms never do: joining a voice channel alone is normal and isn't a
|
|
* "call" anyone missed.
|
|
*/
|
|
export const isRingableRoom = (room: Room, isDirect: boolean): boolean => {
|
|
if (room.isCallRoom()) return false;
|
|
if (isDirect) return true;
|
|
const isSpaceChild = getStateEvents(room, StateEvent.SpaceParent).length > 0;
|
|
return !isSpaceChild && room.getJoinRule() === JoinRule.Invite;
|
|
};
|