mirror of https://github.com/vector-im/riot-web
Fix broadcast last sequence number (#9858)
parent
be972bc913
commit
4f0a5d1eb4
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue