From a2777d3a03522cd431a2b90b74b5702e0a839daa Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Fri, 23 Dec 2022 14:45:26 +0100 Subject: [PATCH] Add labs setting to force small broadcast chunks (#9806) --- src/components/views/dialogs/DevtoolsDialog.tsx | 2 ++ src/i18n/strings/en_EN.json | 1 + src/settings/Settings.tsx | 6 ++++++ src/voice-broadcast/utils/getChunkLength.ts | 6 +++++- .../audio/VoiceBroadcastRecorder-test.ts | 2 ++ test/voice-broadcast/utils/getChunkLength-test.ts | 15 ++++++++++++++- 6 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/components/views/dialogs/DevtoolsDialog.tsx b/src/components/views/dialogs/DevtoolsDialog.tsx index 4dcd3d8c55..0220edc06b 100644 --- a/src/components/views/dialogs/DevtoolsDialog.tsx +++ b/src/components/views/dialogs/DevtoolsDialog.tsx @@ -31,6 +31,7 @@ import { AccountDataExplorer, RoomAccountDataExplorer } from "./devtools/Account import SettingsFlag from "../elements/SettingsFlag"; import { SettingLevel } from "../../../settings/SettingLevel"; import ServerInfo from "./devtools/ServerInfo"; +import { Features } from "../../../settings/Settings"; enum Category { Room, @@ -105,6 +106,7 @@ const DevtoolsDialog: React.FC = ({ roomId, onFinished }) => { + ); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 37d850a12a..e2b609d313 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -951,6 +951,7 @@ "Favourite Messages": "Favourite Messages", "Under active development.": "Under active development.", "Under active development": "Under active development", + "Force 15s voice broadcast chunk length": "Force 15s voice broadcast chunk length", "Use new session manager": "Use new session manager", "New session manager": "New session manager", "Have greater visibility and control over all your sessions.": "Have greater visibility and control over all your sessions.", diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 52090aba11..c1e7d26b92 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -90,6 +90,7 @@ export enum LabGroup { export enum Features { VoiceBroadcast = "feature_voice_broadcast", + VoiceBroadcastForceSmallChunks = "feature_voice_broadcast_force_small_chunks", } export const labGroupNames: Record = { @@ -461,6 +462,11 @@ export const SETTINGS: { [setting: string]: ISetting } = { description: _td("Under active development"), default: false, }, + [Features.VoiceBroadcastForceSmallChunks]: { + supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS, + displayName: _td("Force 15s voice broadcast chunk length"), + default: false, + }, "feature_new_device_manager": { isFeature: true, labsGroup: LabGroup.Experimental, diff --git a/src/voice-broadcast/utils/getChunkLength.ts b/src/voice-broadcast/utils/getChunkLength.ts index 5c8f75a5ce..0e417f65e9 100644 --- a/src/voice-broadcast/utils/getChunkLength.ts +++ b/src/voice-broadcast/utils/getChunkLength.ts @@ -15,13 +15,17 @@ limitations under the License. */ import SdkConfig, { DEFAULTS } from "../../SdkConfig"; +import { Features } from "../../settings/Settings"; +import SettingsStore from "../../settings/SettingsStore"; /** * Returns the target chunk length for voice broadcasts: - * - Tries to get the value from the voice_broadcast.chunk_length config + * - If {@see Features.VoiceBroadcastForceSmallChunks} is enabled uses 15s chunk length + * - Otherwise to get the value from the voice_broadcast.chunk_length config * - If that fails from DEFAULTS * - If that fails fall back to 120 (two minutes) */ export const getChunkLength = (): number => { + if (SettingsStore.getValue(Features.VoiceBroadcastForceSmallChunks)) return 15; return SdkConfig.get("voice_broadcast")?.chunk_length || DEFAULTS.voice_broadcast?.chunk_length || 120; }; diff --git a/test/voice-broadcast/audio/VoiceBroadcastRecorder-test.ts b/test/voice-broadcast/audio/VoiceBroadcastRecorder-test.ts index 9131aa9895..b88ef41bbc 100644 --- a/test/voice-broadcast/audio/VoiceBroadcastRecorder-test.ts +++ b/test/voice-broadcast/audio/VoiceBroadcastRecorder-test.ts @@ -40,6 +40,8 @@ jest.mock("../../../src/audio/VoiceRecording", () => ({ }), })); +jest.mock("../../../src/settings/SettingsStore"); + describe("VoiceBroadcastRecorder", () => { describe("createVoiceBroadcastRecorder", () => { beforeEach(() => { diff --git a/test/voice-broadcast/utils/getChunkLength-test.ts b/test/voice-broadcast/utils/getChunkLength-test.ts index c2d761c18b..a046a47f76 100644 --- a/test/voice-broadcast/utils/getChunkLength-test.ts +++ b/test/voice-broadcast/utils/getChunkLength-test.ts @@ -17,6 +17,9 @@ limitations under the License. import { mocked } from "jest-mock"; import SdkConfig, { DEFAULTS } from "../../../src/SdkConfig"; +import { SettingLevel } from "../../../src/settings/SettingLevel"; +import { Features } from "../../../src/settings/Settings"; +import SettingsStore from "../../../src/settings/SettingsStore"; import { getChunkLength } from "../../../src/voice-broadcast/utils/getChunkLength"; jest.mock("../../../src/SdkConfig"); @@ -48,7 +51,7 @@ describe("getChunkLength", () => { }); }); - describe("if there are no defaults", () => { + describe("when there are no defaults", () => { beforeEach(() => { DEFAULTS.voice_broadcast = undefined; }); @@ -57,4 +60,14 @@ describe("getChunkLength", () => { expect(getChunkLength()).toBe(120); }); }); + + describe("when the Features.VoiceBroadcastForceSmallChunks is enabled", () => { + beforeEach(async () => { + await SettingsStore.setValue(Features.VoiceBroadcastForceSmallChunks, null, SettingLevel.DEVICE, true); + }); + + it("should return a chunk length of 15 seconds", () => { + expect(getChunkLength()).toBe(15); + }); + }); });