From 129c5a5a7a9f473d6366afe0cf525c9bd0ca2509 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Fri, 27 Dec 2024 15:32:40 -0500 Subject: [PATCH] if room lastEvent has hidden word activity, hide the hidden tokens in the chat list item subtitle (#1317) --- .../utils/get_chat_list_item_subtitle.dart | 69 ++++++++++++++++--- 1 file changed, 60 insertions(+), 9 deletions(-) diff --git a/lib/pangea/utils/get_chat_list_item_subtitle.dart b/lib/pangea/utils/get_chat_list_item_subtitle.dart index 3459a0d18..736d243b6 100644 --- a/lib/pangea/utils/get_chat_list_item_subtitle.dart +++ b/lib/pangea/utils/get_chat_list_item_subtitle.dart @@ -2,8 +2,9 @@ import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/constants/language_constants.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/enum/activity_type_enum.dart'; import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/models/space_model.dart'; +import 'package:fluffychat/pangea/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; @@ -24,6 +25,28 @@ class GetChatListItemSubtitle { event.type == EventTypes.SpaceChild || event.type == EventTypes.SpaceParent; + String _constructTokens( + List tokens, + List hiddenTokens, + ) { + String result = ""; + int currentPosition = 0; + for (final token in tokens) { + if (token.text.offset > currentPosition) { + result += " " * (token.text.offset - currentPosition); + currentPosition = token.text.offset; + } + + if (hiddenTokens.contains(token)) { + result += "_" * token.text.length; + } else { + result += token.text.content; + } + currentPosition += token.text.length; + } + return result; + } + Future getSubtitle( L10n l10n, Event? event, @@ -51,9 +74,7 @@ class GetChatListItemSubtitle { if (!pangeaController.languageController.languagesSet || event.redacted || event.type != EventTypes.Message || - event.messageType != MessageTypes.Text || - !pangeaController.permissionsController - .isToolEnabled(ToolSetting.immersionMode, event.room)) { + event.messageType != MessageTypes.Text) { return event.calcLocalizedBody( MatrixLocals(l10n), hideReply: true, @@ -68,18 +89,48 @@ class GetChatListItemSubtitle { final PangeaMessageEvent pangeaMessageEvent = PangeaMessageEvent( event: event, timeline: timeline, - ownMessage: false, + ownMessage: event.senderId == event.room.client.userID, ); + final l2Code = pangeaController.languageController.activeL2Code(); if (l2Code == null || l2Code == LanguageKeys.unknownLanguage) { return event.body; } final String? text = - (await pangeaMessageEvent.representationByLanguageGlobal( - langCode: l2Code, - )) - ?.text; + pangeaMessageEvent.messageDisplayRepresentation?.text; + + final tokens = + await pangeaMessageEvent.messageDisplayRepresentation?.tokensGlobal( + event.senderId, + event.originServerTs, + ); + + if (tokens != null) { + final analyticsEntry = pangeaController.getAnalytics.perMessage.get( + tokens, + pangeaMessageEvent, + ); + + if (analyticsEntry?.nextActivity?.activityType == + ActivityTypeEnum.hiddenWordListening) { + try { + return _constructTokens( + tokens, + analyticsEntry!.nextActivity!.tokens, + ); + } catch (err, s) { + ErrorHandler.logError( + e: err, + s: s, + data: { + "tokens": tokens, + "analyticsEntry": analyticsEntry, + }, + ); + } + } + } final i18n = MatrixLocals(l10n);