mirror of
https://github.com/vector-im/element-call.git
synced 2024-11-24 00:38:31 +08:00
Merge pull request #2687 from robintown/media-devices-config
Add config options for starting with audio and video enabled
This commit is contained in:
commit
7edc8af9a0
@ -5,6 +5,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||||||
Please see LICENSE in the repository root for full details.
|
Please see LICENSE in the repository root for full details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { merge } from "lodash";
|
||||||
|
|
||||||
import { getUrlParams } from "../UrlParams";
|
import { getUrlParams } from "../UrlParams";
|
||||||
import {
|
import {
|
||||||
DEFAULT_CONFIG,
|
DEFAULT_CONFIG,
|
||||||
@ -15,7 +17,7 @@ import {
|
|||||||
export class Config {
|
export class Config {
|
||||||
private static internalInstance: Config | undefined;
|
private static internalInstance: Config | undefined;
|
||||||
|
|
||||||
public static get(): ConfigOptions {
|
public static get(): ResolvedConfigOptions {
|
||||||
if (!this.internalInstance?.config)
|
if (!this.internalInstance?.config)
|
||||||
throw new Error("Config instance read before config got initialized");
|
throw new Error("Config instance read before config got initialized");
|
||||||
return this.internalInstance.config;
|
return this.internalInstance.config;
|
||||||
@ -29,7 +31,7 @@ export class Config {
|
|||||||
Config.internalInstance.initPromise = downloadConfig(
|
Config.internalInstance.initPromise = downloadConfig(
|
||||||
"../config.json",
|
"../config.json",
|
||||||
).then((config) => {
|
).then((config) => {
|
||||||
internalInstance.config = { ...DEFAULT_CONFIG, ...config };
|
internalInstance.config = merge({}, DEFAULT_CONFIG, config);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return Config.internalInstance.initPromise;
|
return Config.internalInstance.initPromise;
|
||||||
|
@ -77,6 +77,17 @@ export interface ConfigOptions {
|
|||||||
* A link to the end-user license agreement (EULA)
|
* A link to the end-user license agreement (EULA)
|
||||||
*/
|
*/
|
||||||
eula: string;
|
eula: string;
|
||||||
|
|
||||||
|
media_devices?: {
|
||||||
|
/**
|
||||||
|
* Defines whether participants should start with audio enabled by default.
|
||||||
|
*/
|
||||||
|
enable_audio?: boolean;
|
||||||
|
/**
|
||||||
|
* Defines whether participants should start with video enabled by default.
|
||||||
|
*/
|
||||||
|
enable_video?: boolean;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overrides members from ConfigOptions that are always provided by the
|
// Overrides members from ConfigOptions that are always provided by the
|
||||||
@ -88,6 +99,10 @@ export interface ResolvedConfigOptions extends ConfigOptions {
|
|||||||
server_name: string;
|
server_name: string;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
media_devices: {
|
||||||
|
enable_audio: boolean;
|
||||||
|
enable_video: boolean;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DEFAULT_CONFIG: ResolvedConfigOptions = {
|
export const DEFAULT_CONFIG: ResolvedConfigOptions = {
|
||||||
@ -98,4 +113,8 @@ export const DEFAULT_CONFIG: ResolvedConfigOptions = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
eula: "https://static.element.io/legal/online-EULA.pdf",
|
eula: "https://static.element.io/legal/online-EULA.pdf",
|
||||||
|
media_devices: {
|
||||||
|
enable_audio: true,
|
||||||
|
enable_video: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
@ -18,6 +18,7 @@ import { logger } from "matrix-js-sdk/src/logger";
|
|||||||
import { MediaDevice, useMediaDevices } from "../livekit/MediaDevicesContext";
|
import { MediaDevice, useMediaDevices } from "../livekit/MediaDevicesContext";
|
||||||
import { useReactiveState } from "../useReactiveState";
|
import { useReactiveState } from "../useReactiveState";
|
||||||
import { ElementWidgetActions, widget } from "../widget";
|
import { ElementWidgetActions, widget } from "../widget";
|
||||||
|
import { Config } from "../config/Config";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If there already are this many participants in the call, we automatically mute
|
* If there already are this many participants in the call, we automatically mute
|
||||||
@ -71,8 +72,14 @@ function useMuteState(
|
|||||||
export function useMuteStates(): MuteStates {
|
export function useMuteStates(): MuteStates {
|
||||||
const devices = useMediaDevices();
|
const devices = useMediaDevices();
|
||||||
|
|
||||||
const audio = useMuteState(devices.audioInput, () => true);
|
const audio = useMuteState(
|
||||||
const video = useMuteState(devices.videoInput, () => true);
|
devices.audioInput,
|
||||||
|
() => Config.get().media_devices.enable_audio,
|
||||||
|
);
|
||||||
|
const video = useMuteState(
|
||||||
|
devices.videoInput,
|
||||||
|
() => Config.get().media_devices.enable_video,
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
widget?.api.transport
|
widget?.api.transport
|
||||||
|
@ -10,6 +10,7 @@ import { expect, test, vi } from "vitest";
|
|||||||
|
|
||||||
import { enterRTCSession } from "../src/rtcSessionHelpers";
|
import { enterRTCSession } from "../src/rtcSessionHelpers";
|
||||||
import { Config } from "../src/config/Config";
|
import { Config } from "../src/config/Config";
|
||||||
|
import { DEFAULT_CONFIG } from "./config/ConfigOptions";
|
||||||
|
|
||||||
test("It joins the correct Session", async () => {
|
test("It joins the correct Session", async () => {
|
||||||
const focusFromOlderMembership = {
|
const focusFromOlderMembership = {
|
||||||
@ -34,8 +35,8 @@ test("It joins the correct Session", async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
vi.spyOn(Config, "get").mockReturnValue({
|
vi.spyOn(Config, "get").mockReturnValue({
|
||||||
|
...DEFAULT_CONFIG,
|
||||||
livekit: { livekit_service_url: "http://my-default-service-url.com" },
|
livekit: { livekit_service_url: "http://my-default-service-url.com" },
|
||||||
eula: "",
|
|
||||||
});
|
});
|
||||||
const mockedSession = vi.mocked({
|
const mockedSession = vi.mocked({
|
||||||
room: {
|
room: {
|
||||||
|
Loading…
Reference in New Issue
Block a user