Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
Add labs setting to force small broadcast chunks (#9806)
Browse files Browse the repository at this point in the history
  • Loading branch information
weeman1337 authored Dec 23, 2022
1 parent a1bc4b8 commit a2777d3
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/components/views/dialogs/DevtoolsDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -105,6 +106,7 @@ const DevtoolsDialog: React.FC<IProps> = ({ roomId, onFinished }) => {
<SettingsFlag name="developerMode" level={SettingLevel.ACCOUNT} />
<SettingsFlag name="showHiddenEventsInTimeline" level={SettingLevel.DEVICE} />
<SettingsFlag name="enableWidgetScreenshots" level={SettingLevel.ACCOUNT} />
<SettingsFlag name={Features.VoiceBroadcastForceSmallChunks} level={SettingLevel.DEVICE} />
</div>
</BaseTool>
);
Expand Down
1 change: 1 addition & 0 deletions src/i18n/strings/en_EN.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
Expand Down
6 changes: 6 additions & 0 deletions src/settings/Settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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<LabGroup, string> = {
Expand Down Expand Up @@ -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,
Expand Down
6 changes: 5 additions & 1 deletion src/voice-broadcast/utils/getChunkLength.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
2 changes: 2 additions & 0 deletions test/voice-broadcast/audio/VoiceBroadcastRecorder-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ jest.mock("../../../src/audio/VoiceRecording", () => ({
}),
}));

jest.mock("../../../src/settings/SettingsStore");

describe("VoiceBroadcastRecorder", () => {
describe("createVoiceBroadcastRecorder", () => {
beforeEach(() => {
Expand Down
15 changes: 14 additions & 1 deletion test/voice-broadcast/utils/getChunkLength-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down Expand Up @@ -48,7 +51,7 @@ describe("getChunkLength", () => {
});
});

describe("if there are no defaults", () => {
describe("when there are no defaults", () => {
beforeEach(() => {
DEFAULTS.voice_broadcast = undefined;
});
Expand All @@ -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);
});
});
});

0 comments on commit a2777d3

Please sign in to comment.