diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 7dd0a735e..15b29ecee 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -770,6 +770,7 @@ class ChatListController extends State await pangeaController.subscriptionController.initialize(); pangeaController.afterSyncAndFirstLoginInitialization(context); await pangeaController.inviteBotToExistingSpaces(); + await pangeaController.setPangeaPushRules(); } else { ErrorHandler.logError( m: "didn't run afterSyncAndFirstLoginInitialization because not mounted", diff --git a/lib/pangea/constants/pangea_event_types.dart b/lib/pangea/constants/pangea_event_types.dart index abd155460..6494843c9 100644 --- a/lib/pangea/constants/pangea_event_types.dart +++ b/lib/pangea/constants/pangea_event_types.dart @@ -18,4 +18,5 @@ class PangeaEventTypes { static const botOptions = "pangea.bot_options"; static const userAge = "pangea.user_age"; + static const textToSpeechRule = "p.rule.text_to_speech"; } diff --git a/lib/pangea/controllers/pangea_controller.dart b/lib/pangea/controllers/pangea_controller.dart index 86946f314..a258d107a 100644 --- a/lib/pangea/controllers/pangea_controller.dart +++ b/lib/pangea/controllers/pangea_controller.dart @@ -2,6 +2,7 @@ import 'dart:developer'; import 'dart:math'; import 'package:fluffychat/pangea/constants/class_default_values.dart'; +import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/controllers/class_controller.dart'; import 'package:fluffychat/pangea/controllers/contextual_definition_controller.dart'; import 'package:fluffychat/pangea/controllers/language_controller.dart'; @@ -243,4 +244,35 @@ class PangeaController { } } } + + Future setPangeaPushRules() async { + if (!(matrixState.client.globalPushRules?.override?.any( + (element) => element.ruleId == PangeaEventTypes.textToSpeechRule, + ) ?? + false)) { + await matrixState.client.setPushRule( + 'global', + PushRuleKind.override, + PangeaEventTypes.textToSpeechRule, + [PushRuleAction.dontNotify], + conditions: [ + PushCondition( + kind: 'event_match', + key: 'content.msgtype', + pattern: MessageTypes.Audio, + ), + PushCondition( + kind: 'event_match', + key: 'content.transcription.lang_code', + pattern: '*', + ), + PushCondition( + kind: 'event_match', + key: 'content.transcription.text', + pattern: '*', + ), + ], + ); + } + } } diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index e6d47e13b..665528b49 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -4,6 +4,7 @@ import 'dart:convert'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; +import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/utils/any_state_holder.dart'; import 'package:fluffychat/utils/client_manager.dart'; @@ -372,7 +373,11 @@ class MatrixState extends State with WidgetsBindingObserver { e.type == EventUpdateType.timeline && [EventTypes.Message, EventTypes.Sticker, EventTypes.Encrypted] .contains(e.content['type']) && - e.content['sender'] != c.userID, + e.content['sender'] != c.userID + // #Pangea + && + !e.content['content']?.containsKey(ModelKey.transcription), + // Pangea#, ) .listen(showLocalNotification); });