|
|
|
|
@ -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);
|
|
|
|
|
|
|
|
|
|
|