forked from GitHub-Mirror/riotX-android
Group/Room list : show filtered room when a group is selected
This commit is contained in:
@ -5,5 +5,6 @@ data class RoomSummary(
|
||||
val displayName: String = "",
|
||||
val topic: String = "",
|
||||
val avatarUrl: String = "",
|
||||
val isDirect: Boolean
|
||||
val isDirect: Boolean,
|
||||
val otherMemberIds: List<String> = emptyList()
|
||||
)
|
@ -12,7 +12,8 @@ object RoomSummaryMapper {
|
||||
roomSummaryEntity.displayName ?: "",
|
||||
roomSummaryEntity.topic ?: "",
|
||||
roomSummaryEntity.avatarUrl ?: "",
|
||||
roomSummaryEntity.isDirect
|
||||
roomSummaryEntity.isDirect,
|
||||
roomSummaryEntity.otherMemberIds.toList()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,8 @@ open class RoomSummaryEntity(@PrimaryKey var roomId: String = "",
|
||||
var joinedMembersCount: Int? = 0,
|
||||
var invitedMembersCount: Int? = 0,
|
||||
var isDirect: Boolean = false,
|
||||
var isLatestSelected: Boolean = false
|
||||
var isLatestSelected: Boolean = false,
|
||||
var otherMemberIds: RealmList<String> = RealmList()
|
||||
) : RealmObject() {
|
||||
|
||||
companion object
|
||||
|
@ -54,7 +54,7 @@ class SessionModule(private val sessionParams: SessionParams) : Module {
|
||||
}
|
||||
|
||||
scope(DefaultSession.SCOPE) {
|
||||
RoomSummaryUpdater(get(), get(), get(), get())
|
||||
RoomSummaryUpdater(get(), get(), get(), get(), sessionParams.credentials)
|
||||
}
|
||||
|
||||
scope(DefaultSession.SCOPE) {
|
||||
|
@ -6,6 +6,7 @@ import com.zhuinden.monarchy.Monarchy
|
||||
import im.vector.matrix.android.api.session.events.model.EventType
|
||||
import im.vector.matrix.android.api.session.room.Room
|
||||
import im.vector.matrix.android.api.session.room.model.RoomTopicContent
|
||||
import im.vector.matrix.android.internal.auth.data.Credentials
|
||||
import im.vector.matrix.android.internal.database.mapper.asDomain
|
||||
import im.vector.matrix.android.internal.database.model.EventEntity
|
||||
import im.vector.matrix.android.internal.database.model.RoomEntity
|
||||
@ -13,6 +14,7 @@ import im.vector.matrix.android.internal.database.model.RoomSummaryEntity
|
||||
import im.vector.matrix.android.internal.database.query.last
|
||||
import im.vector.matrix.android.internal.database.query.where
|
||||
import im.vector.matrix.android.internal.session.room.members.RoomDisplayNameResolver
|
||||
import im.vector.matrix.android.internal.session.room.members.RoomMembers
|
||||
import io.realm.Realm
|
||||
import io.realm.kotlin.createObject
|
||||
import timber.log.Timber
|
||||
@ -21,7 +23,8 @@ import java.util.concurrent.atomic.AtomicBoolean
|
||||
internal class RoomSummaryUpdater(private val monarchy: Monarchy,
|
||||
private val roomDisplayNameResolver: RoomDisplayNameResolver,
|
||||
private val roomAvatarResolver: RoomAvatarResolver,
|
||||
private val context: Context
|
||||
private val context: Context,
|
||||
private val credentials: Credentials
|
||||
) : Observer<Monarchy.ManagedChangeSet<RoomEntity>> {
|
||||
|
||||
private var isStarted = AtomicBoolean(false)
|
||||
@ -69,15 +72,19 @@ internal class RoomSummaryUpdater(private val monarchy: Monarchy,
|
||||
return
|
||||
}
|
||||
val roomSummary = RoomSummaryEntity.where(realm, room.roomId).findFirst()
|
||||
?: realm.createObject(room.roomId)
|
||||
?: realm.createObject(room.roomId)
|
||||
|
||||
val lastMessageEvent = EventEntity.where(realm, room.roomId, EventType.MESSAGE).last()
|
||||
val lastTopicEvent = EventEntity.where(realm, room.roomId, EventType.STATE_ROOM_TOPIC).last()?.asDomain()
|
||||
|
||||
val otherRoomMembers = RoomMembers(realm, room.roomId).getLoaded().filterKeys { it != credentials.userId }
|
||||
|
||||
roomSummary.displayName = roomDisplayNameResolver.resolve(context, room).toString()
|
||||
roomSummary.avatarUrl = roomAvatarResolver.resolve(room)
|
||||
roomSummary.topic = lastTopicEvent?.content<RoomTopicContent>()?.topic
|
||||
roomSummary.lastMessage = lastMessageEvent
|
||||
roomSummary.otherMemberIds.clear()
|
||||
roomSummary.otherMemberIds.addAll(otherRoomMembers.keys)
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user