You've already forked matrix-react-sdk
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:
@ -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();
|
||||
|
Reference in New Issue
Block a user