fix: DM invites now correctly render the avatar

This commit is contained in:
Mauro Romito
2025-03-21 16:18:28 +01:00
committed by Mauro
parent a142ce43af
commit b709cccb1c
10 changed files with 33 additions and 26 deletions
@@ -18,7 +18,13 @@ struct HomeScreenInviteCell: View {
let hideInviteAvatars: Bool let hideInviteAvatars: Bool
private var avatar: RoomAvatar { private var avatar: RoomAvatar {
hideInviteAvatars ? room.avatar.removingAvatar : room.avatar // DM invites avatars are broken, this is a workaround
// https://github.com/matrix-org/matrix-rust-sdk/issues/4825
if room.isDirect, let inviter = room.inviter {
.heroes([.init(userID: inviter.id, displayName: inviter.displayName, avatarURL: hideInviteAvatars ? nil : inviter.avatarURL)])
} else {
hideInviteAvatars ? room.avatar.removingAvatar : room.avatar
}
} }
var body: some View { var body: some View {
@@ -77,7 +83,7 @@ struct HomeScreenInviteCell: View {
if let inviter = room.inviter, if let inviter = room.inviter,
!room.isDirect { !room.isDirect {
RoomInviterLabel(inviter: inviter, RoomInviterLabel(inviter: inviter,
shouldHideAvatar: context.viewState.hideInviteAvatars, shouldHideAvatar: hideInviteAvatars,
mediaProvider: context.mediaProvider) mediaProvider: context.mediaProvider)
.font(.compound.bodyMD) .font(.compound.bodyMD)
.foregroundStyle(.compound.textSecondary) .foregroundStyle(.compound.textSecondary)
@@ -157,7 +163,7 @@ struct HomeScreenInviteCell_Previews: PreviewProvider, TestablePreview {
HomeScreenInviteCell(room: .roomInvite(alias: "#footest:somewhere.org", avatarURL: .mockMXCAvatar), HomeScreenInviteCell(room: .roomInvite(alias: "#footest:somewhere.org", avatarURL: .mockMXCAvatar),
context: viewModel().context, hideInviteAvatars: false) context: viewModel().context, hideInviteAvatars: false)
HomeScreenInviteCell(room: .roomInvite(alias: "#footest-hidden-avatars:somewhere.org", avatarURL: .mockMXCAvatar), HomeScreenInviteCell(room: .roomInvite(alias: "#footest-hidden-avatars:somewhere.org", avatarURL: .mockMXCAvatar),
context: viewModel(hideInviteAvatars: true).context, hideInviteAvatars: true) context: viewModel().context, hideInviteAvatars: true)
HomeScreenInviteCell(room: .roomInvite(alias: "#footest:somewhere.org"), HomeScreenInviteCell(room: .roomInvite(alias: "#footest:somewhere.org"),
context: viewModel().context, hideInviteAvatars: false) context: viewModel().context, hideInviteAvatars: false)
.dynamicTypeSize(.accessibility1) .dynamicTypeSize(.accessibility1)
@@ -166,7 +172,7 @@ struct HomeScreenInviteCell_Previews: PreviewProvider, TestablePreview {
.previewLayout(.sizeThatFits) .previewLayout(.sizeThatFits)
} }
static func viewModel(hideInviteAvatars: Bool = false) -> HomeScreenViewModel { static func viewModel() -> HomeScreenViewModel {
let clientProxy = ClientProxyMock(.init()) let clientProxy = ClientProxyMock(.init())
let userSession = UserSessionMock(.init(clientProxy: clientProxy)) let userSession = UserSessionMock(.init(clientProxy: clientProxy))
@@ -183,8 +189,8 @@ struct HomeScreenInviteCell_Previews: PreviewProvider, TestablePreview {
private extension HomeScreenRoom { private extension HomeScreenRoom {
static var dmInvite: HomeScreenRoom { static var dmInvite: HomeScreenRoom {
let inviter = RoomMemberProxyMock() let inviter = RoomMemberProxyMock()
inviter.displayName = "Jack" inviter.displayName = "Some Guy"
inviter.userID = "@jack:somewhere.com" inviter.userID = "@someone:somewhere.com"
let summary = RoomSummary(roomListItem: RoomListItemSDKMock(), let summary = RoomSummary(roomListItem: RoomListItemSDKMock(),
id: "@someone:somewhere.com", id: "@someone:somewhere.com",
@@ -83,14 +83,15 @@ struct JoinRoomScreenViewState: BindableState {
var avatar: RoomAvatar? { var avatar: RoomAvatar? {
// DM invites avatars are broken, this is a workaround // DM invites avatars are broken, this is a workaround
// https://github.com/matrix-org/matrix-rust-sdk/issues/4825
if isDMInvite, let inviter = roomDetails?.inviter { if isDMInvite, let inviter = roomDetails?.inviter {
return .room(id: roomID, name: inviter.displayName, avatarURL: hideInviteAvatars ? nil : inviter.avatarURL) .heroes([.init(userID: inviter.id, displayName: inviter.displayName, avatarURL: hideInviteAvatars ? nil : inviter.avatarURL)])
} else if let roomDetails, let avatar = roomDetails.avatar { } else if let roomDetails, let avatar = roomDetails.avatar {
return shouldHideAvatars ? avatar.removingAvatar : avatar shouldHideAvatars ? avatar.removingAvatar : avatar
} else if let name = roomDetails?.name { } else if let name = roomDetails?.name {
return .room(id: roomID, name: name, avatarURL: nil) .room(id: roomID, name: name, avatarURL: nil)
} else { } else {
return nil nil
} }
} }
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a2afcba709e9e534cdd62168d6957db70cef57703a6033c0bdc8bb1ff491e974 oid sha256:55fd5524f64fc98d602079cf0d508509debd7692665a89fe188c1d811a8e5225
size 317756 size 313508
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d38436f84b344252e929f15075a5219260b5454c223c77fb1f41c88322adda02 oid sha256:7aadc016d54830518f04138db98d3db6b9cbdd46c781c9d6d3e216fa5f93184c
size 337324 size 333135
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2994fc2ce1f3a12e0b1fd60c27f7649de7e69027d4c57f941211f6e268344fd3 oid sha256:1728cf95295698ef622e17f94bdd3051dfb66805c7bfc2bcbbea702e916040ab
size 259148 size 255180
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7b07fc5ed7e4355332558a45b7117b3825e3d61bf9a6cde9c38e967e0bfd78d1 oid sha256:38ec032717e91d95123e93db3bafebb98357f75fd82f743a57c051a8e72e166d
size 341431 size 337264
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7179c2051979af73a92741a035af441763c51c7c8eaa08ab2c6703a30db5f761 oid sha256:b5fb7a23048bb92aa0b150affa0a85b74a7ddf6e3a283f2e5c382eb2c13d657b
size 107060 size 106996
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:3c113c3152efde1b3dd551f2d889d679e0fcbfc548f441cefbc1431206ef334c oid sha256:8f4e3b3b3c0b5de6fb9ab963df7f4b7d090e9ad82b181ced19326709c54c6f4b
size 110563 size 110503
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a2a6408a70b8d67791d156e8bc2dce8504a78a90e0e1408cc3c510845d2b0a9d oid sha256:4df6b436febeb15d036f0003f1eb782745e8223301f888c39bc41a83ef2acf85
size 61876 size 61843
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:81f85a54ef59dcbbd79c2108c1c243b175d69c4fd00838e79c2c6ed83a518a63 oid sha256:36820fc8707e26533dcf705b085ef9674823a39c79edf0f091182ff3f1a46efe
size 70951 size 70922