Skip to content

Commit cde6e8c

Browse files
authored
Merge pull request #4057 from vector-im/feature/bca/quick_invite_card_improvement
Improve invite bottom sheet
2 parents b5fadaa + eb104d8 commit cde6e8c

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

changelog.d/4057.feature

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Improve space invite bottom sheet

vector/src/main/java/im/vector/app/features/spaces/invite/SpaceInviteBottomSheetViewModel.kt

+33-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package im.vector.app.features.spaces.invite
1818

19+
import androidx.lifecycle.viewModelScope
1920
import com.airbnb.mvrx.ActivityViewModelContext
2021
import com.airbnb.mvrx.Fail
2122
import com.airbnb.mvrx.FragmentViewModelContext
@@ -32,7 +33,11 @@ import im.vector.app.core.platform.VectorViewModel
3233
import im.vector.app.features.session.coroutineScope
3334
import kotlinx.coroutines.Dispatchers
3435
import kotlinx.coroutines.launch
36+
import org.matrix.android.sdk.api.extensions.tryOrNull
3537
import org.matrix.android.sdk.api.session.Session
38+
import org.matrix.android.sdk.api.session.room.model.Membership
39+
import org.matrix.android.sdk.api.session.room.model.RoomSummary
40+
import org.matrix.android.sdk.api.session.room.peeking.PeekResult
3641

3742
class SpaceInviteBottomSheetViewModel @AssistedInject constructor(
3843
@Assisted private val initialState: SpaceInviteBottomSheetState,
@@ -42,7 +47,6 @@ class SpaceInviteBottomSheetViewModel @AssistedInject constructor(
4247

4348
init {
4449
session.getRoomSummary(initialState.spaceId)?.let { roomSummary ->
45-
4650
val knownMembers = roomSummary.otherMemberIds.filter {
4751
session.getExistingDirectRoomWithUser(it) != null
4852
}.mapNotNull { session.getUser(it) }
@@ -57,6 +61,34 @@ class SpaceInviteBottomSheetViewModel @AssistedInject constructor(
5761
peopleYouKnow = Success(peopleYouKnow)
5862
)
5963
}
64+
if (roomSummary.membership == Membership.INVITE) {
65+
getLatestRoomSummary(roomSummary)
66+
}
67+
}
68+
}
69+
70+
/**
71+
* Try to request the room summary api to get more info
72+
*/
73+
private fun getLatestRoomSummary(roomSummary: RoomSummary) {
74+
viewModelScope.launch(Dispatchers.IO) {
75+
val peekResult = tryOrNull { session.peekRoom(roomSummary.roomId) } as? PeekResult.Success ?: return@launch
76+
setState {
77+
copy(
78+
summary = Success(
79+
roomSummary.copy(
80+
joinedMembersCount = peekResult.numJoinedMembers,
81+
// it's also possible that the name/avatar did change since the invite..
82+
// if it's null keep the old one as summary API might not be available
83+
// and peek result could be null for other reasons (not peekable)
84+
avatarUrl = peekResult.avatarUrl ?: roomSummary.avatarUrl,
85+
displayName = peekResult.name ?: roomSummary.displayName,
86+
topic = peekResult.topic ?: roomSummary.topic
87+
// maybe use someMembers field later?
88+
)
89+
)
90+
)
91+
}
6092
}
6193
}
6294

0 commit comments

Comments
 (0)