Rebase on develop
This commit is contained in:
parent
3e8a536c0d
commit
bfb6bd9d08
3 changed files with 19 additions and 11 deletions
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue