Convert RoomPushRuleService to suspend functions

Signed-off-by: Dominic Fischer <dominicfischer7@gmail.com>
This commit is contained in:
Dominic Fischer 2020-11-08 12:44:46 +00:00
parent 413a55623e
commit 60ce351a27
4 changed files with 19 additions and 22 deletions

View File

@ -17,12 +17,10 @@
package org.matrix.android.sdk.api.session.room.notification package org.matrix.android.sdk.api.session.room.notification
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.util.Cancelable
interface RoomPushRuleService { interface RoomPushRuleService {
fun getLiveRoomNotificationState(): LiveData<RoomNotificationState> fun getLiveRoomNotificationState(): LiveData<RoomNotificationState>
fun setRoomNotificationState(roomNotificationState: RoomNotificationState, matrixCallback: MatrixCallback<Unit>): Cancelable suspend fun setRoomNotificationState(roomNotificationState: RoomNotificationState)
} }

View File

@ -21,21 +21,16 @@ import androidx.lifecycle.Transformations
import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.Assisted
import com.squareup.inject.assisted.AssistedInject import com.squareup.inject.assisted.AssistedInject
import com.zhuinden.monarchy.Monarchy import com.zhuinden.monarchy.Monarchy
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.pushrules.RuleScope import org.matrix.android.sdk.api.pushrules.RuleScope
import org.matrix.android.sdk.api.session.room.notification.RoomNotificationState import org.matrix.android.sdk.api.session.room.notification.RoomNotificationState
import org.matrix.android.sdk.api.session.room.notification.RoomPushRuleService import org.matrix.android.sdk.api.session.room.notification.RoomPushRuleService
import org.matrix.android.sdk.api.util.Cancelable
import org.matrix.android.sdk.internal.database.model.PushRuleEntity import org.matrix.android.sdk.internal.database.model.PushRuleEntity
import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.database.query.where
import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.di.SessionDatabase
import org.matrix.android.sdk.internal.task.TaskExecutor
import org.matrix.android.sdk.internal.task.configureWith
internal class DefaultRoomPushRuleService @AssistedInject constructor(@Assisted private val roomId: String, internal class DefaultRoomPushRuleService @AssistedInject constructor(@Assisted private val roomId: String,
private val setRoomNotificationStateTask: SetRoomNotificationStateTask, private val setRoomNotificationStateTask: SetRoomNotificationStateTask,
@SessionDatabase private val monarchy: Monarchy, @SessionDatabase private val monarchy: Monarchy)
private val taskExecutor: TaskExecutor)
: RoomPushRuleService { : RoomPushRuleService {
@AssistedInject.Factory @AssistedInject.Factory
@ -49,12 +44,8 @@ internal class DefaultRoomPushRuleService @AssistedInject constructor(@Assisted
} }
} }
override fun setRoomNotificationState(roomNotificationState: RoomNotificationState, matrixCallback: MatrixCallback<Unit>): Cancelable { override suspend fun setRoomNotificationState(roomNotificationState: RoomNotificationState) {
return setRoomNotificationStateTask setRoomNotificationStateTask.execute(SetRoomNotificationStateTask.Params(roomId, roomNotificationState))
.configureWith(SetRoomNotificationStateTask.Params(roomId, roomNotificationState)) {
this.callback = matrixCallback
}
.executeBy(taskExecutor)
} }
private fun getPushRuleForRoom(): LiveData<RoomPushRule?> { private fun getPushRuleForRoom(): LiveData<RoomPushRule?> {

View File

@ -36,6 +36,7 @@ import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
import org.matrix.android.sdk.internal.util.awaitCallback import org.matrix.android.sdk.internal.util.awaitCallback
import org.matrix.android.sdk.rx.rx import org.matrix.android.sdk.rx.rx
import timber.log.Timber import timber.log.Timber
import java.lang.Exception
import javax.inject.Inject import javax.inject.Inject
class RoomListViewModel @Inject constructor(initialState: RoomListViewState, class RoomListViewModel @Inject constructor(initialState: RoomListViewState,
@ -169,11 +170,16 @@ class RoomListViewModel @Inject constructor(initialState: RoomListViewState,
} }
private fun handleChangeNotificationMode(action: RoomListAction.ChangeRoomNotificationState) { private fun handleChangeNotificationMode(action: RoomListAction.ChangeRoomNotificationState) {
session.getRoom(action.roomId)?.setRoomNotificationState(action.notificationState, object : MatrixCallback<Unit> { val room = session.getRoom(action.roomId)
override fun onFailure(failure: Throwable) { if (room != null) {
_viewEvents.post(RoomListViewEvents.Failure(failure)) viewModelScope.launch {
try {
room.setRoomNotificationState(action.notificationState)
} catch (failure: Exception) {
_viewEvents.post(RoomListViewEvents.Failure(failure))
}
} }
}) }
} }
private fun handleToggleTag(action: RoomListAction.ToggleTag) { private fun handleToggleTag(action: RoomListAction.ToggleTag) {

View File

@ -102,11 +102,13 @@ class RoomProfileViewModel @AssistedInject constructor(
} }
private fun handleChangeNotificationMode(action: RoomProfileAction.ChangeRoomNotificationState) { private fun handleChangeNotificationMode(action: RoomProfileAction.ChangeRoomNotificationState) {
room.setRoomNotificationState(action.notificationState, object : MatrixCallback<Unit> { viewModelScope.launch {
override fun onFailure(failure: Throwable) { try {
room.setRoomNotificationState(action.notificationState)
} catch (failure: Throwable) {
_viewEvents.post(RoomProfileViewEvents.Failure(failure)) _viewEvents.post(RoomProfileViewEvents.Failure(failure))
} }
}) }
} }
private fun handleLeaveRoom() { private fun handleLeaveRoom() {