fix: The force mute state was not synced to the handler
This commit is contained in:
@@ -170,6 +170,13 @@ describe("MuteStates", () => {
|
|||||||
constant(true),
|
constant(true),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let latestSyncedState: boolean | null = null;
|
||||||
|
muteStates.video.setHandler(async (enabled: boolean): Promise<boolean> => {
|
||||||
|
logger.info(`Video mute state set to: ${enabled}`);
|
||||||
|
latestSyncedState = enabled;
|
||||||
|
return Promise.resolve(enabled);
|
||||||
|
});
|
||||||
|
|
||||||
let lastVideoEnabled: boolean = false;
|
let lastVideoEnabled: boolean = false;
|
||||||
muteStates.video.enabled$.subscribe((enabled) => {
|
muteStates.video.enabled$.subscribe((enabled) => {
|
||||||
lastVideoEnabled = enabled;
|
lastVideoEnabled = enabled;
|
||||||
@@ -186,5 +193,20 @@ describe("MuteStates", () => {
|
|||||||
await flushPromises();
|
await flushPromises();
|
||||||
// Video should be automatically muted
|
// Video should be automatically muted
|
||||||
expect(lastVideoEnabled).toBe(false);
|
expect(lastVideoEnabled).toBe(false);
|
||||||
|
expect(latestSyncedState).toBe(false);
|
||||||
|
|
||||||
|
// Try to switch to speaker
|
||||||
|
audioOutputDevice.select("0000");
|
||||||
|
await flushPromises();
|
||||||
|
// TODO I'd expect it to go back to previous state (enabled)??
|
||||||
|
// But maybe not? If you move the phone away from your ear you may not want it
|
||||||
|
// to automatically enable video?
|
||||||
|
expect(lastVideoEnabled).toBe(false);
|
||||||
|
|
||||||
|
// But yet it can be unmuted now
|
||||||
|
expect(muteStates.video.setEnabled$.value).toBeDefined();
|
||||||
|
muteStates.video.setEnabled$.value?.(true);
|
||||||
|
await flushPromises();
|
||||||
|
expect(lastVideoEnabled).toBe(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -72,8 +72,6 @@ export class MuteState<Label, Selected> {
|
|||||||
|
|
||||||
private readonly data$ = this.scope.behavior<MuteStateData>(
|
private readonly data$ = this.scope.behavior<MuteStateData>(
|
||||||
this.devicesConnected$.pipe(
|
this.devicesConnected$.pipe(
|
||||||
// this.device.available$.pipe(
|
|
||||||
// map((available) => available.size > 0),
|
|
||||||
distinctUntilChanged(),
|
distinctUntilChanged(),
|
||||||
withLatestFrom(
|
withLatestFrom(
|
||||||
this.enabledByDefault$,
|
this.enabledByDefault$,
|
||||||
@@ -85,6 +83,11 @@ export class MuteState<Label, Selected> {
|
|||||||
logger.info(
|
logger.info(
|
||||||
`MuteState: devices connected: ${devicesConnected}, disabling`,
|
`MuteState: devices connected: ${devicesConnected}, disabling`,
|
||||||
);
|
);
|
||||||
|
// We need to sync the mute state with the handler
|
||||||
|
// to ensure nothing is beeing published.
|
||||||
|
this.handler$.value(false).catch((err) => {
|
||||||
|
logger.error("MuteState-disable: handler error", err);
|
||||||
|
});
|
||||||
return { enabled$: of(false), set: null, toggle: null };
|
return { enabled$: of(false), set: null, toggle: null };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user