Rebase on develop

This commit is contained in:
yostyle 2023-07-19 15:12:20 +02:00
parent 3e8a536c0d
commit bfb6bd9d08
3 changed files with 19 additions and 11 deletions

View file

@ -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.RoomNotificationMode
import io.element.android.libraries.matrix.api.room.roomNotificationSettings import io.element.android.libraries.matrix.api.room.roomNotificationSettings
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.buffer
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
class RoomNotificationSettingsPresenter @Inject constructor( class RoomNotificationSettingsPresenter @Inject constructor(
@ -73,8 +76,9 @@ class RoomNotificationSettingsPresenter @Inject constructor(
} }
private fun CoroutineScope.observeNotificationSettings() { private fun CoroutineScope.observeNotificationSettings() {
notificationSettingsService.notificationSettingsChangeFlow.onEach { notificationSettingsService.notificationSettingsChangeFlow.buffer(Channel.UNLIMITED).onEach {
room.updateRoomNotificationSettings() //room.updateRoomNotificationSettings()
Timber.d("emit is called")
}.launchIn(this) }.launchIn(this)
} }

View file

@ -36,13 +36,11 @@ object SessionMatrixModule {
} }
@Provides @Provides
@SingleIn(SessionScope::class)
fun providesNotificationSettingsService(matrixClient: MatrixClient): NotificationSettingsService { fun providesNotificationSettingsService(matrixClient: MatrixClient): NotificationSettingsService {
return matrixClient.notificationSettingsService() return matrixClient.notificationSettingsService()
} }
@Provides @Provides
@SingleIn(SessionScope::class)
fun provideRoomMembershipObserver(matrixClient: MatrixClient): RoomMembershipObserver { fun provideRoomMembershipObserver(matrixClient: MatrixClient): RoomMembershipObserver {
return matrixClient.roomMembershipObserver() return matrixClient.roomMembershipObserver()
} }

View file

@ -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.notificationsettings.NotificationSettingsService
import io.element.android.libraries.matrix.api.room.RoomNotificationMode import io.element.android.libraries.matrix.api.room.RoomNotificationMode
import io.element.android.libraries.matrix.api.room.RoomNotificationSettings import io.element.android.libraries.matrix.api.room.RoomNotificationSettings
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asSharedFlow
import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.Client
import org.matrix.rustcomponents.sdk.NotificationSettings import org.matrix.rustcomponents.sdk.NotificationSettings
import org.matrix.rustcomponents.sdk.NotificationSettingsDelegate import org.matrix.rustcomponents.sdk.NotificationSettingsDelegate
import timber.log.Timber
class RustNotificationSettingsService( class RustNotificationSettingsService(
private val client: Client, private val client: Client,
) : NotificationSettingsService, NotificationSettingsDelegate { ) : NotificationSettingsService {
private val notificationSettings: NotificationSettings = client.getNotificationSettings() private val notificationSettings: NotificationSettings = client.getNotificationSettings()
private val _notificationSettingsChangeFlow = MutableSharedFlow<Unit>() private val _notificationSettingsChangeFlow = MutableSharedFlow<Unit>(onBufferOverflow = BufferOverflow.DROP_OLDEST)
override val notificationSettingsChangeFlow: SharedFlow<Unit> = _notificationSettingsChangeFlow.asSharedFlow() override val notificationSettingsChangeFlow: SharedFlow<Unit> = _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 { // override val notificationSettingsChangeFlow = callbackFlow {
// val delegate = object:NotificationSettingsDelegate { // val delegate = object:NotificationSettingsDelegate {
// override fun notificationSettingsDidChange() { // override fun notificationSettingsDidChange() {
@ -50,7 +60,7 @@ class RustNotificationSettingsService(
// }.buffer(Channel.UNLIMITED) // }.buffer(Channel.UNLIMITED)
init { init {
notificationSettings.setDelegate(this) notificationSettings.setDelegate(notificationSettingsDelegate)
} }
override suspend fun getRoomNotificationSettings(roomId: RoomId, isEncrypted: Boolean, membersCount: ULong): Result<RoomNotificationSettings> = override suspend fun getRoomNotificationSettings(roomId: RoomId, isEncrypted: Boolean, membersCount: ULong): Result<RoomNotificationSettings> =
@ -79,8 +89,4 @@ class RustNotificationSettingsService(
runCatching { runCatching {
notificationSettings.unmuteRoom(roomId.value, isEncrypted, membersCount) notificationSettings.unmuteRoom(roomId.value, isEncrypted, membersCount)
} }
override fun settingsDidChange() {
_notificationSettingsChangeFlow.tryEmit(Unit)
}
} }