From 10401a7685fc60870e2566fb073d92f9abb1bdf2 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 29 Jan 2025 17:02:25 -0500 Subject: [PATCH] fix: give each token in HWL activity uses its unique form, use tokens in example messages to get token offset (#1639) --- .../vocab_definition_popup.dart | 43 +++++++++++++------ .../practice_activity_record_model.dart | 2 +- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart index 59122b760..9e2235032 100644 --- a/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_definition_popup.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:collection/collection.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:matrix/matrix.dart'; @@ -17,6 +18,7 @@ import 'package:fluffychat/pangea/analytics/repo/lemma_info_request.dart'; import 'package:fluffychat/pangea/analytics/repo/lemma_info_response.dart'; import 'package:fluffychat/pangea/analytics/utils/get_grammar_copy.dart'; import 'package:fluffychat/pangea/common/widgets/customized_svg.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_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/learning_settings/constants/language_constants.dart'; @@ -329,21 +331,36 @@ class LemmaUseExampleMessages extends StatelessWidget { } final Room? room = MatrixState.pangeaController.matrixState.client .getRoomById(use.metadata.roomId); + if (room == null) continue; - final Event? event = await room?.getEventById(use.metadata.eventId!); - final String? messageText = event?.text; - - if (messageText != null && messageText.contains(use.form!)) { - final int offset = messageText.indexOf(use.form!); - examples.add( - ExampleMessage( - message: messageText, - offset: offset, - length: use.form!.length, - ), - ); - if (examples.length > 4) break; + Timeline? timeline = room.timeline; + if (room.timeline == null) { + timeline = await room.getTimeline(); } + + final Event? event = await room.getEventById(use.metadata.eventId!); + if (event == null) continue; + final PangeaMessageEvent pangeaMessageEvent = PangeaMessageEvent( + event: event, + timeline: timeline!, + ownMessage: event.senderId == + MatrixState.pangeaController.matrixState.client.userID, + ); + final tokens = pangeaMessageEvent.messageDisplayRepresentation?.tokens; + if (tokens == null || tokens.isEmpty) continue; + final token = + tokens.firstWhereOrNull((token) => token.text.content == use.form); + if (token == null) continue; + + final int offset = token.text.offset; + examples.add( + ExampleMessage( + message: pangeaMessageEvent.messageDisplayText, + offset: offset, + length: use.form!.length, + ), + ); + if (examples.length > 4) break; } return examples.toList(); diff --git a/lib/pangea/toolbar/models/practice_activity_record_model.dart b/lib/pangea/toolbar/models/practice_activity_record_model.dart index a09e29995..83e1999ef 100644 --- a/lib/pangea/toolbar/models/practice_activity_record_model.dart +++ b/lib/pangea/toolbar/models/practice_activity_record_model.dart @@ -204,7 +204,7 @@ class ActivityRecordResponse { .map( (token) => OneConstructUse( lemma: token.lemma.text, - form: practiceActivity.targetTokens!.first.text.content, + form: token.text.content, constructType: ConstructTypeEnum.vocab, useType: useType(practiceActivity.activityType), metadata: metadata,