mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-01 19:56:47 +01:00
Convert UserService to suspend functions
Signed-off-by: Dominic Fischer <dominicfischer7@gmail.com>
This commit is contained in:
parent
2045a164c1
commit
b9b755e6e1
@ -20,6 +20,7 @@ import androidx.paging.PagedList
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.functions.Function3
|
||||
import kotlinx.coroutines.rx2.rxSingle
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
||||
import org.matrix.android.sdk.api.session.Session
|
||||
@ -129,8 +130,8 @@ class RxSession(private val session: Session) {
|
||||
|
||||
fun searchUsersDirectory(search: String,
|
||||
limit: Int,
|
||||
excludedUserIds: Set<String>): Single<List<User>> = singleBuilder {
|
||||
session.searchUsersDirectory(search, limit, excludedUserIds, it)
|
||||
excludedUserIds: Set<String>): Single<List<User>> = rxSingle {
|
||||
session.searchUsersDirectory(search, limit, excludedUserIds)
|
||||
}
|
||||
|
||||
fun joinRoom(roomIdOrAlias: String,
|
||||
|
@ -18,9 +18,7 @@ package org.matrix.android.sdk.api.session.user
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
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.util.Cancelable
|
||||
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
|
||||
*/
|
||||
fun resolveUser(userId: String, callback: MatrixCallback<User>)
|
||||
suspend fun resolveUser(userId: String): User
|
||||
|
||||
/**
|
||||
* Search list of users on server directory.
|
||||
* @param search the searched term
|
||||
* @param limit the max number of users to return
|
||||
* @param excludedUserIds the user ids to filter from the search
|
||||
* @param callback the async callback
|
||||
* @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
|
||||
@ -79,10 +76,10 @@ interface UserService {
|
||||
/**
|
||||
* Ignore users
|
||||
*/
|
||||
fun ignoreUserIds(userIds: List<String>, callback: MatrixCallback<Unit>): Cancelable
|
||||
suspend fun ignoreUserIds(userIds: List<String>)
|
||||
|
||||
/**
|
||||
* 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.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.user.UserService
|
||||
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.internal.session.profile.GetProfileInfoTask
|
||||
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.task.TaskExecutor
|
||||
import org.matrix.android.sdk.internal.task.configureWith
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class DefaultUserService @Inject constructor(private val userDataSource: UserDataSource,
|
||||
private val searchUserTask: SearchUserTask,
|
||||
private val updateIgnoredUserIdsTask: UpdateIgnoredUserIdsTask,
|
||||
private val getProfileInfoTask: GetProfileInfoTask,
|
||||
private val taskExecutor: TaskExecutor) : UserService {
|
||||
private val getProfileInfoTask: GetProfileInfoTask) : UserService {
|
||||
|
||||
override fun getUser(userId: String): User? {
|
||||
return userDataSource.getUser(userId)
|
||||
}
|
||||
|
||||
override fun resolveUser(userId: String, callback: MatrixCallback<User>) {
|
||||
override suspend fun resolveUser(userId: String): User {
|
||||
val known = getUser(userId)
|
||||
if (known != null) {
|
||||
callback.onSuccess(known)
|
||||
return known
|
||||
} else {
|
||||
val params = GetProfileInfoTask.Params(userId)
|
||||
getProfileInfoTask
|
||||
.configureWith(params) {
|
||||
this.callback = object : MatrixCallback<JsonDict> {
|
||||
override fun onSuccess(data: JsonDict) {
|
||||
callback.onSuccess(
|
||||
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)
|
||||
val data = getProfileInfoTask.execute(params)
|
||||
return User(
|
||||
userId,
|
||||
data[ProfileService.DISPLAY_NAME_KEY] as? String,
|
||||
data[ProfileService.AVATAR_URL_KEY] as? String)
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,33 +66,20 @@ internal class DefaultUserService @Inject constructor(private val userDataSource
|
||||
return userDataSource.getIgnoredUsersLive()
|
||||
}
|
||||
|
||||
override fun searchUsersDirectory(search: String,
|
||||
limit: Int,
|
||||
excludedUserIds: Set<String>,
|
||||
callback: MatrixCallback<List<User>>): Cancelable {
|
||||
override suspend fun searchUsersDirectory(search: String,
|
||||
limit: Int,
|
||||
excludedUserIds: Set<String>): List<User> {
|
||||
val params = SearchUserTask.Params(limit, search, excludedUserIds)
|
||||
return searchUserTask
|
||||
.configureWith(params) {
|
||||
this.callback = callback
|
||||
}
|
||||
.executeBy(taskExecutor)
|
||||
return searchUserTask.execute(params)
|
||||
}
|
||||
|
||||
override fun ignoreUserIds(userIds: List<String>, callback: MatrixCallback<Unit>): Cancelable {
|
||||
override suspend fun ignoreUserIds(userIds: List<String>) {
|
||||
val params = UpdateIgnoredUserIdsTask.Params(userIdsToIgnore = userIds.toList())
|
||||
return updateIgnoredUserIdsTask
|
||||
.configureWith(params) {
|
||||
this.callback = callback
|
||||
}
|
||||
.executeBy(taskExecutor)
|
||||
updateIgnoredUserIdsTask.execute(params)
|
||||
}
|
||||
|
||||
override fun unIgnoreUserIds(userIds: List<String>, callback: MatrixCallback<Unit>): Cancelable {
|
||||
override suspend fun unIgnoreUserIds(userIds: List<String>) {
|
||||
val params = UpdateIgnoredUserIdsTask.Params(userIdsToUnIgnore = userIds.toList())
|
||||
return updateIgnoredUserIdsTask
|
||||
.configureWith(params) {
|
||||
this.callback = callback
|
||||
}
|
||||
.executeBy(taskExecutor)
|
||||
updateIgnoredUserIdsTask.execute(params)
|
||||
}
|
||||
}
|
||||
|
@ -1275,15 +1275,15 @@ class RoomDetailViewModel @AssistedInject constructor(
|
||||
return
|
||||
}
|
||||
|
||||
session.ignoreUserIds(listOf(action.userId), object : MatrixCallback<Unit> {
|
||||
override fun onSuccess(data: Unit) {
|
||||
_viewEvents.post(RoomDetailViewEvents.ActionSuccess(action))
|
||||
viewModelScope.launch {
|
||||
val event = try {
|
||||
session.ignoreUserIds(listOf(action.userId))
|
||||
RoomDetailViewEvents.ActionSuccess(action)
|
||||
} catch (failure: Throwable) {
|
||||
RoomDetailViewEvents.ActionFailure(action, failure)
|
||||
}
|
||||
|
||||
override fun onFailure(failure: Throwable) {
|
||||
_viewEvents.post(RoomDetailViewEvents.ActionFailure(action, failure))
|
||||
}
|
||||
})
|
||||
_viewEvents.post(event)
|
||||
}
|
||||
}
|
||||
|
||||
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.user.model.User
|
||||
import org.matrix.android.sdk.api.util.toMatrixItem
|
||||
import org.matrix.android.sdk.internal.util.awaitCallback
|
||||
|
||||
class MatrixToBottomSheetViewModel @AssistedInject constructor(
|
||||
@Assisted initialState: MatrixToBottomSheetState,
|
||||
@ -101,11 +100,7 @@ class MatrixToBottomSheetViewModel @AssistedInject constructor(
|
||||
}
|
||||
|
||||
private suspend fun resolveUser(userId: String): User {
|
||||
return tryOrNull {
|
||||
awaitCallback<User> {
|
||||
session.resolveUser(userId, it)
|
||||
}
|
||||
}
|
||||
return tryOrNull { session.resolveUser(userId) }
|
||||
// Create raw user in case the user is not searchable
|
||||
?: User(userId, null, null)
|
||||
}
|
||||
|
@ -37,7 +37,6 @@ import io.reactivex.functions.BiFunction
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
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.session.Session
|
||||
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 ->
|
||||
val isIgnored = state.isIgnored() ?: return@withState
|
||||
_viewEvents.post(RoomMemberProfileViewEvents.Loading())
|
||||
val ignoreActionCallback = object : MatrixCallback<Unit> {
|
||||
override fun onSuccess(data: Unit) {
|
||||
_viewEvents.post(RoomMemberProfileViewEvents.OnIgnoreActionSuccess)
|
||||
viewModelScope.launch {
|
||||
val event = try {
|
||||
if (isIgnored) {
|
||||
session.unIgnoreUserIds(listOf(state.userId))
|
||||
} else {
|
||||
session.ignoreUserIds(listOf(state.userId))
|
||||
}
|
||||
RoomMemberProfileViewEvents.OnIgnoreActionSuccess
|
||||
} catch (failure: Throwable) {
|
||||
RoomMemberProfileViewEvents.Failure(failure)
|
||||
}
|
||||
|
||||
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)
|
||||
_viewEvents.post(event)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
package im.vector.app.features.settings.ignored
|
||||
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.airbnb.mvrx.Async
|
||||
import com.airbnb.mvrx.Fail
|
||||
import com.airbnb.mvrx.FragmentViewModelContext
|
||||
@ -30,7 +31,7 @@ import dagger.assisted.AssistedInject
|
||||
import dagger.assisted.AssistedFactory
|
||||
import im.vector.app.core.platform.VectorViewModel
|
||||
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.user.model.User
|
||||
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> {
|
||||
override fun onFailure(failure: Throwable) {
|
||||
setState {
|
||||
copy(
|
||||
unIgnoreRequest = Fail(failure)
|
||||
)
|
||||
}
|
||||
|
||||
_viewEvents.post(IgnoredUsersViewEvents.Failure(failure))
|
||||
viewModelScope.launch {
|
||||
val result = runCatching { session.unIgnoreUserIds(listOf(action.userId)) }
|
||||
setState {
|
||||
copy(
|
||||
unIgnoreRequest = result.fold(::Success, ::Fail)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onSuccess(data: Unit) {
|
||||
setState {
|
||||
copy(
|
||||
unIgnoreRequest = Success(data)
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
result.onFailure { _viewEvents.post(IgnoredUsersViewEvents.Failure(it)) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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.user.model.User
|
||||
import org.matrix.android.sdk.api.util.toMatrixItem
|
||||
import org.matrix.android.sdk.internal.util.awaitCallback
|
||||
|
||||
class UserCodeSharedViewModel @AssistedInject constructor(
|
||||
@Assisted val initialState: UserCodeState,
|
||||
@ -126,11 +125,7 @@ class UserCodeSharedViewModel @AssistedInject constructor(
|
||||
_viewEvents.post(UserCodeShareViewEvents.ToastMessage(stringProvider.getString(R.string.not_implemented)))
|
||||
}
|
||||
is PermalinkData.UserLink -> {
|
||||
val user = tryOrNull {
|
||||
awaitCallback<User> {
|
||||
session.resolveUser(linkedId.userId, it)
|
||||
}
|
||||
}
|
||||
val user = tryOrNull { session.resolveUser(linkedId.userId) }
|
||||
// Create raw Uxid in case the user is not searchable
|
||||
?: User(linkedId.userId, null, null)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user