From c845c971d6dc213d8b4a06da99f8315e4e759bd6 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 11 Dec 2024 14:34:19 -0500 Subject: [PATCH] open roomID on click notification (#1216) --- lib/utils/background_push.dart | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/lib/utils/background_push.dart b/lib/utils/background_push.dart index 1370d79c6..e836d0b16 100644 --- a/lib/utils/background_push.dart +++ b/lib/utils/background_push.dart @@ -83,6 +83,8 @@ class BackgroundPush { // #Pangea onLogin ??= client.onLoginStateChanged.stream.listen(handleLoginStateChanged); + FirebaseMessaging.instance.getInitialMessage().then(_onOpenNotification); + FirebaseMessaging.onMessageOpenedApp.listen(_onOpenNotification); // Pangea# await _flutterLocalNotificationsPlugin.initialize( const InitializationSettings( @@ -123,6 +125,35 @@ class BackgroundPush { _init(); } + // #Pangea + Future _onOpenNotification(RemoteMessage? message) async { + if (message == null || + !message.data.containsKey('room_id') || + message.data['room_id'] == null || + message.data['room_id'].isEmpty) { + return; + } + + try { + final roomId = message.data['room_id']; + await client.roomsLoading; + await client.accountDataLoading; + if (client.getRoomById(roomId) == null) { + await client + .waitForRoomInSync(roomId) + .timeout(const Duration(seconds: 30)); + } + FluffyChatApp.router.go( + client.getRoomById(roomId)?.membership == Membership.invite + ? '/rooms' + : '/rooms/$roomId', + ); + } catch (err, s) { + ErrorHandler.logError(e: err, s: s); + } + } + // Pangea# + factory BackgroundPush.clientOnly(Client client) { return _instance ??= BackgroundPush._(client); }