From ca18c83d53e7ac9444273be282c6020c90130750 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 30 Jul 2024 17:38:51 +0200 Subject: [PATCH] Sync on push : call room.subscribeToSync when notifiable event is received --- libraries/push/impl/build.gradle.kts | 1 + .../push/impl/push/OnNotifiableEventReceived.kt | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/libraries/push/impl/build.gradle.kts b/libraries/push/impl/build.gradle.kts index 8970f1e3d0..02dacbde34 100644 --- a/libraries/push/impl/build.gradle.kts +++ b/libraries/push/impl/build.gradle.kts @@ -56,6 +56,7 @@ dependencies { implementation(projects.libraries.uiStrings) implementation(projects.libraries.troubleshoot.api) implementation(projects.features.call.api) + implementation(projects.libraries.featureflag.api) api(projects.libraries.pushproviders.api) api(projects.libraries.pushstore.api) api(projects.libraries.push.api) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt index cdcc6a1d93..eb6a6da8df 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt @@ -18,6 +18,9 @@ package io.element.android.libraries.push.impl.push import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.di.AppScope +import io.element.android.libraries.featureflag.api.FeatureFlagService +import io.element.android.libraries.featureflag.api.FeatureFlags +import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.push.impl.notifications.DefaultNotificationDrawerManager import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent import kotlinx.coroutines.CoroutineScope @@ -32,10 +35,23 @@ interface OnNotifiableEventReceived { class DefaultOnNotifiableEventReceived @Inject constructor( private val defaultNotificationDrawerManager: DefaultNotificationDrawerManager, private val coroutineScope: CoroutineScope, + private val matrixClientProvider: MatrixClientProvider, + private val featureFlagService: FeatureFlagService, ) : OnNotifiableEventReceived { override fun onNotifiableEventReceived(notifiableEvent: NotifiableEvent) { coroutineScope.launch { + subscribeToRoomIfNeeded(notifiableEvent) defaultNotificationDrawerManager.onNotifiableEventReceived(notifiableEvent) } } + + private fun CoroutineScope.subscribeToRoomIfNeeded(notifiableEvent: NotifiableEvent) = launch { + if (!featureFlagService.isFeatureEnabled(FeatureFlags.SyncOnPush)) { + return@launch + } + val client = matrixClientProvider.getOrRestore(notifiableEvent.sessionId).getOrNull() ?: return@launch + client.getRoom(notifiableEvent.roomId)?.use { room -> + room.subscribeToSync() + } + } }