From 4a2a8bf7bda1b79e1d3856d12c296a364e6b6f94 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Thu, 7 Nov 2024 12:47:43 -0500 Subject: [PATCH] convert choreo record into morph GA uses on send --- lib/pages/chat/chat.dart | 17 +++++-- lib/pangea/enum/construct_use_type_enum.dart | 4 +- lib/pangea/models/pangea_match_model.dart | 2 +- .../models/representation_content_model.dart | 51 +++++++++++++++++++ 4 files changed, 67 insertions(+), 7 deletions(-) diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 071c5f10c..2d47def1b 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -683,11 +683,18 @@ class ChatController extends State AnalyticsStream( eventId: msgEventId, roomId: room.id, - constructs: originalSent!.vocabUses( - choreo: choreo, - tokens: tokensSent!.tokens, - metadata: metadata, - ), + constructs: [ + ...originalSent!.vocabUses( + choreo: choreo, + tokens: tokensSent!.tokens, + metadata: metadata, + ), + ...originalSent.morphConstructUses( + choreo: choreo, + tokens: tokensSent.tokens, + metadata: metadata, + ), + ], origin: AnalyticsUpdateOrigin.sendMessage, ), ); diff --git a/lib/pangea/enum/construct_use_type_enum.dart b/lib/pangea/enum/construct_use_type_enum.dart index 196cf89b4..cb6b2a257 100644 --- a/lib/pangea/enum/construct_use_type_enum.dart +++ b/lib/pangea/enum/construct_use_type_enum.dart @@ -100,7 +100,6 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.corWL: return 3; - case ConstructUseTypeEnum.ga: case ConstructUseTypeEnum.corIGC: return 2; @@ -115,6 +114,9 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.nan: return 0; + case ConstructUseTypeEnum.ga: + return -1; + case ConstructUseTypeEnum.incIt: case ConstructUseTypeEnum.incIGC: return -2; diff --git a/lib/pangea/models/pangea_match_model.dart b/lib/pangea/models/pangea_match_model.dart index 827816890..b27221e1a 100644 --- a/lib/pangea/models/pangea_match_model.dart +++ b/lib/pangea/models/pangea_match_model.dart @@ -108,7 +108,7 @@ class PangeaMatch { } bool isOffsetInMatchSpan(int offset) => - offset >= match.offset && offset <= match.offset + match.length; + offset >= match.offset && offset < match.offset + match.length; Color get underlineColor { switch (match.rule?.id ?? "unknown") { diff --git a/lib/pangea/models/representation_content_model.dart b/lib/pangea/models/representation_content_model.dart index 9c6f57c19..2d6bbb714 100644 --- a/lib/pangea/models/representation_content_model.dart +++ b/lib/pangea/models/representation_content_model.dart @@ -131,6 +131,57 @@ class PangeaRepresentation { return uses; } + List morphConstructUses({ + required List tokens, + Event? event, + ConstructUseMetaData? metadata, + ChoreoRecord? choreo, + }) { + final List uses = []; + + if (event?.roomId == null && metadata?.roomId == null) { + return uses; + } + + if (choreo == null) { + return uses; + } + + metadata ??= ConstructUseMetaData( + roomId: event!.roomId!, + eventId: event.eventId, + timeStamp: event.originServerTs, + ); + + for (final step in choreo.choreoSteps) { + if (step.acceptedOrIgnoredMatch?.status == PangeaMatchStatus.accepted) { + final List tokensForMatch = []; + for (final token in tokens) { + if (step.acceptedOrIgnoredMatch!.isOffsetInMatchSpan( + token.text.offset, + )) { + tokensForMatch.add(token); + } + } + + for (final token in tokensForMatch) { + token.morph.forEach((key, value) { + uses.add( + OneConstructUse( + useType: ConstructUseTypeEnum.ga, + lemma: value, + categories: [key], + constructType: ConstructTypeEnum.morph, + metadata: metadata!, + ), + ); + }); + } + } + } + return uses; + } + /// Returns a [OneConstructUse] for the given [token] /// If there is no [choreo], the [token] is /// considered to be a [ConstructUseTypeEnum.wa] as long as it matches the target language.