@@ -18,6 +18,9 @@ package io.element.android.libraries.push.impl.push
18
18
19
19
import com.squareup.anvil.annotations.ContributesBinding
20
20
import io.element.android.libraries.di.AppScope
21
+ import io.element.android.libraries.featureflag.api.FeatureFlagService
22
+ import io.element.android.libraries.featureflag.api.FeatureFlags
23
+ import io.element.android.libraries.matrix.api.MatrixClientProvider
21
24
import io.element.android.libraries.push.impl.notifications.DefaultNotificationDrawerManager
22
25
import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent
23
26
import kotlinx.coroutines.CoroutineScope
@@ -32,10 +35,23 @@ interface OnNotifiableEventReceived {
32
35
class DefaultOnNotifiableEventReceived @Inject constructor(
33
36
private val defaultNotificationDrawerManager : DefaultNotificationDrawerManager ,
34
37
private val coroutineScope : CoroutineScope ,
38
+ private val matrixClientProvider : MatrixClientProvider ,
39
+ private val featureFlagService : FeatureFlagService ,
35
40
) : OnNotifiableEventReceived {
36
41
override fun onNotifiableEventReceived (notifiableEvent : NotifiableEvent ) {
37
42
coroutineScope.launch {
43
+ subscribeToRoomIfNeeded(notifiableEvent)
38
44
defaultNotificationDrawerManager.onNotifiableEventReceived(notifiableEvent)
39
45
}
40
46
}
47
+
48
+ private fun CoroutineScope.subscribeToRoomIfNeeded (notifiableEvent : NotifiableEvent ) = launch {
49
+ if (! featureFlagService.isFeatureEnabled(FeatureFlags .SyncOnPush )) {
50
+ return @launch
51
+ }
52
+ val client = matrixClientProvider.getOrRestore(notifiableEvent.sessionId).getOrNull() ? : return @launch
53
+ client.getRoom(notifiableEvent.roomId)?.use { room ->
54
+ room.subscribeToSync()
55
+ }
56
+ }
41
57
}
0 commit comments