fix(calls): app-wide call bar honours room camera/screenshare policy
The persistent call-status bar exposed Video and ScreenShare with no io.lotus.room_quality check and no share confirmation, bypassing the in-room bar's gating. Add useRoomCallPolicy and apply the same hiding plus a "Share your screen?" confirm. Fixes #26 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import { Room } from 'matrix-js-sdk';
|
||||
import { useMemo } from 'react';
|
||||
import { useStateEvent } from './useStateEvent';
|
||||
import { StateEvent } from '../../types/matrix/room';
|
||||
import { RoomQualityContent } from '../utils/callQuality';
|
||||
|
||||
export type RoomCallPolicy = {
|
||||
allowCamera: boolean;
|
||||
allowScreenshare: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* [Gitea #26] Shared room-level camera/screenshare policy, read from the
|
||||
* `io.lotus.room_quality` state event. Absent/true = allowed; only an explicit
|
||||
* `false` forbids. Hoisted out of `CallControls` so other call surfaces (e.g.
|
||||
* the app-wide `CallStatus` bar) can apply the same gating.
|
||||
*/
|
||||
export const useRoomCallPolicy = (room: Room): RoomCallPolicy => {
|
||||
const roomQualityEvent = useStateEvent(room, StateEvent.LotusRoomQuality);
|
||||
|
||||
return useMemo(() => {
|
||||
const roomQuality = roomQualityEvent?.getContent<RoomQualityContent>();
|
||||
return {
|
||||
allowCamera: roomQuality?.allow_camera !== false,
|
||||
allowScreenshare: roomQuality?.allow_screenshare !== false,
|
||||
};
|
||||
}, [roomQualityEvent]);
|
||||
};
|
||||
Reference in New Issue
Block a user