diff --git a/lib/pangea/analytics_misc/get_analytics_controller.dart b/lib/pangea/analytics_misc/get_analytics_controller.dart index 4a5b26817..4a5130158 100644 --- a/lib/pangea/analytics_misc/get_analytics_controller.dart +++ b/lib/pangea/analytics_misc/get_analytics_controller.dart @@ -19,6 +19,7 @@ import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_repo.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_selection_repo.dart'; @@ -486,11 +487,11 @@ class GetAnalyticsController extends BaseController { // compute construct use of current level final List constructUseOfCurrentLevel = []; - int score = 0; + int score = constructListModel.totalXP; for (final use in constructListModel.uses) { constructUseOfCurrentLevel.add(use); - score += use.xp; - if (score >= diffXP) break; + score -= use.xp; + if (score <= minXP) break; } // extract construct use message bodies for analytics @@ -502,19 +503,40 @@ class GetAnalyticsController extends BaseController { useEventIds[use.metadata.roomId!]!.add(use.metadata.eventId!); } - final List constructUseMessageContentBodies = []; + final List> messages = []; for (final entry in useEventIds.entries) { final String roomId = entry.key; final room = _client.getRoomById(roomId); if (room == null) continue; - final List messageBodies = []; + + final timeline = await room.getTimeline(); for (final eventId in entry.value) { try { final Event? event = await room.getEventById(eventId); - if (event?.content["body"] is! String) continue; - final String body = event?.content["body"] as String; - if (body.isEmpty) continue; - messageBodies.add(body); + if (event == null) continue; + final pangeaMessageEvent = PangeaMessageEvent( + event: event, + timeline: timeline, + ownMessage: room.client.userID == event.senderId, + ); + + final String? originalSent = pangeaMessageEvent.originalSent?.text; + String? originalWritten = originalSent; + if (pangeaMessageEvent.originalWritten != null && + !pangeaMessageEvent.originalWritten!.content.originalSent) { + originalWritten = pangeaMessageEvent.originalWritten!.text; + } else if (pangeaMessageEvent.originalSent?.choreo != null && + pangeaMessageEvent.originalSent!.choreo!.choreoSteps.isNotEmpty) { + final steps = pangeaMessageEvent.originalSent!.choreo!.choreoSteps; + originalWritten = steps.first.text; + } + + final Map entry = { + "sent": originalSent, + "written": originalWritten, + }; + + messages.add(entry); } catch (e, s) { debugPrint("Error getting event by ID: $e"); ErrorHandler.logError( @@ -528,13 +550,13 @@ class GetAnalyticsController extends BaseController { continue; } } - constructUseMessageContentBodies.addAll(messageBodies); } final request = ConstructSummaryRequest( constructs: constructUseOfCurrentLevel, - constructUseMessageContentBodies: constructUseMessageContentBodies, - language: _l1!.langCodeShort, + messages: messages, + userL1: _l1!.langCodeShort, + userL2: _l2!.langCodeShort, upperLevel: upperLevel, lowerLevel: lowerLevel, ); diff --git a/lib/pangea/constructs/construct_repo.dart b/lib/pangea/constructs/construct_repo.dart index d847f8168..8fe3bb917 100644 --- a/lib/pangea/constructs/construct_repo.dart +++ b/lib/pangea/constructs/construct_repo.dart @@ -66,15 +66,17 @@ class ConstructSummary { class ConstructSummaryRequest { final List constructs; - final List? constructUseMessageContentBodies; - final String language; + final List> messages; + final String userL1; + final String userL2; final int upperLevel; final int lowerLevel; ConstructSummaryRequest({ required this.constructs, - this.constructUseMessageContentBodies, - required this.language, + required this.messages, + required this.userL1, + required this.userL2, required this.upperLevel, required this.lowerLevel, }); @@ -82,25 +84,14 @@ class ConstructSummaryRequest { Map toJson() { return { 'constructs': constructs.map((construct) => construct.toJson()).toList(), - 'construct_use_message_content_bodies': constructUseMessageContentBodies, - 'language': language, + 'msgs': messages, + 'user_l1': userL1, + 'user_l2': userL2, + 'language': userL1, 'upper_level': upperLevel, 'lower_level': lowerLevel, }; } - - factory ConstructSummaryRequest.fromJson(Map json) { - return ConstructSummaryRequest( - constructs: (json['constructs'] as List) - .map((construct) => OneConstructUse.fromJson(construct)) - .toList(), - constructUseMessageContentBodies: - List.from(json['construct_use_message_content_bodies']), - language: json['language'], - upperLevel: json['upper_level'], - lowerLevel: json['lower_level'], - ); - } } class ConstructSummaryResponse {