Check connection before starting broadcast (#9857)
This commit is contained in:
parent
fbfa174ad0
commit
be972bc913
6 changed files with 88 additions and 14 deletions
|
@ -650,6 +650,8 @@
|
||||||
"You are already recording a voice broadcast. Please end your current voice broadcast to start a new one.": "You are already recording a voice broadcast. Please end your current voice broadcast to start a new one.",
|
"You are already recording a voice broadcast. Please end your current voice broadcast to start a new one.": "You are already recording a voice broadcast. Please end your current voice broadcast to start a new one.",
|
||||||
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.",
|
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.",
|
||||||
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.",
|
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.",
|
||||||
|
"Connection error": "Connection error",
|
||||||
|
"Unfortunately we're unable to start a recording right now. Please try again later.": "Unfortunately we're unable to start a recording right now. Please try again later.",
|
||||||
"Can’t start a call": "Can’t start a call",
|
"Can’t start a call": "Can’t start a call",
|
||||||
"You can’t start a call as you are currently recording a live broadcast. Please end your live broadcast in order to start a call.": "You can’t start a call as you are currently recording a live broadcast. Please end your live broadcast in order to start a call.",
|
"You can’t start a call as you are currently recording a live broadcast. Please end your live broadcast in order to start a call.": "You can’t start a call as you are currently recording a live broadcast. Please end your live broadcast in order to start a call.",
|
||||||
"You ended a <a>voice broadcast</a>": "You ended a <a>voice broadcast</a>",
|
"You ended a <a>voice broadcast</a>": "You ended a <a>voice broadcast</a>",
|
||||||
|
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { MatrixClient, Room } from "matrix-js-sdk/src/matrix";
|
import { MatrixClient, Room } from "matrix-js-sdk/src/matrix";
|
||||||
|
import { SyncState } from "matrix-js-sdk/src/sync";
|
||||||
|
|
||||||
import { hasRoomLiveVoiceBroadcast, VoiceBroadcastInfoEventType, VoiceBroadcastRecordingsStore } from "..";
|
import { hasRoomLiveVoiceBroadcast, VoiceBroadcastInfoEventType, VoiceBroadcastRecordingsStore } from "..";
|
||||||
import InfoDialog from "../../components/views/dialogs/InfoDialog";
|
import InfoDialog from "../../components/views/dialogs/InfoDialog";
|
||||||
|
@ -67,6 +68,14 @@ const showOthersAlreadyRecordingDialog = () => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const showNoConnectionDialog = (): void => {
|
||||||
|
Modal.createDialog(InfoDialog, {
|
||||||
|
title: _t("Connection error"),
|
||||||
|
description: <p>{_t("Unfortunately we're unable to start a recording right now. Please try again later.")}</p>,
|
||||||
|
hasCloseButton: true,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
export const checkVoiceBroadcastPreConditions = async (
|
export const checkVoiceBroadcastPreConditions = async (
|
||||||
room: Room,
|
room: Room,
|
||||||
client: MatrixClient,
|
client: MatrixClient,
|
||||||
|
@ -86,6 +95,11 @@ export const checkVoiceBroadcastPreConditions = async (
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (client.getSyncState() === SyncState.Error) {
|
||||||
|
showNoConnectionDialog();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const { hasBroadcast, startedByUser } = await hasRoomLiveVoiceBroadcast(client, room, currentUserId);
|
const { hasBroadcast, startedByUser } = await hasRoomLiveVoiceBroadcast(client, room, currentUserId);
|
||||||
|
|
||||||
if (hasBroadcast && startedByUser) {
|
if (hasBroadcast && startedByUser) {
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`setUpVoiceBroadcastPreRecording when trying to start a broadcast if there is no connection should show an info dialog and not set up a pre-recording 1`] = `
|
||||||
|
[MockFunction] {
|
||||||
|
"calls": [
|
||||||
|
[
|
||||||
|
[Function],
|
||||||
|
{
|
||||||
|
"description": <p>
|
||||||
|
Unfortunately we're unable to start a recording right now. Please try again later.
|
||||||
|
</p>,
|
||||||
|
"hasCloseButton": true,
|
||||||
|
"title": "Connection error",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"results": [
|
||||||
|
{
|
||||||
|
"type": "return",
|
||||||
|
"value": undefined,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
`;
|
|
@ -91,3 +91,26 @@ exports[`startNewVoiceBroadcastRecording when the current user is not allowed to
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`startNewVoiceBroadcastRecording when trying to start a broadcast if there is no connection should show an info dialog and not start a recording 1`] = `
|
||||||
|
[MockFunction] {
|
||||||
|
"calls": [
|
||||||
|
[
|
||||||
|
[Function],
|
||||||
|
{
|
||||||
|
"description": <p>
|
||||||
|
Unfortunately we're unable to start a recording right now. Please try again later.
|
||||||
|
</p>,
|
||||||
|
"hasCloseButton": true,
|
||||||
|
"title": "Connection error",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
],
|
||||||
|
"results": [
|
||||||
|
{
|
||||||
|
"type": "return",
|
||||||
|
"value": undefined,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
|
@ -16,9 +16,10 @@ limitations under the License.
|
||||||
|
|
||||||
import { mocked } from "jest-mock";
|
import { mocked } from "jest-mock";
|
||||||
import { MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix";
|
import { MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix";
|
||||||
|
import { SyncState } from "matrix-js-sdk/src/sync";
|
||||||
|
|
||||||
|
import Modal from "../../../src/Modal";
|
||||||
import {
|
import {
|
||||||
checkVoiceBroadcastPreConditions,
|
|
||||||
VoiceBroadcastInfoState,
|
VoiceBroadcastInfoState,
|
||||||
VoiceBroadcastPlayback,
|
VoiceBroadcastPlayback,
|
||||||
VoiceBroadcastPlaybacksStore,
|
VoiceBroadcastPlaybacksStore,
|
||||||
|
@ -30,7 +31,7 @@ import { setUpVoiceBroadcastPreRecording } from "../../../src/voice-broadcast/ut
|
||||||
import { mkRoomMemberJoinEvent, stubClient } from "../../test-utils";
|
import { mkRoomMemberJoinEvent, stubClient } from "../../test-utils";
|
||||||
import { mkVoiceBroadcastInfoStateEvent } from "./test-utils";
|
import { mkVoiceBroadcastInfoStateEvent } from "./test-utils";
|
||||||
|
|
||||||
jest.mock("../../../src/voice-broadcast/utils/checkVoiceBroadcastPreConditions");
|
jest.mock("../../../src/Modal");
|
||||||
|
|
||||||
describe("setUpVoiceBroadcastPreRecording", () => {
|
describe("setUpVoiceBroadcastPreRecording", () => {
|
||||||
const roomId = "!room:example.com";
|
const roomId = "!room:example.com";
|
||||||
|
@ -86,20 +87,19 @@ describe("setUpVoiceBroadcastPreRecording", () => {
|
||||||
playbacksStore = new VoiceBroadcastPlaybacksStore(recordingsStore);
|
playbacksStore = new VoiceBroadcastPlaybacksStore(recordingsStore);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when the preconditions fail", () => {
|
describe("when trying to start a broadcast if there is no connection", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
mocked(checkVoiceBroadcastPreConditions).mockResolvedValue(false);
|
mocked(client.getSyncState).mockReturnValue(SyncState.Error);
|
||||||
await setUpPreRecording();
|
await setUpPreRecording();
|
||||||
});
|
});
|
||||||
|
|
||||||
itShouldNotCreateAPreRecording();
|
it("should show an info dialog and not set up a pre-recording", () => {
|
||||||
|
expect(preRecordingStore.getCurrent()).toBeNull();
|
||||||
|
expect(Modal.createDialog).toMatchSnapshot();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when the preconditions pass", () => {
|
describe("when setting up a pre-recording", () => {
|
||||||
beforeEach(() => {
|
|
||||||
mocked(checkVoiceBroadcastPreConditions).mockResolvedValue(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("and there is no user id", () => {
|
describe("and there is no user id", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
mocked(client.getUserId).mockReturnValue(null);
|
mocked(client.getUserId).mockReturnValue(null);
|
||||||
|
@ -120,17 +120,15 @@ describe("setUpVoiceBroadcastPreRecording", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("and there is a room member and listening to another broadcast", () => {
|
describe("and there is a room member and listening to another broadcast", () => {
|
||||||
beforeEach(() => {
|
beforeEach(async () => {
|
||||||
playbacksStore.setCurrent(playback);
|
playbacksStore.setCurrent(playback);
|
||||||
room.currentState.setStateEvents([mkRoomMemberJoinEvent(userId, roomId)]);
|
room.currentState.setStateEvents([mkRoomMemberJoinEvent(userId, roomId)]);
|
||||||
setUpPreRecording();
|
await setUpPreRecording();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should pause the current playback and create a voice broadcast pre-recording", () => {
|
it("should pause the current playback and create a voice broadcast pre-recording", () => {
|
||||||
expect(playback.pause).toHaveBeenCalled();
|
expect(playback.pause).toHaveBeenCalled();
|
||||||
expect(playbacksStore.getCurrent()).toBeNull();
|
expect(playbacksStore.getCurrent()).toBeNull();
|
||||||
|
|
||||||
expect(checkVoiceBroadcastPreConditions).toHaveBeenCalledWith(room, client, recordingsStore);
|
|
||||||
expect(preRecording).toBeInstanceOf(VoiceBroadcastPreRecording);
|
expect(preRecording).toBeInstanceOf(VoiceBroadcastPreRecording);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
||||||
|
|
||||||
import { mocked } from "jest-mock";
|
import { mocked } from "jest-mock";
|
||||||
import { EventType, ISendEventResponse, MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix";
|
import { EventType, ISendEventResponse, MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix";
|
||||||
|
import { SyncState } from "matrix-js-sdk/src/sync";
|
||||||
|
|
||||||
import Modal from "../../../src/Modal";
|
import Modal from "../../../src/Modal";
|
||||||
import {
|
import {
|
||||||
|
@ -103,6 +104,18 @@ describe("startNewVoiceBroadcastRecording", () => {
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("when trying to start a broadcast if there is no connection", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
mocked(client.getSyncState).mockReturnValue(SyncState.Error);
|
||||||
|
result = await startNewVoiceBroadcastRecording(room, client, playbacksStore, recordingsStore);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should show an info dialog and not start a recording", () => {
|
||||||
|
expect(result).toBeNull();
|
||||||
|
expect(Modal.createDialog).toMatchSnapshot();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("when the current user is allowed to send voice broadcast info state events", () => {
|
describe("when the current user is allowed to send voice broadcast info state events", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mocked(room.currentState.maySendStateEvent).mockReturnValue(true);
|
mocked(room.currentState.maySendStateEvent).mockReturnValue(true);
|
||||||
|
|
Loading…
Reference in a new issue