From 8c2cd7d0223204f616f49b3fd96c3a9e093cf9cd Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 14 Jan 2026 11:04:42 -0500 Subject: [PATCH] fix: add push rule to block notifications for analytics room invites (#5190) --- .../client_analytics_extension.dart | 8 +++++++ .../events/constants/pangea_event_types.dart | 2 ++ .../analytics_request_indicator.dart | 10 +++++++- .../user/pangea_push_rules_extension.dart | 23 +++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/pangea/analytics_misc/client_analytics_extension.dart b/lib/pangea/analytics_misc/client_analytics_extension.dart index e4d36c11d..05bc2a25a 100644 --- a/lib/pangea/analytics_misc/client_analytics_extension.dart +++ b/lib/pangea/analytics_misc/client_analytics_extension.dart @@ -76,6 +76,14 @@ extension AnalyticsClientExtension on Client { topic: "This room stores learning analytics for $userID.", preset: CreateRoomPreset.publicChat, visibility: Visibility.private, + initialState: [ + StateEvent( + type: EventTypes.RoomJoinRules, + content: { + ModelKey.joinRule: JoinRules.knock.name, + }, + ), + ], ); if (getRoomById(roomID) == null) { // Wait for room actually appears in sync diff --git a/lib/pangea/events/constants/pangea_event_types.dart b/lib/pangea/events/constants/pangea_event_types.dart index bf5570f52..80fbd1323 100644 --- a/lib/pangea/events/constants/pangea_event_types.dart +++ b/lib/pangea/events/constants/pangea_event_types.dart @@ -33,6 +33,8 @@ class PangeaEventTypes { static const String report = 'm.report'; static const textToSpeechRule = "p.rule.text_to_speech"; + static const analyticsInviteRule = "p.rule.analytics_invite"; + static const analyticsInviteContent = "p.analytics_request"; /// A request to the server to generate activities static const activityRequest = "pangea.activity_req"; diff --git a/lib/pangea/space_analytics/analytics_request_indicator.dart b/lib/pangea/space_analytics/analytics_request_indicator.dart index 060403cdd..87b269e80 100644 --- a/lib/pangea/space_analytics/analytics_request_indicator.dart +++ b/lib/pangea/space_analytics/analytics_request_indicator.dart @@ -8,6 +8,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_misc/client_analytics_extension.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics_requested_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -91,7 +92,14 @@ class AnalyticsRequestIndicatorState extends State { final rooms = entry.value; final List futures = rooms - .map((room) => resp ? room.invite(user.id) : room.kick(user.id)) + .map( + (room) => resp + ? room.invite( + user.id, + reason: PangeaEventTypes.analyticsInviteContent, + ) + : room.kick(user.id), + ) .toList(); await Future.wait(futures); diff --git a/lib/pangea/user/pangea_push_rules_extension.dart b/lib/pangea/user/pangea_push_rules_extension.dart index ca670f69b..c7e92462a 100644 --- a/lib/pangea/user/pangea_push_rules_extension.dart +++ b/lib/pangea/user/pangea_push_rules_extension.dart @@ -16,6 +16,29 @@ extension PangeaPushRulesExtension on Client { } } + if (!(globalPushRules?.override?.any( + (element) => element.ruleId == PangeaEventTypes.analyticsInviteRule, + ) ?? + false)) { + await setPushRule( + PushRuleKind.override, + PangeaEventTypes.analyticsInviteRule, + [PushRuleAction.dontNotify], + conditions: [ + PushCondition( + kind: 'event_match', + key: 'type', + pattern: EventTypes.RoomMember, + ), + PushCondition( + kind: 'event_match', + key: 'content.reason', + pattern: PangeaEventTypes.analyticsInviteContent, + ), + ], + ); + } + if (!(globalPushRules?.override?.any( (element) => element.ruleId == PangeaEventTypes.textToSpeechRule, ) ??