From a2d4aa0f16afcb9b62407fb22d7c07b57cfeceff Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 18 Jun 2025 15:07:14 -0400 Subject: [PATCH 1/2] chore: deselect events in message overlay dispose function --- lib/pages/chat/chat.dart | 7 +++++++ .../toolbar/widgets/message_selection_overlay.dart | 13 ++++++++++++- lib/pangea/toolbar/widgets/overlay_header.dart | 7 ++++--- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index b3515294f..6ee5dc1dd 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -1651,6 +1651,13 @@ class ChatController extends State showEmojiPicker = false; }); } + + void setSelectedEvent(Event event) { + setState(() { + selectedEvents.clear(); + selectedEvents.add(event); + }); + } // Pangea# void clearSingleSelectedEvent() { diff --git a/lib/pangea/toolbar/widgets/message_selection_overlay.dart b/lib/pangea/toolbar/widgets/message_selection_overlay.dart index 08a756476..cdacaa4bb 100644 --- a/lib/pangea/toolbar/widgets/message_selection_overlay.dart +++ b/lib/pangea/toolbar/widgets/message_selection_overlay.dart @@ -109,8 +109,19 @@ class MessageOverlayController extends State @override void initState() { - initializeTokensAndMode(); super.initState(); + initializeTokensAndMode(); + WidgetsBinding.instance.addPostFrameCallback( + (_) => widget.chatController.setSelectedEvent(event), + ); + } + + @override + void dispose() { + WidgetsBinding.instance.addPostFrameCallback( + (_) => widget.chatController.clearSelectedEvents(), + ); + super.dispose(); } Future initializeTokensAndMode() async { diff --git a/lib/pangea/toolbar/widgets/overlay_header.dart b/lib/pangea/toolbar/widgets/overlay_header.dart index ff85e6b0b..a13e1c2a4 100644 --- a/lib/pangea/toolbar/widgets/overlay_header.dart +++ b/lib/pangea/toolbar/widgets/overlay_header.dart @@ -36,9 +36,10 @@ class OverlayHeaderState extends State { Widget build(BuildContext context) { final l10n = L10n.of(context); final theme = Theme.of(context); - final pinned = controller.room.pinnedEventIds.contains( - controller.selectedEvents.first.eventId, - ); + final pinned = controller.selectedEvents.length == 1 && + controller.room.pinnedEventIds.contains( + controller.selectedEvents.first.eventId, + ); return Container( padding: const EdgeInsets.symmetric(horizontal: 10), decoration: BoxDecoration( From 3923ba8bd6d0645b695af14fdd08954319bdcc91 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 18 Jun 2025 15:33:44 -0400 Subject: [PATCH 2/2] chore: fix playing icon in phonestic transcription widget --- .../toolbar/controllers/tts_controller.dart | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/pangea/toolbar/controllers/tts_controller.dart b/lib/pangea/toolbar/controllers/tts_controller.dart index 32e575ae1..80ae1a080 100644 --- a/lib/pangea/toolbar/controllers/tts_controller.dart +++ b/lib/pangea/toolbar/controllers/tts_controller.dart @@ -35,7 +35,7 @@ class TtsController { static final StreamController loadingChoreoStream = StreamController.broadcast(); - static final audioPlayer = AudioPlayer(); + static AudioPlayer? audioPlayer; static bool get _useAlternativeTTS { return PlatformInfos.isWindows; @@ -122,7 +122,7 @@ class TtsController { // https://pub.dev/packages/flutter_tts final result = await (_useAlternativeTTS ? _alternativeTTS.stop() : _tts.stop()); - audioPlayer.stop(); + audioPlayer?.stop(); if (!_useAlternativeTTS && result != 1) { ErrorHandler.logError( @@ -173,8 +173,6 @@ class TtsController { onStart: onStart, onStop: onStop, ); - - onStop?.call(); } /// A safer version of speak, that handles the case of @@ -314,13 +312,15 @@ class TtsController { try { Logs().i('Speaking from choreo: $text, langCode: $langCode'); final audioContent = base64Decode(ttsRes.audioContent); - await audioPlayer.setAudioSource( + audioPlayer?.dispose(); + audioPlayer = AudioPlayer(); + await audioPlayer!.setAudioSource( BytesAudioSource( audioContent, ttsRes.mimeType, ), ); - await audioPlayer.play(); + await audioPlayer!.play(); } catch (e, s) { ErrorHandler.logError( e: 'Error playing audio', @@ -330,6 +330,9 @@ class TtsController { 'text': text, }, ); + } finally { + audioPlayer?.dispose(); + audioPlayer = null; } }