From 91d0b55fd0369cad707f274530f4a00a3cbd9c97 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Wed, 1 Sep 2021 16:14:44 -0600 Subject: [PATCH] Stop automatic playback if a non-voice message is encountered Fixes https://github.com/vector-im/element-web/issues/18850 --- src/audio/PlaybackQueue.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/audio/PlaybackQueue.ts b/src/audio/PlaybackQueue.ts index 6df4c24897..a4ffa1aabf 100644 --- a/src/audio/PlaybackQueue.ts +++ b/src/audio/PlaybackQueue.ts @@ -22,6 +22,7 @@ import { arrayFastClone } from "../utils/arrays"; import { PlaybackManager } from "./PlaybackManager"; import { isVoiceMessage } from "../utils/EventUtils"; import RoomViewStore from "../stores/RoomViewStore"; +import { EventType } from "matrix-js-sdk/src/@types/event"; /** * Audio playback queue management for a given room. This keeps track of where the user @@ -137,13 +138,17 @@ export class PlaybackQueue { } if (!scanForVoiceMessage) continue; - // Dev note: This is where we'd break to cause text/non-voice messages to - // interrupt automatic playback. + if (!isVoiceMessage(event)) { + const evType = event.getType(); + if (evType !== EventType.RoomMessage && evType !== EventType.Sticker) { + continue; // Event can be skipped for automatic playback consideration + } + break; // Stop automatic playback: next useful event is not a voice message + } - const isRightType = isVoiceMessage(event); const havePlayback = this.playbacks.has(event.getId()); const isRecentlyCompleted = this.recentFullPlays.has(event.getId()); - if (isRightType && havePlayback && !isRecentlyCompleted) { + if (havePlayback && !isRecentlyCompleted) { nextEv = event; break; }