mirror of
https://github.com/vector-im/element-call.git
synced 2026-10-10 23:25:52 +00:00
Share the mapping from parameters to call view model options
The SDK stopped sending join notifications: it threaded callIntent into createCallViewModel$ but not its pair sendNotificationType, which enterRTCSession used to read for itself, so an explicit ?sendNotificationType=ring — or an intent that implies one — no longer reached joinRTCSession. The mechanism is worth fixing rather than the instance. The defaults on CallViewModelOptions describe a standalone Element Call, so a widget caller that misses a field gets standalone behaviour rather than an error, and the SDK is only ever a widget. Give both callers one shared mapping so they cannot drift, and cover the whole chain from URL to options in tests. autoLeaveWhenOthersLeft and waitForCallPickup stay out of it: the view model never read those from the parameters, so enabling them for the SDK would be a change in its behaviour rather than a fix.
This commit is contained in:
@@ -86,7 +86,7 @@ import { constant, type Behavior } from "../Behavior";
|
||||
import { E2eeType } from "../../e2ee/e2eeType";
|
||||
import { MatrixKeyProvider } from "../../e2ee/matrixKeyProvider";
|
||||
import { type MuteStates } from "../MuteStates";
|
||||
import { HeaderStyle } from "../../UrlParams";
|
||||
import { HeaderStyle, type UrlParams } from "../../UrlParams";
|
||||
import { type ProcessorState } from "../../livekit/TrackProcessorContext";
|
||||
import { type HostBridge, nullHostBridge } from "../../HostBridge";
|
||||
import {
|
||||
@@ -216,6 +216,40 @@ export interface CallViewModelOptions {
|
||||
toggleScreensharing?: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* The options {@link createCallViewModel$} takes from the parameters Element
|
||||
* Call was started with.
|
||||
*
|
||||
* Callers share this rather than picking the fields out themselves. The
|
||||
* defaults on {@link CallViewModelOptions} describe a standalone Element Call,
|
||||
* so a widget or embedded caller that misses one does not get an error — it
|
||||
* quietly gets standalone behaviour instead.
|
||||
*
|
||||
* Note `autoLeaveWhenOthersLeft` and `waitForCallPickup` are deliberately not
|
||||
* here: unlike these, the view model never read them from the parameters
|
||||
* itself, so they remain the caller's decision.
|
||||
*/
|
||||
export function callViewModelOptionsFromParams(
|
||||
params: UrlParams,
|
||||
): Pick<
|
||||
CallViewModelOptions,
|
||||
| "controlledAudioDevices"
|
||||
| "header"
|
||||
| "showControls"
|
||||
| "hideScreensharing"
|
||||
| "sendNotificationType"
|
||||
| "callIntent"
|
||||
> {
|
||||
return {
|
||||
controlledAudioDevices: params.controlledAudioDevices,
|
||||
header: params.header,
|
||||
showControls: params.showControls,
|
||||
hideScreensharing: params.hideScreensharing,
|
||||
sendNotificationType: params.sendNotificationType,
|
||||
callIntent: params.callIntent,
|
||||
};
|
||||
}
|
||||
|
||||
// Do not play any sounds if the participant count has exceeded this
|
||||
// number.
|
||||
export const MAX_PARTICIPANT_COUNT_FOR_SOUND = 8;
|
||||
|
||||
Reference in New Issue
Block a user