mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-15 01:35:07 +08:00
Start DM - Fix glitch by not showing the local rooms in the room list
This commit is contained in:
parent
7982f4be00
commit
3b1599763c
@ -68,6 +68,11 @@ sealed interface QueryStringValue {
|
||||
*/
|
||||
data class Contains(override val string: String, override val case: Case = Case.SENSITIVE) : ContentQueryStringValue
|
||||
|
||||
/**
|
||||
* The tested field must not contain the [string].
|
||||
*/
|
||||
data class NotContains(override val string: String, override val case: Case = Case.SENSITIVE) : ContentQueryStringValue
|
||||
|
||||
/**
|
||||
* Case enum for [ContentQueryStringValue].
|
||||
*/
|
||||
|
@ -20,8 +20,10 @@ import org.matrix.android.sdk.api.query.QueryStringValue
|
||||
import org.matrix.android.sdk.api.query.RoomCategoryFilter
|
||||
import org.matrix.android.sdk.api.query.RoomTagQueryFilter
|
||||
import org.matrix.android.sdk.api.query.SpaceFilter
|
||||
import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams.Builder
|
||||
import org.matrix.android.sdk.api.session.room.model.Membership
|
||||
import org.matrix.android.sdk.api.session.room.model.RoomType
|
||||
import org.matrix.android.sdk.api.session.room.model.localecho.RoomLocalEcho
|
||||
import org.matrix.android.sdk.api.session.space.SpaceSummaryQueryParams
|
||||
|
||||
/**
|
||||
@ -52,6 +54,10 @@ fun spaceSummaryQueryParams(init: (RoomSummaryQueryParams.Builder.() -> Unit) =
|
||||
* [roomSummaryQueryParams] and [spaceSummaryQueryParams] can also be used to build an instance of this class.
|
||||
*/
|
||||
data class RoomSummaryQueryParams(
|
||||
/**
|
||||
* Query for the roomId.
|
||||
*/
|
||||
val roomId: QueryStringValue,
|
||||
/**
|
||||
* Query for the displayName of the room. The display name can be the value of the state event,
|
||||
* or a value returned by [org.matrix.android.sdk.api.RoomDisplayNameFallbackProvider].
|
||||
@ -94,6 +100,7 @@ data class RoomSummaryQueryParams(
|
||||
* [roomSummaryQueryParams] and [spaceSummaryQueryParams] can also be used to build an instance of [RoomSummaryQueryParams].
|
||||
*/
|
||||
class Builder {
|
||||
var roomId: QueryStringValue = QueryStringValue.NotContains(RoomLocalEcho.PREFIX)
|
||||
var displayName: QueryStringValue = QueryStringValue.NoCondition
|
||||
var canonicalAlias: QueryStringValue = QueryStringValue.NoCondition
|
||||
var memberships: List<Membership> = Membership.all()
|
||||
@ -104,6 +111,7 @@ data class RoomSummaryQueryParams(
|
||||
var spaceFilter: SpaceFilter = SpaceFilter.NoFilter
|
||||
|
||||
fun build() = RoomSummaryQueryParams(
|
||||
roomId = roomId,
|
||||
displayName = displayName,
|
||||
canonicalAlias = canonicalAlias,
|
||||
memberships = memberships,
|
||||
|
@ -20,7 +20,7 @@ import java.util.UUID
|
||||
|
||||
object RoomLocalEcho {
|
||||
|
||||
private const val PREFIX = "!local."
|
||||
const val PREFIX = "!local."
|
||||
|
||||
/**
|
||||
* Tell whether the provider room id is a local id.
|
||||
|
@ -38,6 +38,7 @@ internal class QueryStringValueProcessor @Inject constructor(
|
||||
is ContentQueryStringValue -> when (queryStringValue) {
|
||||
is QueryStringValue.Equals -> equalTo(field, queryStringValue.toRealmValue(), queryStringValue.case.toRealmCase())
|
||||
is QueryStringValue.Contains -> contains(field, queryStringValue.toRealmValue(), queryStringValue.case.toRealmCase())
|
||||
is QueryStringValue.NotContains -> not().process(field, QueryStringValue.Contains(queryStringValue.string, queryStringValue.case))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -272,6 +272,7 @@ internal class RoomSummaryDataSource @Inject constructor(
|
||||
val query = with(queryStringValueProcessor) {
|
||||
RoomSummaryEntity.where(realm)
|
||||
.process(RoomSummaryEntityFields.ROOM_ID, QueryStringValue.IsNotEmpty)
|
||||
.process(RoomSummaryEntityFields.ROOM_ID, queryParams.roomId)
|
||||
.process(queryParams.displayName.toDisplayNameField(), queryParams.displayName)
|
||||
.process(RoomSummaryEntityFields.CANONICAL_ALIAS, queryParams.canonicalAlias)
|
||||
.process(RoomSummaryEntityFields.MEMBERSHIP_STR, queryParams.memberships)
|
||||
|
@ -47,7 +47,6 @@ import org.matrix.android.sdk.api.session.getRoom
|
||||
import org.matrix.android.sdk.api.session.getRoomSummary
|
||||
import org.matrix.android.sdk.api.session.room.UpdatableLivePageResult
|
||||
import org.matrix.android.sdk.api.session.room.members.ChangeMembershipState
|
||||
import org.matrix.android.sdk.api.session.room.model.Membership
|
||||
import org.matrix.android.sdk.api.session.room.model.localecho.RoomLocalEcho
|
||||
import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
|
||||
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
||||
@ -127,20 +126,13 @@ class RoomListViewModel @AssistedInject constructor(
|
||||
}
|
||||
|
||||
private fun observeLocalRooms() {
|
||||
val queryParams = roomSummaryQueryParams {
|
||||
memberships = listOf(Membership.JOIN)
|
||||
}
|
||||
session
|
||||
.flow()
|
||||
.liveRoomSummaries(queryParams)
|
||||
.map { roomSummaries ->
|
||||
roomSummaries.mapNotNull { summary ->
|
||||
summary.roomId.takeIf { RoomLocalEcho.isLocalEchoId(it) }
|
||||
}.toSet()
|
||||
}
|
||||
.setOnEach { roomIds ->
|
||||
copy(localRoomIds = roomIds)
|
||||
}
|
||||
.liveRoomSummaries(roomSummaryQueryParams {
|
||||
roomId = QueryStringValue.Contains(RoomLocalEcho.PREFIX)
|
||||
})
|
||||
.map { page -> page.map { it.roomId } }
|
||||
.setOnEach { copy(localRoomIds = it) }
|
||||
}
|
||||
|
||||
companion object : MavericksViewModelFactory<RoomListViewModel, RoomListViewState> by hiltMavericksViewModelFactory()
|
||||
@ -181,7 +173,7 @@ class RoomListViewModel @AssistedInject constructor(
|
||||
return session.getRoom(roomId)?.stateService()?.isPublic().orFalse()
|
||||
}
|
||||
|
||||
fun deleteLocalRooms(roomsIds: Set<String>) {
|
||||
fun deleteLocalRooms(roomsIds: List<String>) {
|
||||
viewModelScope.launch {
|
||||
roomsIds.forEach {
|
||||
session.roomService().deleteLocalRoom(it)
|
||||
|
@ -31,7 +31,7 @@ data class RoomListViewState(
|
||||
val asyncSuggestedRooms: Async<List<SpaceChildInfo>> = Uninitialized,
|
||||
val currentUserName: String? = null,
|
||||
val asyncSelectedSpace: Async<RoomSummary?> = Uninitialized,
|
||||
val localRoomIds: Set<String> = emptySet()
|
||||
val localRoomIds: List<String> = emptyList()
|
||||
) : MavericksState {
|
||||
|
||||
constructor(args: RoomListParams) : this(displayMode = args.displayMode)
|
||||
|
Loading…
Reference in New Issue
Block a user