diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt index 32f4b860c4..c2528ca6d5 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt @@ -30,9 +30,12 @@ import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.roomNotificationSettings import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch +import timber.log.Timber import javax.inject.Inject class RoomNotificationSettingsPresenter @Inject constructor( @@ -73,8 +76,9 @@ class RoomNotificationSettingsPresenter @Inject constructor( } private fun CoroutineScope.observeNotificationSettings() { - notificationSettingsService.notificationSettingsChangeFlow.onEach { - room.updateRoomNotificationSettings() + notificationSettingsService.notificationSettingsChangeFlow.buffer(Channel.UNLIMITED).onEach { + //room.updateRoomNotificationSettings() + Timber.d("emit is called") }.launchIn(this) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixModule.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixModule.kt index 476f1c3421..1159f668e6 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixModule.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixModule.kt @@ -36,13 +36,11 @@ object SessionMatrixModule { } @Provides - @SingleIn(SessionScope::class) fun providesNotificationSettingsService(matrixClient: MatrixClient): NotificationSettingsService { return matrixClient.notificationSettingsService() } @Provides - @SingleIn(SessionScope::class) fun provideRoomMembershipObserver(matrixClient: MatrixClient): RoomMembershipObserver { return matrixClient.roomMembershipObserver() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notificationsettings/RustNotificationSettingsService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notificationsettings/RustNotificationSettingsService.kt index 4ba2f2642e..e8342952a9 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notificationsettings/RustNotificationSettingsService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notificationsettings/RustNotificationSettingsService.kt @@ -20,22 +20,32 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.notificationsettings.NotificationSettingsService import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.RoomNotificationSettings +import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.asSharedFlow import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.NotificationSettings import org.matrix.rustcomponents.sdk.NotificationSettingsDelegate +import timber.log.Timber class RustNotificationSettingsService( private val client: Client, -) : NotificationSettingsService, NotificationSettingsDelegate { +) : NotificationSettingsService { private val notificationSettings: NotificationSettings = client.getNotificationSettings() - private val _notificationSettingsChangeFlow = MutableSharedFlow() + private val _notificationSettingsChangeFlow = MutableSharedFlow(onBufferOverflow = BufferOverflow.DROP_OLDEST) override val notificationSettingsChangeFlow: SharedFlow = _notificationSettingsChangeFlow.asSharedFlow() + private var notificationSettingsDelegate = object : NotificationSettingsDelegate { + override fun settingsDidChange() { + Timber.d("emit ${_notificationSettingsChangeFlow.subscriptionCount.value}") + val ok = _notificationSettingsChangeFlow.tryEmit(Unit) + Timber.d("emit $ok") + } + } + // override val notificationSettingsChangeFlow = callbackFlow { // val delegate = object:NotificationSettingsDelegate { // override fun notificationSettingsDidChange() { @@ -50,7 +60,7 @@ class RustNotificationSettingsService( // }.buffer(Channel.UNLIMITED) init { - notificationSettings.setDelegate(this) + notificationSettings.setDelegate(notificationSettingsDelegate) } override suspend fun getRoomNotificationSettings(roomId: RoomId, isEncrypted: Boolean, membersCount: ULong): Result = @@ -79,8 +89,4 @@ class RustNotificationSettingsService( runCatching { notificationSettings.unmuteRoom(roomId.value, isEncrypted, membersCount) } - - override fun settingsDidChange() { - _notificationSettingsChangeFlow.tryEmit(Unit) - } }