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; };