From f3281d87d2b9a341a2977c48e077ce90605a6688 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Thu, 26 Jun 2025 11:25:38 -0400 Subject: [PATCH] chore: if originalSent doesn't have tokens, don't include it in representations list because related token events cannot be sent to it --- .../event_wrappers/pangea_message_event.dart | 10 ++++++- .../widgets/message_selection_overlay.dart | 26 ++++--------------- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/lib/pangea/events/event_wrappers/pangea_message_event.dart b/lib/pangea/events/event_wrappers/pangea_message_event.dart index 0f01f2655..d0fff2281 100644 --- a/lib/pangea/events/event_wrappers/pangea_message_event.dart +++ b/lib/pangea/events/event_wrappers/pangea_message_event.dart @@ -396,7 +396,15 @@ class PangeaMessageEvent { ), ); } - _representations!.add(sent); + + // If originalSent has no tokens, there is not way to generate a tokens event + // and send it as a related event, since original sent has not eventID to set + // as parentEventId. In this case, it's better to generate a new representation + // with an eventID and send the related tokens event to that representation. + // This is a rare situation, and has only been seen with some bot messages. + if (sent.tokens != null) { + _representations!.add(sent); + } } catch (err, s) { ErrorHandler.logError( m: "error parsing originalSent", diff --git a/lib/pangea/toolbar/widgets/message_selection_overlay.dart b/lib/pangea/toolbar/widgets/message_selection_overlay.dart index 14da26467..d95fee56a 100644 --- a/lib/pangea/toolbar/widgets/message_selection_overlay.dart +++ b/lib/pangea/toolbar/widgets/message_selection_overlay.dart @@ -18,8 +18,6 @@ import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dar import 'package:fluffychat/pangea/events/event_wrappers/pangea_representation_event.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; @@ -135,7 +133,11 @@ class MessageOverlayController extends State RepresentationEvent? repEvent = pangeaMessageEvent?.messageDisplayRepresentation; - repEvent ??= await _fetchNewRepEvent(); + + if (repEvent == null || + (repEvent.event == null && repEvent.tokens == null)) { + repEvent = await _fetchNewRepEvent(); + } if (repEvent?.event != null) { await repEvent!.sendTokensEvent( @@ -145,24 +147,6 @@ class MessageOverlayController extends State MatrixState.pangeaController.languageController.userL2!.langCode, ); } - // If repEvent is originalSent but it's missing tokens, then fetch tokens. - // An edge case, but has happened with some bot message. - else if (repEvent != null && - repEvent.tokens == null && - repEvent.content.originalSent) { - final tokens = await repEvent.tokensGlobal( - pangeaMessageEvent!.senderId, - pangeaMessageEvent!.event.originServerTs, - ); - await pangeaMessageEvent!.room.pangeaSendTextEvent( - pangeaMessageEvent!.messageDisplayText, - editEventId: pangeaMessageEvent!.eventId, - originalSent: pangeaMessageEvent!.originalSent?.content, - originalWritten: pangeaMessageEvent!.originalWritten?.content, - tokensSent: PangeaMessageTokens(tokens: tokens), - choreo: pangeaMessageEvent!.originalSent?.choreo, - ); - } // Get all the lemma infos final messageVocabConstructIds = pangeaMessageEvent!