Merge pull request #3076 from Dominaezzz/suspend_functions_7
Convert UserService to suspend functions
This commit is contained in:
commit
c15e2e96b6
@ -20,6 +20,7 @@ import androidx.paging.PagedList
|
|||||||
import io.reactivex.Observable
|
import io.reactivex.Observable
|
||||||
import io.reactivex.Single
|
import io.reactivex.Single
|
||||||
import io.reactivex.functions.Function3
|
import io.reactivex.functions.Function3
|
||||||
|
import kotlinx.coroutines.rx2.rxSingle
|
||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
import org.matrix.android.sdk.api.query.QueryStringValue
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
@ -129,8 +130,8 @@ class RxSession(private val session: Session) {
|
|||||||
|
|
||||||
fun searchUsersDirectory(search: String,
|
fun searchUsersDirectory(search: String,
|
||||||
limit: Int,
|
limit: Int,
|
||||||
excludedUserIds: Set<String>): Single<List<User>> = singleBuilder {
|
excludedUserIds: Set<String>): Single<List<User>> = rxSingle {
|
||||||
session.searchUsersDirectory(search, limit, excludedUserIds, it)
|
session.searchUsersDirectory(search, limit, excludedUserIds)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun joinRoom(roomIdOrAlias: String,
|
fun joinRoom(roomIdOrAlias: String,
|
||||||
|
@ -18,9 +18,7 @@ package org.matrix.android.sdk.api.session.user
|
|||||||
|
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.paging.PagedList
|
import androidx.paging.PagedList
|
||||||
import org.matrix.android.sdk.api.MatrixCallback
|
|
||||||
import org.matrix.android.sdk.api.session.user.model.User
|
import org.matrix.android.sdk.api.session.user.model.User
|
||||||
import org.matrix.android.sdk.api.util.Cancelable
|
|
||||||
import org.matrix.android.sdk.api.util.Optional
|
import org.matrix.android.sdk.api.util.Optional
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -38,17 +36,16 @@ interface UserService {
|
|||||||
/**
|
/**
|
||||||
* Try to resolve user from known users, or using profile api
|
* Try to resolve user from known users, or using profile api
|
||||||
*/
|
*/
|
||||||
fun resolveUser(userId: String, callback: MatrixCallback<User>)
|
suspend fun resolveUser(userId: String): User
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search list of users on server directory.
|
* Search list of users on server directory.
|
||||||
* @param search the searched term
|
* @param search the searched term
|
||||||
* @param limit the max number of users to return
|
* @param limit the max number of users to return
|
||||||
* @param excludedUserIds the user ids to filter from the search
|
* @param excludedUserIds the user ids to filter from the search
|
||||||
* @param callback the async callback
|
|
||||||
* @return Cancelable
|
* @return Cancelable
|
||||||
*/
|
*/
|
||||||
fun searchUsersDirectory(search: String, limit: Int, excludedUserIds: Set<String>, callback: MatrixCallback<List<User>>): Cancelable
|
suspend fun searchUsersDirectory(search: String, limit: Int, excludedUserIds: Set<String>): List<User>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Observe a live user from a userId
|
* Observe a live user from a userId
|
||||||
@ -79,10 +76,10 @@ interface UserService {
|
|||||||
/**
|
/**
|
||||||
* Ignore users
|
* Ignore users
|
||||||
*/
|
*/
|
||||||
fun ignoreUserIds(userIds: List<String>, callback: MatrixCallback<Unit>): Cancelable
|
suspend fun ignoreUserIds(userIds: List<String>)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Un-ignore some users
|
* Un-ignore some users
|
||||||
*/
|
*/
|
||||||
fun unIgnoreUserIds(userIds: List<String>, callback: MatrixCallback<Unit>): Cancelable
|
suspend fun unIgnoreUserIds(userIds: List<String>)
|
||||||
}
|
}
|
||||||
|
@ -18,54 +18,35 @@ package org.matrix.android.sdk.internal.session.user
|
|||||||
|
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.paging.PagedList
|
import androidx.paging.PagedList
|
||||||
import org.matrix.android.sdk.api.MatrixCallback
|
|
||||||
import org.matrix.android.sdk.api.session.profile.ProfileService
|
import org.matrix.android.sdk.api.session.profile.ProfileService
|
||||||
import org.matrix.android.sdk.api.session.user.UserService
|
import org.matrix.android.sdk.api.session.user.UserService
|
||||||
import org.matrix.android.sdk.api.session.user.model.User
|
import org.matrix.android.sdk.api.session.user.model.User
|
||||||
import org.matrix.android.sdk.api.util.Cancelable
|
|
||||||
import org.matrix.android.sdk.api.util.JsonDict
|
|
||||||
import org.matrix.android.sdk.api.util.Optional
|
import org.matrix.android.sdk.api.util.Optional
|
||||||
import org.matrix.android.sdk.internal.session.profile.GetProfileInfoTask
|
import org.matrix.android.sdk.internal.session.profile.GetProfileInfoTask
|
||||||
import org.matrix.android.sdk.internal.session.user.accountdata.UpdateIgnoredUserIdsTask
|
import org.matrix.android.sdk.internal.session.user.accountdata.UpdateIgnoredUserIdsTask
|
||||||
import org.matrix.android.sdk.internal.session.user.model.SearchUserTask
|
import org.matrix.android.sdk.internal.session.user.model.SearchUserTask
|
||||||
import org.matrix.android.sdk.internal.task.TaskExecutor
|
|
||||||
import org.matrix.android.sdk.internal.task.configureWith
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
internal class DefaultUserService @Inject constructor(private val userDataSource: UserDataSource,
|
internal class DefaultUserService @Inject constructor(private val userDataSource: UserDataSource,
|
||||||
private val searchUserTask: SearchUserTask,
|
private val searchUserTask: SearchUserTask,
|
||||||
private val updateIgnoredUserIdsTask: UpdateIgnoredUserIdsTask,
|
private val updateIgnoredUserIdsTask: UpdateIgnoredUserIdsTask,
|
||||||
private val getProfileInfoTask: GetProfileInfoTask,
|
private val getProfileInfoTask: GetProfileInfoTask) : UserService {
|
||||||
private val taskExecutor: TaskExecutor) : UserService {
|
|
||||||
|
|
||||||
override fun getUser(userId: String): User? {
|
override fun getUser(userId: String): User? {
|
||||||
return userDataSource.getUser(userId)
|
return userDataSource.getUser(userId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolveUser(userId: String, callback: MatrixCallback<User>) {
|
override suspend fun resolveUser(userId: String): User {
|
||||||
val known = getUser(userId)
|
val known = getUser(userId)
|
||||||
if (known != null) {
|
if (known != null) {
|
||||||
callback.onSuccess(known)
|
return known
|
||||||
} else {
|
} else {
|
||||||
val params = GetProfileInfoTask.Params(userId)
|
val params = GetProfileInfoTask.Params(userId)
|
||||||
getProfileInfoTask
|
val data = getProfileInfoTask.execute(params)
|
||||||
.configureWith(params) {
|
return User(
|
||||||
this.callback = object : MatrixCallback<JsonDict> {
|
userId,
|
||||||
override fun onSuccess(data: JsonDict) {
|
data[ProfileService.DISPLAY_NAME_KEY] as? String,
|
||||||
callback.onSuccess(
|
data[ProfileService.AVATAR_URL_KEY] as? String)
|
||||||
User(
|
|
||||||
userId,
|
|
||||||
data[ProfileService.DISPLAY_NAME_KEY] as? String,
|
|
||||||
data[ProfileService.AVATAR_URL_KEY] as? String)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onFailure(failure: Throwable) {
|
|
||||||
callback.onFailure(failure)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.executeBy(taskExecutor)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,33 +66,20 @@ internal class DefaultUserService @Inject constructor(private val userDataSource
|
|||||||
return userDataSource.getIgnoredUsersLive()
|
return userDataSource.getIgnoredUsersLive()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchUsersDirectory(search: String,
|
override suspend fun searchUsersDirectory(search: String,
|
||||||
limit: Int,
|
limit: Int,
|
||||||
excludedUserIds: Set<String>,
|
excludedUserIds: Set<String>): List<User> {
|
||||||
callback: MatrixCallback<List<User>>): Cancelable {
|
|
||||||
val params = SearchUserTask.Params(limit, search, excludedUserIds)
|
val params = SearchUserTask.Params(limit, search, excludedUserIds)
|
||||||
return searchUserTask
|
return searchUserTask.execute(params)
|
||||||
.configureWith(params) {
|
|
||||||
this.callback = callback
|
|
||||||
}
|
|
||||||
.executeBy(taskExecutor)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun ignoreUserIds(userIds: List<String>, callback: MatrixCallback<Unit>): Cancelable {
|
override suspend fun ignoreUserIds(userIds: List<String>) {
|
||||||
val params = UpdateIgnoredUserIdsTask.Params(userIdsToIgnore = userIds.toList())
|
val params = UpdateIgnoredUserIdsTask.Params(userIdsToIgnore = userIds.toList())
|
||||||
return updateIgnoredUserIdsTask
|
updateIgnoredUserIdsTask.execute(params)
|
||||||
.configureWith(params) {
|
|
||||||
this.callback = callback
|
|
||||||
}
|
|
||||||
.executeBy(taskExecutor)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun unIgnoreUserIds(userIds: List<String>, callback: MatrixCallback<Unit>): Cancelable {
|
override suspend fun unIgnoreUserIds(userIds: List<String>) {
|
||||||
val params = UpdateIgnoredUserIdsTask.Params(userIdsToUnIgnore = userIds.toList())
|
val params = UpdateIgnoredUserIdsTask.Params(userIdsToUnIgnore = userIds.toList())
|
||||||
return updateIgnoredUserIdsTask
|
updateIgnoredUserIdsTask.execute(params)
|
||||||
.configureWith(params) {
|
|
||||||
this.callback = callback
|
|
||||||
}
|
|
||||||
.executeBy(taskExecutor)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1275,15 +1275,15 @@ class RoomDetailViewModel @AssistedInject constructor(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
session.ignoreUserIds(listOf(action.userId), object : MatrixCallback<Unit> {
|
viewModelScope.launch {
|
||||||
override fun onSuccess(data: Unit) {
|
val event = try {
|
||||||
_viewEvents.post(RoomDetailViewEvents.ActionSuccess(action))
|
session.ignoreUserIds(listOf(action.userId))
|
||||||
|
RoomDetailViewEvents.ActionSuccess(action)
|
||||||
|
} catch (failure: Throwable) {
|
||||||
|
RoomDetailViewEvents.ActionFailure(action, failure)
|
||||||
}
|
}
|
||||||
|
_viewEvents.post(event)
|
||||||
override fun onFailure(failure: Throwable) {
|
}
|
||||||
_viewEvents.post(RoomDetailViewEvents.ActionFailure(action, failure))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleAcceptVerification(action: RoomDetailAction.AcceptVerificationRequest) {
|
private fun handleAcceptVerification(action: RoomDetailAction.AcceptVerificationRequest) {
|
||||||
|
@ -41,7 +41,6 @@ import org.matrix.android.sdk.api.session.permalinks.PermalinkData
|
|||||||
import org.matrix.android.sdk.api.session.permalinks.PermalinkParser
|
import org.matrix.android.sdk.api.session.permalinks.PermalinkParser
|
||||||
import org.matrix.android.sdk.api.session.user.model.User
|
import org.matrix.android.sdk.api.session.user.model.User
|
||||||
import org.matrix.android.sdk.api.util.toMatrixItem
|
import org.matrix.android.sdk.api.util.toMatrixItem
|
||||||
import org.matrix.android.sdk.internal.util.awaitCallback
|
|
||||||
|
|
||||||
class MatrixToBottomSheetViewModel @AssistedInject constructor(
|
class MatrixToBottomSheetViewModel @AssistedInject constructor(
|
||||||
@Assisted initialState: MatrixToBottomSheetState,
|
@Assisted initialState: MatrixToBottomSheetState,
|
||||||
@ -101,11 +100,7 @@ class MatrixToBottomSheetViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun resolveUser(userId: String): User {
|
private suspend fun resolveUser(userId: String): User {
|
||||||
return tryOrNull {
|
return tryOrNull { session.resolveUser(userId) }
|
||||||
awaitCallback<User> {
|
|
||||||
session.resolveUser(userId, it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Create raw user in case the user is not searchable
|
// Create raw user in case the user is not searchable
|
||||||
?: User(userId, null, null)
|
?: User(userId, null, null)
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,6 @@ import io.reactivex.functions.BiFunction
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.matrix.android.sdk.api.MatrixCallback
|
|
||||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
import org.matrix.android.sdk.api.query.QueryStringValue
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||||
@ -321,19 +320,18 @@ class RoomMemberProfileViewModel @AssistedInject constructor(@Assisted private v
|
|||||||
private fun handleIgnoreAction() = withState { state ->
|
private fun handleIgnoreAction() = withState { state ->
|
||||||
val isIgnored = state.isIgnored() ?: return@withState
|
val isIgnored = state.isIgnored() ?: return@withState
|
||||||
_viewEvents.post(RoomMemberProfileViewEvents.Loading())
|
_viewEvents.post(RoomMemberProfileViewEvents.Loading())
|
||||||
val ignoreActionCallback = object : MatrixCallback<Unit> {
|
viewModelScope.launch {
|
||||||
override fun onSuccess(data: Unit) {
|
val event = try {
|
||||||
_viewEvents.post(RoomMemberProfileViewEvents.OnIgnoreActionSuccess)
|
if (isIgnored) {
|
||||||
|
session.unIgnoreUserIds(listOf(state.userId))
|
||||||
|
} else {
|
||||||
|
session.ignoreUserIds(listOf(state.userId))
|
||||||
|
}
|
||||||
|
RoomMemberProfileViewEvents.OnIgnoreActionSuccess
|
||||||
|
} catch (failure: Throwable) {
|
||||||
|
RoomMemberProfileViewEvents.Failure(failure)
|
||||||
}
|
}
|
||||||
|
_viewEvents.post(event)
|
||||||
override fun onFailure(failure: Throwable) {
|
|
||||||
_viewEvents.post(RoomMemberProfileViewEvents.Failure(failure))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isIgnored) {
|
|
||||||
session.unIgnoreUserIds(listOf(state.userId), ignoreActionCallback)
|
|
||||||
} else {
|
|
||||||
session.ignoreUserIds(listOf(state.userId), ignoreActionCallback)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package im.vector.app.features.settings.ignored
|
package im.vector.app.features.settings.ignored
|
||||||
|
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.airbnb.mvrx.Async
|
import com.airbnb.mvrx.Async
|
||||||
import com.airbnb.mvrx.Fail
|
import com.airbnb.mvrx.Fail
|
||||||
import com.airbnb.mvrx.FragmentViewModelContext
|
import com.airbnb.mvrx.FragmentViewModelContext
|
||||||
@ -30,7 +31,7 @@ import dagger.assisted.AssistedInject
|
|||||||
import dagger.assisted.AssistedFactory
|
import dagger.assisted.AssistedFactory
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.platform.VectorViewModelAction
|
import im.vector.app.core.platform.VectorViewModelAction
|
||||||
import org.matrix.android.sdk.api.MatrixCallback
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.user.model.User
|
import org.matrix.android.sdk.api.session.user.model.User
|
||||||
import org.matrix.android.sdk.rx.rx
|
import org.matrix.android.sdk.rx.rx
|
||||||
@ -89,24 +90,14 @@ class IgnoredUsersViewModel @AssistedInject constructor(@Assisted initialState:
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
session.unIgnoreUserIds(listOf(action.userId), object : MatrixCallback<Unit> {
|
viewModelScope.launch {
|
||||||
override fun onFailure(failure: Throwable) {
|
val result = runCatching { session.unIgnoreUserIds(listOf(action.userId)) }
|
||||||
setState {
|
setState {
|
||||||
copy(
|
copy(
|
||||||
unIgnoreRequest = Fail(failure)
|
unIgnoreRequest = result.fold(::Success, ::Fail)
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
_viewEvents.post(IgnoredUsersViewEvents.Failure(failure))
|
|
||||||
}
|
}
|
||||||
|
result.onFailure { _viewEvents.post(IgnoredUsersViewEvents.Failure(it)) }
|
||||||
override fun onSuccess(data: Unit) {
|
}
|
||||||
setState {
|
|
||||||
copy(
|
|
||||||
unIgnoreRequest = Success(data)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,6 @@ import org.matrix.android.sdk.api.session.permalinks.PermalinkData
|
|||||||
import org.matrix.android.sdk.api.session.permalinks.PermalinkParser
|
import org.matrix.android.sdk.api.session.permalinks.PermalinkParser
|
||||||
import org.matrix.android.sdk.api.session.user.model.User
|
import org.matrix.android.sdk.api.session.user.model.User
|
||||||
import org.matrix.android.sdk.api.util.toMatrixItem
|
import org.matrix.android.sdk.api.util.toMatrixItem
|
||||||
import org.matrix.android.sdk.internal.util.awaitCallback
|
|
||||||
|
|
||||||
class UserCodeSharedViewModel @AssistedInject constructor(
|
class UserCodeSharedViewModel @AssistedInject constructor(
|
||||||
@Assisted val initialState: UserCodeState,
|
@Assisted val initialState: UserCodeState,
|
||||||
@ -126,11 +125,7 @@ class UserCodeSharedViewModel @AssistedInject constructor(
|
|||||||
_viewEvents.post(UserCodeShareViewEvents.ToastMessage(stringProvider.getString(R.string.not_implemented)))
|
_viewEvents.post(UserCodeShareViewEvents.ToastMessage(stringProvider.getString(R.string.not_implemented)))
|
||||||
}
|
}
|
||||||
is PermalinkData.UserLink -> {
|
is PermalinkData.UserLink -> {
|
||||||
val user = tryOrNull {
|
val user = tryOrNull { session.resolveUser(linkedId.userId) }
|
||||||
awaitCallback<User> {
|
|
||||||
session.resolveUser(linkedId.userId, it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Create raw Uxid in case the user is not searchable
|
// Create raw Uxid in case the user is not searchable
|
||||||
?: User(linkedId.userId, null, null)
|
?: User(linkedId.userId, null, null)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user