Address the real lifetime issue of the SDK's Client by making Context.mediaProvider weak. (#4466)

This reverts commit 927aea4bfe.
This commit is contained in:
Doug
2025-09-05 18:18:14 +01:00
committed by GitHub
parent f30f3b1a63
commit c794144ef1
58 changed files with 380 additions and 161 deletions
@@ -234,7 +234,7 @@ struct AvatarHeaderView_Previews: PreviewProvider, TestablePreview {
isPublic: true,
isDirect: false),
avatarSize: .room(on: .details),
mediaProvider: MediaProviderMock(configuration: .init())) {
mediaProvider: .mock) {
HStack(spacing: 32) {
ShareLink(item: "test") {
CompoundIcon(\.shareIos)
@@ -248,7 +248,7 @@ struct AvatarHeaderView_Previews: PreviewProvider, TestablePreview {
Form {
AvatarHeaderView(accountOwner: RoomMemberDetails(withProxy: RoomMemberProxyMock.mockMe), dmRecipient: RoomMemberDetails(withProxy: RoomMemberProxyMock.mockAlice),
mediaProvider: MediaProviderMock(configuration: .init())) {
mediaProvider: .mock) {
HStack(spacing: 32) {
ShareLink(item: "test") {
CompoundIcon(\.shareIos)
@@ -263,16 +263,16 @@ struct AvatarHeaderView_Previews: PreviewProvider, TestablePreview {
VStack(spacing: 16) {
AvatarHeaderView(member: RoomMemberDetails(withProxy: RoomMemberProxyMock.mockAlice),
avatarSize: .room(on: .details),
mediaProvider: MediaProviderMock(configuration: .init())) { Text("") }
mediaProvider: .mock) { Text("") }
AvatarHeaderView(member: RoomMemberDetails(withProxy: RoomMemberProxyMock.mockBob),
isVerified: true,
avatarSize: .room(on: .details),
mediaProvider: MediaProviderMock(configuration: .init())) { Text("") }
mediaProvider: .mock) { Text("") }
AvatarHeaderView(member: RoomMemberDetails(withProxy: RoomMemberProxyMock.mockBanned[3]),
avatarSize: .room(on: .details),
mediaProvider: MediaProviderMock(configuration: .init())) { Text("") }
mediaProvider: .mock) { Text("") }
}
.padding()
.background(Color.compound.bgSubtleSecondaryLevel0)
@@ -396,7 +396,7 @@ struct LoadableImage_Previews: PreviewProvider, TestablePreview {
}
static func makeMediaProvider(isLoading: Bool = false) -> MediaProviderProtocol {
let mediaProvider = MediaProviderMock(configuration: .init())
let mediaProvider = MediaProviderMock(.init())
if isLoading {
mediaProvider.imageFromSourceSizeClosure = { _, _ in nil }
@@ -133,27 +133,27 @@ struct RoomAvatarImage_Previews: PreviewProvider, TestablePreview {
name: "Room",
avatarURL: nil),
avatarSize: .room(on: .chats),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
RoomAvatarImage(avatar: .room(id: "!2:server.com",
name: "Room",
avatarURL: .mockMXCAvatar),
avatarSize: .room(on: .chats),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
RoomAvatarImage(avatar: .space(id: "!space:server.com",
name: "Room",
avatarURL: nil),
avatarSize: .room(on: .chats),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
RoomAvatarImage(avatar: .space(id: "!otherspace:server.com",
name: "Room",
avatarURL: .mockMXCAvatar),
avatarSize: .room(on: .chats),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
RoomAvatarImage(avatar: .tombstoned, avatarSize: .room(on: .chats), mediaProvider: MediaProviderMock(configuration: .init()))
RoomAvatarImage(avatar: .tombstoned, avatarSize: .room(on: .chats), mediaProvider: .mock)
}
HStack(spacing: 12) {
@@ -161,18 +161,18 @@ struct RoomAvatarImage_Previews: PreviewProvider, TestablePreview {
displayName: "User",
avatarURL: nil)]),
avatarSize: .room(on: .chats),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
RoomAvatarImage(avatar: .heroes([.init(userID: "@user:server.com",
displayName: "User",
avatarURL: .mockMXCAvatar)]),
avatarSize: .room(on: .chats),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
RoomAvatarImage(avatar: .heroes([.init(userID: "@alice:server.com", displayName: "Alice", avatarURL: nil),
.init(userID: "@bob:server.net", displayName: "Bob", avatarURL: nil)]),
avatarSize: .room(on: .chats),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
}
}
}
@@ -75,7 +75,7 @@ struct RoomHeaderView_Previews: PreviewProvider, TestablePreview {
name: "Some Room Name",
avatarURL: avatarURL),
dmRecipientVerificationState: verificationState,
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
.padding()
}
}
@@ -63,13 +63,13 @@ struct RoomInviterLabel_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
VStack(spacing: 10) {
RoomInviterLabel(inviter: .init(member: RoomMemberProxyMock.mockAlice),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
RoomInviterLabel(inviter: .init(member: RoomMemberProxyMock.mockDan),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
RoomInviterLabel(inviter: .init(member: RoomMemberProxyMock.mockNoName),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
RoomInviterLabel(inviter: .init(member: RoomMemberProxyMock.mockCharlie),
mediaProvider: MediaProviderMock(configuration: .init()))
mediaProvider: .mock)
.foregroundStyle(.compound.textPrimary)
}
.font(.compound.bodyMD)
@@ -54,13 +54,13 @@ struct StackedAvatarsView_Previews: PreviewProvider, TestablePreview {
lineWidth: 2,
avatars: avatars,
avatarSize: .user(on: .knockingUsersBannerStack),
mediaProvider: MediaProviderMock())
mediaProvider: .mock)
StackedAvatarsView(overlap: 16,
lineWidth: 2,
shouldStackFromLast: true,
avatars: avatars,
avatarSize: .user(on: .knockingUsersBannerStack),
mediaProvider: MediaProviderMock())
mediaProvider: .mock)
}
}
}
@@ -65,21 +65,21 @@ struct UserProfileCell_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
Form {
UserProfileListRow(user: .mockAlice, membership: nil, mediaProvider: MediaProviderMock(configuration: .init()),
UserProfileListRow(user: .mockAlice, membership: nil, mediaProvider: .mock,
kind: .multiSelection(isSelected: true, action: action))
UserProfileListRow(user: .mockBob, membership: nil, mediaProvider: MediaProviderMock(configuration: .init()),
UserProfileListRow(user: .mockBob, membership: nil, mediaProvider: .mock,
kind: .multiSelection(isSelected: false, action: action))
UserProfileListRow(user: .mockCharlie, membership: .join, mediaProvider: MediaProviderMock(configuration: .init()),
UserProfileListRow(user: .mockCharlie, membership: .join, mediaProvider: .mock,
kind: .multiSelection(isSelected: true, action: action))
.disabled(true)
UserProfileListRow(user: .init(userID: "@someone:matrix.org"), membership: .join, mediaProvider: MediaProviderMock(configuration: .init()),
UserProfileListRow(user: .init(userID: "@someone:matrix.org"), membership: .join, mediaProvider: .mock,
kind: .multiSelection(isSelected: false, action: action))
.disabled(true)
UserProfileListRow(user: .init(userID: "@someone:matrix.org"), membership: nil, mediaProvider: MediaProviderMock(configuration: .init()),
UserProfileListRow(user: .init(userID: "@someone:matrix.org"), membership: nil, mediaProvider: .mock,
kind: .multiSelection(isSelected: false, action: action))
}
.compoundList()