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
|
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].
|
* 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.RoomCategoryFilter
|
||||||
import org.matrix.android.sdk.api.query.RoomTagQueryFilter
|
import org.matrix.android.sdk.api.query.RoomTagQueryFilter
|
||||||
import org.matrix.android.sdk.api.query.SpaceFilter
|
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.Membership
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomType
|
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
|
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.
|
* [roomSummaryQueryParams] and [spaceSummaryQueryParams] can also be used to build an instance of this class.
|
||||||
*/
|
*/
|
||||||
data class RoomSummaryQueryParams(
|
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,
|
* 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].
|
* 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].
|
* [roomSummaryQueryParams] and [spaceSummaryQueryParams] can also be used to build an instance of [RoomSummaryQueryParams].
|
||||||
*/
|
*/
|
||||||
class Builder {
|
class Builder {
|
||||||
|
var roomId: QueryStringValue = QueryStringValue.NotContains(RoomLocalEcho.PREFIX)
|
||||||
var displayName: QueryStringValue = QueryStringValue.NoCondition
|
var displayName: QueryStringValue = QueryStringValue.NoCondition
|
||||||
var canonicalAlias: QueryStringValue = QueryStringValue.NoCondition
|
var canonicalAlias: QueryStringValue = QueryStringValue.NoCondition
|
||||||
var memberships: List<Membership> = Membership.all()
|
var memberships: List<Membership> = Membership.all()
|
||||||
@ -104,6 +111,7 @@ data class RoomSummaryQueryParams(
|
|||||||
var spaceFilter: SpaceFilter = SpaceFilter.NoFilter
|
var spaceFilter: SpaceFilter = SpaceFilter.NoFilter
|
||||||
|
|
||||||
fun build() = RoomSummaryQueryParams(
|
fun build() = RoomSummaryQueryParams(
|
||||||
|
roomId = roomId,
|
||||||
displayName = displayName,
|
displayName = displayName,
|
||||||
canonicalAlias = canonicalAlias,
|
canonicalAlias = canonicalAlias,
|
||||||
memberships = memberships,
|
memberships = memberships,
|
||||||
|
@ -20,7 +20,7 @@ import java.util.UUID
|
|||||||
|
|
||||||
object RoomLocalEcho {
|
object RoomLocalEcho {
|
||||||
|
|
||||||
private const val PREFIX = "!local."
|
const val PREFIX = "!local."
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tell whether the provider room id is a local id.
|
* Tell whether the provider room id is a local id.
|
||||||
|
@ -38,6 +38,7 @@ internal class QueryStringValueProcessor @Inject constructor(
|
|||||||
is ContentQueryStringValue -> when (queryStringValue) {
|
is ContentQueryStringValue -> when (queryStringValue) {
|
||||||
is QueryStringValue.Equals -> equalTo(field, queryStringValue.toRealmValue(), queryStringValue.case.toRealmCase())
|
is QueryStringValue.Equals -> equalTo(field, queryStringValue.toRealmValue(), queryStringValue.case.toRealmCase())
|
||||||
is QueryStringValue.Contains -> contains(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) {
|
val query = with(queryStringValueProcessor) {
|
||||||
RoomSummaryEntity.where(realm)
|
RoomSummaryEntity.where(realm)
|
||||||
.process(RoomSummaryEntityFields.ROOM_ID, QueryStringValue.IsNotEmpty)
|
.process(RoomSummaryEntityFields.ROOM_ID, QueryStringValue.IsNotEmpty)
|
||||||
|
.process(RoomSummaryEntityFields.ROOM_ID, queryParams.roomId)
|
||||||
.process(queryParams.displayName.toDisplayNameField(), queryParams.displayName)
|
.process(queryParams.displayName.toDisplayNameField(), queryParams.displayName)
|
||||||
.process(RoomSummaryEntityFields.CANONICAL_ALIAS, queryParams.canonicalAlias)
|
.process(RoomSummaryEntityFields.CANONICAL_ALIAS, queryParams.canonicalAlias)
|
||||||
.process(RoomSummaryEntityFields.MEMBERSHIP_STR, queryParams.memberships)
|
.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.getRoomSummary
|
||||||
import org.matrix.android.sdk.api.session.room.UpdatableLivePageResult
|
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.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.localecho.RoomLocalEcho
|
||||||
import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
|
import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
|
||||||
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
|
||||||
@ -127,20 +126,13 @@ class RoomListViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun observeLocalRooms() {
|
private fun observeLocalRooms() {
|
||||||
val queryParams = roomSummaryQueryParams {
|
|
||||||
memberships = listOf(Membership.JOIN)
|
|
||||||
}
|
|
||||||
session
|
session
|
||||||
.flow()
|
.flow()
|
||||||
.liveRoomSummaries(queryParams)
|
.liveRoomSummaries(roomSummaryQueryParams {
|
||||||
.map { roomSummaries ->
|
roomId = QueryStringValue.Contains(RoomLocalEcho.PREFIX)
|
||||||
roomSummaries.mapNotNull { summary ->
|
})
|
||||||
summary.roomId.takeIf { RoomLocalEcho.isLocalEchoId(it) }
|
.map { page -> page.map { it.roomId } }
|
||||||
}.toSet()
|
.setOnEach { copy(localRoomIds = it) }
|
||||||
}
|
|
||||||
.setOnEach { roomIds ->
|
|
||||||
copy(localRoomIds = roomIds)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object : MavericksViewModelFactory<RoomListViewModel, RoomListViewState> by hiltMavericksViewModelFactory()
|
companion object : MavericksViewModelFactory<RoomListViewModel, RoomListViewState> by hiltMavericksViewModelFactory()
|
||||||
@ -181,7 +173,7 @@ class RoomListViewModel @AssistedInject constructor(
|
|||||||
return session.getRoom(roomId)?.stateService()?.isPublic().orFalse()
|
return session.getRoom(roomId)?.stateService()?.isPublic().orFalse()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun deleteLocalRooms(roomsIds: Set<String>) {
|
fun deleteLocalRooms(roomsIds: List<String>) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
roomsIds.forEach {
|
roomsIds.forEach {
|
||||||
session.roomService().deleteLocalRoom(it)
|
session.roomService().deleteLocalRoom(it)
|
||||||
|
@ -31,7 +31,7 @@ data class RoomListViewState(
|
|||||||
val asyncSuggestedRooms: Async<List<SpaceChildInfo>> = Uninitialized,
|
val asyncSuggestedRooms: Async<List<SpaceChildInfo>> = Uninitialized,
|
||||||
val currentUserName: String? = null,
|
val currentUserName: String? = null,
|
||||||
val asyncSelectedSpace: Async<RoomSummary?> = Uninitialized,
|
val asyncSelectedSpace: Async<RoomSummary?> = Uninitialized,
|
||||||
val localRoomIds: Set<String> = emptySet()
|
val localRoomIds: List<String> = emptyList()
|
||||||
) : MavericksState {
|
) : MavericksState {
|
||||||
|
|
||||||
constructor(args: RoomListParams) : this(displayMode = args.displayMode)
|
constructor(args: RoomListParams) : this(displayMode = args.displayMode)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user