diff --git a/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt b/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt index 4f96d07f66db2f4d6b32a15bf89189651a56f1ee..c1f407d144dcee506ce9641b340eda376cd51371 100644 --- a/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt +++ b/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt @@ -47,15 +47,5 @@ fun Session.getUserIdsToExclude() = mutableListOf( fun Session.getServerDomain() = myUserId.substringAfter(":") -fun Session.getKnownUsersFlow() = - roomService().getRoomSummariesLive(roomSummaryQueryParams { excludeType = null }).asFlow() - .mapLatest { roomSummaries -> - val knowUsers = mutableSetOf<User>() - roomSummaries.forEach { summary -> - summary.otherMemberIds.forEach { knowUsers.add(getOrFetchUser(it)) } - } - knowUsers.toList().filterNot { getUserIdsToExclude().contains(it.userId) } - } - suspend fun Session.getOrFetchUser(userId: String): User = getUser(userId) ?: userService().resolveUser(userId) diff --git a/core/src/main/java/org/futo/circles/core/select_users/SearchUserDataSource.kt b/core/src/main/java/org/futo/circles/core/select_users/SearchUserDataSource.kt index 07c77fb7ab2c1192260f1a2865465285a026ed89..ccb777f32fef15e38a62ba3d1ee9c90416d50491 100644 --- a/core/src/main/java/org/futo/circles/core/select_users/SearchUserDataSource.kt +++ b/core/src/main/java/org/futo/circles/core/select_users/SearchUserDataSource.kt @@ -1,15 +1,19 @@ package org.futo.circles.core.select_users +import androidx.lifecycle.asFlow import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapLatest import org.futo.circles.core.extensions.Response import org.futo.circles.core.extensions.createResult -import org.futo.circles.core.extensions.getKnownUsersFlow +import org.futo.circles.core.extensions.getOrFetchUser import org.futo.circles.core.extensions.getServerDomain +import org.futo.circles.core.extensions.getUserIdsToExclude import org.futo.circles.core.provider.MatrixSessionProvider +import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.getRoom import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import org.matrix.android.sdk.api.session.user.model.User @@ -36,6 +40,16 @@ class SearchUserDataSource @Inject constructor() { } } ?: flowOf() + private fun Session.getKnownUsersFlow() = + roomService().getRoomSummariesLive(roomSummaryQueryParams { excludeType = null }).asFlow() + .mapLatest { roomSummaries -> + val knowUsers = mutableSetOf<User>() + roomSummaries.forEach { summary -> + summary.otherMemberIds.forEach { knowUsers.add(getOrFetchUser(it)) } + } + knowUsers.toList().filterNot { getUserIdsToExclude().contains(it.userId) } + } + suspend fun searchSuggestions( query: String, userIdsToExclude: Set<String> = emptySet() diff --git a/core/src/main/java/org/futo/circles/core/select_users/SelectUsersDataSource.kt b/core/src/main/java/org/futo/circles/core/select_users/SelectUsersDataSource.kt index 7b604713af9e614c177a4945dfe0a13f9f535beb..0b2eea4690fc54f5202d1bd280fd17ca29cfa68f 100644 --- a/core/src/main/java/org/futo/circles/core/select_users/SelectUsersDataSource.kt +++ b/core/src/main/java/org/futo/circles/core/select_users/SelectUsersDataSource.kt @@ -1,12 +1,15 @@ package org.futo.circles.core.select_users import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.asFlow import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.mapLatest +import org.futo.circles.core.extensions.getOrFetchUser import org.futo.circles.core.extensions.getUserIdsToExclude import org.futo.circles.core.mapping.toUserListItem import org.futo.circles.core.model.CirclesUserSummary @@ -17,9 +20,11 @@ import org.futo.circles.core.model.UserListItem import org.futo.circles.core.provider.MatrixSessionProvider import org.futo.circles.core.utils.UserUtils import org.matrix.android.sdk.api.MatrixPatterns +import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.getRoom import org.matrix.android.sdk.api.session.room.members.roomMemberQueryParams import org.matrix.android.sdk.api.session.room.model.Membership +import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import org.matrix.android.sdk.api.session.user.model.User import javax.inject.Inject