1
0
mirror of https://github.com/matrix-org/matrix-react-sdk.git synced 2025-08-06 10:22:45 +03:00

Fix broadcast last sequence number (#9858)

This commit is contained in:
Michael Weimann
2023-01-09 18:18:46 +01:00
committed by GitHub
parent be972bc913
commit 4f0a5d1eb4
2 changed files with 16 additions and 6 deletions

View File

@@ -60,13 +60,20 @@ export class VoiceBroadcastRecording
{ {
private state: VoiceBroadcastInfoState; private state: VoiceBroadcastInfoState;
private recorder: VoiceBroadcastRecorder; private recorder: VoiceBroadcastRecorder;
private sequence = 1;
private dispatcherRef: string; private dispatcherRef: string;
private chunkEvents = new VoiceBroadcastChunkEvents(); private chunkEvents = new VoiceBroadcastChunkEvents();
private chunkRelationHelper: RelationsHelper; private chunkRelationHelper: RelationsHelper;
private maxLength: number; private maxLength: number;
private timeLeft: number; private timeLeft: number;
/**
* Broadcast chunks have a sequence number to bring them in the correct order and to know if a message is missing.
* This variable holds the last sequence number.
* Starts with 0 because there is no chunk at the beginning of a broadcast.
* Will be incremented when a chunk message is created.
*/
private sequence = 0;
public constructor( public constructor(
public readonly infoEvent: MatrixEvent, public readonly infoEvent: MatrixEvent,
private client: MatrixClient, private client: MatrixClient,
@@ -268,7 +275,8 @@ export class VoiceBroadcastRecording
event_id: this.infoEvent.getId(), event_id: this.infoEvent.getId(),
}; };
content["io.element.voice_broadcast_chunk"] = { content["io.element.voice_broadcast_chunk"] = {
sequence: this.sequence++, /** Increment the last sequence number and use it for this message. Also see {@link sequence}. */
sequence: ++this.sequence,
}; };
await this.client.sendMessage(this.infoEvent.getRoomId(), content); await this.client.sendMessage(this.infoEvent.getRoomId(), content);

View File

@@ -254,12 +254,12 @@ describe("VoiceBroadcastRecording", () => {
expect(voiceBroadcastRecording.getState()).toBe(VoiceBroadcastInfoState.Started); expect(voiceBroadcastRecording.getState()).toBe(VoiceBroadcastInfoState.Started);
}); });
describe("and calling stop()", () => { describe("and calling stop", () => {
beforeEach(() => { beforeEach(() => {
voiceBroadcastRecording.stop(); voiceBroadcastRecording.stop();
}); });
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Stopped, 1); itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Stopped, 0);
itShouldBeInState(VoiceBroadcastInfoState.Stopped); itShouldBeInState(VoiceBroadcastInfoState.Stopped);
it("should emit a stopped state changed event", () => { it("should emit a stopped state changed event", () => {
@@ -351,6 +351,7 @@ describe("VoiceBroadcastRecording", () => {
itShouldBeInState(VoiceBroadcastInfoState.Stopped); itShouldBeInState(VoiceBroadcastInfoState.Stopped);
itShouldSendAVoiceMessage([23, 24, 25], 3, getMaxBroadcastLength(), 2); itShouldSendAVoiceMessage([23, 24, 25], 3, getMaxBroadcastLength(), 2);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Stopped, 2);
}); });
}); });
@@ -364,6 +365,7 @@ describe("VoiceBroadcastRecording", () => {
}); });
itShouldSendAVoiceMessage([4, 5, 6], 3, 42, 1); itShouldSendAVoiceMessage([4, 5, 6], 3, 42, 1);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Stopped, 1);
}); });
describe.each([ describe.each([
@@ -375,7 +377,7 @@ describe("VoiceBroadcastRecording", () => {
}); });
itShouldBeInState(VoiceBroadcastInfoState.Paused); itShouldBeInState(VoiceBroadcastInfoState.Paused);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Paused, 1); itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Paused, 0);
it("should stop the recorder", () => { it("should stop the recorder", () => {
expect(mocked(voiceBroadcastRecorder.stop)).toHaveBeenCalled(); expect(mocked(voiceBroadcastRecorder.stop)).toHaveBeenCalled();
@@ -413,7 +415,7 @@ describe("VoiceBroadcastRecording", () => {
}); });
itShouldBeInState(VoiceBroadcastInfoState.Resumed); itShouldBeInState(VoiceBroadcastInfoState.Resumed);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Resumed, 1); itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Resumed, 0);
it("should start the recorder", () => { it("should start the recorder", () => {
expect(mocked(voiceBroadcastRecorder.start)).toHaveBeenCalled(); expect(mocked(voiceBroadcastRecorder.start)).toHaveBeenCalled();