From a86947be4888bb8e9be6dd1b91d04399fb0fb44a Mon Sep 17 00:00:00 2001 From: Lotus CI Date: Fri, 16 Oct 2026 22:08:22 -0400 Subject: [PATCH] fix(calls): starting a call in a voice channel no longer @room-pings everyone (#295) CallEmbed asked Element Call to send a call-start notification for every non-DM call. In persistent voice channels and space rooms it carries an @room mention: every member got a highlighted ping (and phone push) whenever a moderator or admin joined first, and other clients showed it as a missed call. Now only rooms that can ring (isRingableRoom: DMs and invite-only groups outside a space) get ring/notification; everything else passes sendNotificationType=none (element-call-embedded 0.25.0-lotus.23). Verified with a local build of the fork: an admin joining the Voice Lounge sends none, and Bob gets no new notification (before: +1 highlighted). Fixes #295 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5 --- src/app/plugins/call/CallEmbed.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/app/plugins/call/CallEmbed.ts b/src/app/plugins/call/CallEmbed.ts index 039b024b1..0ef609645 100644 --- a/src/app/plugins/call/CallEmbed.ts +++ b/src/app/plugins/call/CallEmbed.ts @@ -31,6 +31,7 @@ import { verifyDenoiseAssets } from './denoiseSmokeCheck'; import { canDelegateCapability } from './utils'; import { getCallPageUrl } from './callPageUrl'; import { restrictWidgetMessages } from '../widgetTransport'; +import { isRingableRoom } from '../../utils/callRing'; // Maximum time to wait for the embedded Element Call iframe to progress from // initial load to a ready/joined state. If it hasn't by then, we assume the @@ -251,8 +252,18 @@ export class CallEmbed { verifyDenoiseAssets(denoiseModel).catch(() => undefined); } + // [Gitea #295] Only ask Element Call to notify where a call can ring at all + // (DMs, invite-only groups outside a space). In a voice channel or space + // room the notification carries an @room mention, so every member got a + // highlighted ping (and phone push) whenever a moderator hopped in, and + // other clients showed it as a missed call. + // `none` needs element-call-embedded ≥ 0.25.0-lotus.23 (older builds ignore it). if (CallEmbed.startingCall(intent)) { - params.append('sendNotificationType', CallEmbed.dmCall(intent) ? 'ring' : 'notification'); + let notify = 'none'; + if (isRingableRoom(room, CallEmbed.dmCall(intent))) { + notify = CallEmbed.dmCall(intent) ? 'ring' : 'notification'; + } + params.append('sendNotificationType', notify); } // [Gitea #43] On its own origin when config.json sets elementCallUrl.