Group/Room list : show filtered room when a group is selected

This commit is contained in:
ganfra
2018-11-07 12:17:10 +01:00
parent 3028710122
commit cd25232572
12 changed files with 61 additions and 16 deletions

View File

@ -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()
)

View File

@ -12,7 +12,8 @@ object RoomSummaryMapper {
roomSummaryEntity.displayName ?: "",
roomSummaryEntity.topic ?: "",
roomSummaryEntity.avatarUrl ?: "",
roomSummaryEntity.isDirect
roomSummaryEntity.isDirect,
roomSummaryEntity.otherMemberIds.toList()
)
}
}

View File

@ -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

View File

@ -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) {

View File

@ -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)
}
}