Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Fix broadcast last sequence number #9858

Merged
merged 3 commits into from
Jan 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions src/voice-broadcast/models/VoiceBroadcastRecording.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,20 @@ export class VoiceBroadcastRecording
{
private state: VoiceBroadcastInfoState;
private recorder: VoiceBroadcastRecorder;
private sequence = 1;
private dispatcherRef: string;
private chunkEvents = new VoiceBroadcastChunkEvents();
private chunkRelationHelper: RelationsHelper;
private maxLength: 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 readonly infoEvent: MatrixEvent,
private client: MatrixClient,
Expand Down Expand Up @@ -268,7 +275,8 @@ export class VoiceBroadcastRecording
event_id: this.infoEvent.getId(),
};
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);
Expand Down
10 changes: 6 additions & 4 deletions test/voice-broadcast/models/VoiceBroadcastRecording-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -254,12 +254,12 @@ describe("VoiceBroadcastRecording", () => {
expect(voiceBroadcastRecording.getState()).toBe(VoiceBroadcastInfoState.Started);
});

describe("and calling stop()", () => {
describe("and calling stop", () => {
beforeEach(() => {
voiceBroadcastRecording.stop();
});

itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Stopped, 1);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Stopped, 0);
itShouldBeInState(VoiceBroadcastInfoState.Stopped);

it("should emit a stopped state changed event", () => {
Expand Down Expand Up @@ -351,6 +351,7 @@ describe("VoiceBroadcastRecording", () => {

itShouldBeInState(VoiceBroadcastInfoState.Stopped);
itShouldSendAVoiceMessage([23, 24, 25], 3, getMaxBroadcastLength(), 2);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Stopped, 2);
});
});

Expand All @@ -364,6 +365,7 @@ describe("VoiceBroadcastRecording", () => {
});

itShouldSendAVoiceMessage([4, 5, 6], 3, 42, 1);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Stopped, 1);
});

describe.each([
Expand All @@ -375,7 +377,7 @@ describe("VoiceBroadcastRecording", () => {
});

itShouldBeInState(VoiceBroadcastInfoState.Paused);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Paused, 1);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Paused, 0);

it("should stop the recorder", () => {
expect(mocked(voiceBroadcastRecorder.stop)).toHaveBeenCalled();
Expand Down Expand Up @@ -413,7 +415,7 @@ describe("VoiceBroadcastRecording", () => {
});

itShouldBeInState(VoiceBroadcastInfoState.Resumed);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Resumed, 1);
itShouldSendAnInfoEvent(VoiceBroadcastInfoState.Resumed, 0);

it("should start the recorder", () => {
expect(mocked(voiceBroadcastRecorder.start)).toHaveBeenCalled();
Expand Down