Skip to content

Commit

Permalink
Add config options for starting with audio and video enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
robintown committed Oct 24, 2024
1 parent fbf7549 commit 1a271e7
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 4 deletions.
6 changes: 4 additions & 2 deletions src/config/Config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ SPDX-License-Identifier: AGPL-3.0-only
Please see LICENSE in the repository root for full details.
*/

import { merge } from "lodash";

import { getUrlParams } from "../UrlParams";
import {
DEFAULT_CONFIG,
Expand All @@ -15,7 +17,7 @@ import {
export class Config {
private static internalInstance: Config | undefined;

public static get(): ConfigOptions {
public static get(): ResolvedConfigOptions {
if (!this.internalInstance?.config)
throw new Error("Config instance read before config got initialized");
return this.internalInstance.config;
Expand All @@ -29,7 +31,7 @@ export class Config {
Config.internalInstance.initPromise = downloadConfig(
"../config.json",
).then((config) => {
internalInstance.config = { ...DEFAULT_CONFIG, ...config };
internalInstance.config = merge({}, DEFAULT_CONFIG, config);
});
}
return Config.internalInstance.initPromise;
Expand Down
19 changes: 19 additions & 0 deletions src/config/ConfigOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,17 @@ export interface ConfigOptions {
* A link to the end-user license agreement (EULA)
*/
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
Expand All @@ -88,6 +99,10 @@ export interface ResolvedConfigOptions extends ConfigOptions {
server_name: string;
};
};
media_devices: {
enable_audio: boolean;
enable_video: boolean;
};
}

export const DEFAULT_CONFIG: ResolvedConfigOptions = {
Expand All @@ -98,4 +113,8 @@ export const DEFAULT_CONFIG: ResolvedConfigOptions = {
},
},
eula: "https://static.element.io/legal/online-EULA.pdf",
media_devices: {
enable_audio: true,
enable_video: true,
},
};
11 changes: 9 additions & 2 deletions src/room/MuteStates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { logger } from "matrix-js-sdk/src/logger";
import { MediaDevice, useMediaDevices } from "../livekit/MediaDevicesContext";
import { useReactiveState } from "../useReactiveState";
import { ElementWidgetActions, widget } from "../widget";
import { Config } from "../config/Config";

/**
* If there already are this many participants in the call, we automatically mute
Expand Down Expand Up @@ -71,8 +72,14 @@ function useMuteState(
export function useMuteStates(): MuteStates {
const devices = useMediaDevices();

const audio = useMuteState(devices.audioInput, () => true);
const video = useMuteState(devices.videoInput, () => true);
const audio = useMuteState(
devices.audioInput,
() => Config.get().media_devices.enable_audio,
);
const video = useMuteState(
devices.videoInput,
() => Config.get().media_devices.enable_video,
);

useEffect(() => {
widget?.api.transport
Expand Down

0 comments on commit 1a271e7

Please sign in to comment.