Show a verification badge on the Room Member/User Profile screens. (#3427)

* Add a badge for verified users/room members.

* Reorder subviews.

* Add a (disabled) button to verify other users.

* PR comments.

* Update the SDK.

* Adopt the SDK changes introduced in matrix-rust-sdk/pull/4100

---------

Co-authored-by: Stefan Ceriu <stefan.ceriu@gmail.com>
This commit is contained in:
Doug
2024-10-21 16:07:19 +01:00
committed by GitHub
parent a0c81cf393
commit a4ea552a83
50 changed files with 522 additions and 275 deletions
@@ -43,25 +43,8 @@ class RoomMemberDetailsScreenViewModel: RoomMemberDetailsScreenViewModelType, Ro
showMemberLoadingIndicator()
Task {
defer {
hideMemberLoadingIndicator()
}
switch await roomProxy.getMember(userID: userID) {
case .success(let member):
roomMemberProxy = member
state.memberDetails = RoomMemberDetails(withProxy: member)
state.isOwnMemberDetails = member.userID == roomProxy.ownUserID
switch await clientProxy.directRoomForUserID(member.userID) {
case .success(let roomID):
state.dmRoomID = roomID
case .failure:
break
}
case .failure(let error):
MXLog.warning("Failed to find member: \(error)")
actionsSubject.send(.openUserProfile)
}
await loadMember()
hideMemberLoadingIndicator()
}
}
@@ -94,8 +77,37 @@ class RoomMemberDetailsScreenViewModel: RoomMemberDetailsScreenViewModelType, Ro
}
// MARK: - Private
@MainActor
private func loadMember() async {
async let memberResult = roomProxy.getMember(userID: state.userID)
async let identityResult = clientProxy.userIdentity(for: state.userID)
switch await memberResult {
case .success(let member):
roomMemberProxy = member
state.memberDetails = RoomMemberDetails(withProxy: member)
state.isOwnMemberDetails = member.userID == roomProxy.ownUserID
switch await clientProxy.directRoomForUserID(member.userID) {
case .success(let roomID):
state.dmRoomID = roomID
case .failure:
break
}
case .failure(let error):
MXLog.warning("Failed to find member: \(error)")
// As we didn't find a member with the specified user ID in this room we instead
// fall back to showing a generic user profile screen as the source is likely
// a message containing a permalink to someone who's not in this room.
actionsSubject.send(.openUserProfile)
}
if case let .success(.some(identity)) = await identityResult {
state.isVerified = identity.isVerified()
} else {
MXLog.error("Failed to find the member's identity.")
}
}
private func ignoreUser() async {
guard let roomMemberProxy else {
fatalError()