1
0
mirror of https://github.com/matrix-org/matrix-react-sdk.git synced 2025-07-30 02:21:17 +03:00

Add audible notifcation on broadcast error (#10654)

* Add audible notifcation on broadcast error

* Add error audio file

* Add error ogg

* Catch play broadcast error

* Await play error sound

* Add promise error handling

* Add comment about audio elements
This commit is contained in:
Michael Weimann
2023-05-11 14:15:34 +02:00
committed by GitHub
parent 9aade5a4d5
commit 0a6fe83a8c
4 changed files with 65 additions and 0 deletions

View File

@ -19,6 +19,7 @@ import {
ClientEvent,
EventTimelineSet,
EventType,
LOCAL_NOTIFICATION_SETTINGS_PREFIX,
MatrixClient,
MatrixEvent,
MatrixEventEvent,
@ -89,6 +90,7 @@ describe("VoiceBroadcastRecording", () => {
let voiceBroadcastRecording: VoiceBroadcastRecording;
let onStateChanged: (state: VoiceBroadcastRecordingState) => void;
let voiceBroadcastRecorder: VoiceBroadcastRecorder;
let audioElement: HTMLAudioElement;
const mkVoiceBroadcastInfoEvent = (content: VoiceBroadcastInfoEventContent) => {
return mkEvent({
@ -251,6 +253,18 @@ describe("VoiceBroadcastRecording", () => {
};
},
);
audioElement = {
play: jest.fn(),
} as any as HTMLAudioElement;
jest.spyOn(document, "querySelector").mockImplementation((selector: string) => {
if (selector === "audio#errorAudio") {
return audioElement;
}
return null;
});
});
afterEach(() => {
@ -501,6 +515,33 @@ describe("VoiceBroadcastRecording", () => {
});
});
describe("and audible notifications are disabled", () => {
beforeEach(() => {
const notificationSettings = mkEvent({
event: true,
type: `${LOCAL_NOTIFICATION_SETTINGS_PREFIX.name}.${client.getDeviceId()}`,
user: client.getSafeUserId(),
content: {
is_silenced: true,
},
});
mocked(client.getAccountData).mockReturnValue(notificationSettings);
});
describe("and a chunk has been recorded and sending the voice message fails", () => {
beforeEach(() => {
mocked(client.sendMessage).mockRejectedValue("Error");
emitFirsChunkRecorded();
});
itShouldBeInState("connection_error");
it("should not play a notification", () => {
expect(audioElement.play).not.toHaveBeenCalled();
});
});
});
describe("and a chunk has been recorded and sending the voice message fails", () => {
beforeEach(() => {
mocked(client.sendMessage).mockRejectedValue("Error");
@ -509,6 +550,10 @@ describe("VoiceBroadcastRecording", () => {
itShouldBeInState("connection_error");
it("should play a notification", () => {
expect(audioElement.play).toHaveBeenCalled();
});
describe("and the connection is back", () => {
beforeEach(() => {
mocked(client.sendMessage).mockClear();