Fix wrong member count in join room screen for invitation (#4651)

* Fix typo

* Fix number of room member not correct for room invitation.

* Remove unneeded annotation

* Rename test classes.

* Add test about number of room members

Fix other tests.

* Avoid multiple request to get the room preview.
This commit is contained in:
Benoit Marty 2025-04-29 17:40:11 +02:00 committed by GitHub
parent d97473f42b
commit 2fc0c2f251
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 102 additions and 24 deletions

View file

@ -108,20 +108,25 @@ class JoinRoomPresenter @AssistedInject constructor(
when {
isDismissingContent -> value = ContentState.Dismissing
roomInfo.isPresent -> {
val notJoinedRoom = matrixClient.getRoomPreview(roomIdOrAlias, serverNames).getOrNull()
val (sender, reason) = when (roomInfo.get().currentUserMembership) {
CurrentUserMembership.BANNED -> {
// Workaround to get info about the sender for banned rooms
// TODO re-do this once we have a better API in the SDK
val preview = matrixClient.getRoomPreview(roomIdOrAlias, serverNames)
val membershipDetalis = preview.getOrNull()?.membershipDetails()?.getOrNull()
membershipDetalis?.senderMember to membershipDetalis?.currentUserMember?.membershipChangeReason
val membershipDetails = notJoinedRoom?.membershipDetails()?.getOrNull()
membershipDetails?.senderMember to membershipDetails?.currentUserMember?.membershipChangeReason
}
CurrentUserMembership.INVITED -> {
roomInfo.get().inviter to null
}
else -> null to null
}
value = roomInfo.get().toContentState(sender, reason)
val joinedMembersCountOverride = notJoinedRoom?.previewInfo?.numberOfJoinedMembers
value = roomInfo.get().toContentState(
membershipSender = sender,
joinedMembersCountOverride = joinedMembersCountOverride,
reason = reason,
)
}
roomDescription.isPresent -> {
value = roomDescription.get().toContentState()
@ -296,13 +301,17 @@ internal fun RoomDescription.toContentState(): ContentState {
}
@VisibleForTesting
internal fun RoomInfo.toContentState(membershipSender: RoomMember?, reason: String?): ContentState {
internal fun RoomInfo.toContentState(
membershipSender: RoomMember?,
joinedMembersCountOverride: Long?,
reason: String?,
): ContentState {
return ContentState.Loaded(
roomId = id,
name = name,
topic = topic,
alias = canonicalAlias,
numberOfMembers = joinedMembersCount,
numberOfMembers = joinedMembersCountOverride ?: joinedMembersCount,
isDm = isDm,
roomType = if (isSpace) RoomType.Space else RoomType.Room,
roomAvatarUrl = avatarUrl,