From b41d801cab2ffcccf2c9c170f208e158bc5413be Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Thu, 13 Aug 2026 10:35:18 +0300 Subject: [PATCH] Prevent invalid composer mode crashes Cause by voice recording racing against the send action. --- .../RoomScreen/ComposerToolbar/ComposerToolbarViewModel.swift | 2 ++ ElementX/Sources/Screens/Timeline/TimelineViewModel.swift | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ElementX/Sources/Screens/RoomScreen/ComposerToolbar/ComposerToolbarViewModel.swift b/ElementX/Sources/Screens/RoomScreen/ComposerToolbar/ComposerToolbarViewModel.swift index 75d21dd94..1e43c88f5 100644 --- a/ElementX/Sources/Screens/RoomScreen/ComposerToolbar/ComposerToolbarViewModel.swift +++ b/ElementX/Sources/Screens/RoomScreen/ComposerToolbar/ComposerToolbarViewModel.swift @@ -189,6 +189,8 @@ final class ComposerToolbarViewModel: ComposerToolbarViewModelType, ComposerTool switch state.composerMode { case .previewVoiceMessage: actionsSubject.send(.voiceMessage(.send)) + case .recordVoiceMessage: + MXLog.warning("Ignoring send action while recording a voice message.") default: if context.composerFormattingEnabled { actionsSubject.send(.sendMessage(plain: wysiwygViewModel.content.markdown, diff --git a/ElementX/Sources/Screens/Timeline/TimelineViewModel.swift b/ElementX/Sources/Screens/Timeline/TimelineViewModel.swift index aebaaf594..76e5a83aa 100644 --- a/ElementX/Sources/Screens/Timeline/TimelineViewModel.swift +++ b/ElementX/Sources/Screens/Timeline/TimelineViewModel.swift @@ -807,7 +807,8 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { intentionalMentions: intentionalMentions) } case .recordVoiceMessage, .previewVoiceMessage: - fatalError("invalid composer mode.") + MXLog.error("Ignoring sendCurrentMessage with invalid composer mode: \(mode)") + return } scrollToBottom()