mirror of https://github.com/vector-im/riot-web
Stop voice broadcast on delete (#9629)
parent
d6ea92f735
commit
3c7781a561
|
@ -18,6 +18,7 @@ import {
|
|||
EventType,
|
||||
MatrixClient,
|
||||
MatrixEvent,
|
||||
MatrixEventEvent,
|
||||
MsgType,
|
||||
RelationType,
|
||||
} from "matrix-js-sdk/src/matrix";
|
||||
|
@ -88,6 +89,7 @@ export class VoiceBroadcastPlayback
|
|||
) {
|
||||
super();
|
||||
this.addInfoEvent(this.infoEvent);
|
||||
this.infoEvent.on(MatrixEventEvent.BeforeRedaction, this.onBeforeRedaction);
|
||||
this.setUpRelationsHelper();
|
||||
}
|
||||
|
||||
|
@ -169,6 +171,14 @@ export class VoiceBroadcastPlayback
|
|||
this.setInfoState(state);
|
||||
};
|
||||
|
||||
private onBeforeRedaction = () => {
|
||||
if (this.getState() !== VoiceBroadcastPlaybackState.Stopped) {
|
||||
this.stop();
|
||||
// destroy cleans up everything
|
||||
this.destroy();
|
||||
}
|
||||
};
|
||||
|
||||
private async enqueueChunks(): Promise<void> {
|
||||
const promises = this.chunkEvents.getEvents().reduce((promises, event: MatrixEvent) => {
|
||||
if (!this.playbacks.has(event.getId() || "")) {
|
||||
|
|
|
@ -126,6 +126,7 @@ describe("VoiceBroadcastPlayback", () => {
|
|||
const mkPlayback = async () => {
|
||||
const playback = new VoiceBroadcastPlayback(infoEvent, client);
|
||||
jest.spyOn(playback, "removeAllListeners");
|
||||
jest.spyOn(playback, "destroy");
|
||||
playback.on(VoiceBroadcastPlaybackEvent.StateChanged, onStateChanged);
|
||||
await flushPromises();
|
||||
return playback;
|
||||
|
@ -273,6 +274,7 @@ describe("VoiceBroadcastPlayback", () => {
|
|||
startPlayback();
|
||||
|
||||
it("should play the last chunk", () => {
|
||||
expect(playback.getState()).toBe(VoiceBroadcastPlaybackState.Playing);
|
||||
// assert that the last chunk is played first
|
||||
expect(chunk2Playback.play).toHaveBeenCalled();
|
||||
expect(chunk1Playback.play).not.toHaveBeenCalled();
|
||||
|
@ -299,6 +301,17 @@ describe("VoiceBroadcastPlayback", () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("and the info event is deleted", () => {
|
||||
beforeEach(() => {
|
||||
infoEvent.makeRedacted(new MatrixEvent({}));
|
||||
});
|
||||
|
||||
it("should stop and destroy the playback", () => {
|
||||
expect(playback.getState()).toBe(VoiceBroadcastPlaybackState.Stopped);
|
||||
expect(playback.destroy).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue