if room lastEvent has hidden word activity, hide the hidden tokens in the chat list item subtitle (#1317)

pull/1544/head
ggurdin 10 months ago committed by GitHub
parent 60a3587c8f
commit 129c5a5a7a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -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<PangeaToken> tokens,
List<PangeaToken> 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<String> 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);

Loading…
Cancel
Save