From 6c07af84cc9f72ece8b97e0ac6875ff8c0b3c8e1 Mon Sep 17 00:00:00 2001 From: Mauro Romito Date: Mon, 14 Apr 2025 11:13:49 +0200 Subject: [PATCH] sdk: update to 25.04.14 --- ElementX.xcodeproj/project.pbxproj | 12 ++- .../xcshareddata/swiftpm/Package.resolved | 4 +- .../Mocks/Generated/SDKGeneratedMocks.swift | 85 +++++++++++++++++-- .../Other/Extensions/ClientBuilder.swift | 2 +- .../AuthenticationService.swift | 2 +- .../Sources/Services/Client/ClientProxy.swift | 8 +- .../Keychain/KeychainController.swift | 2 +- .../Proxy/NotificationItemProxy.swift | 11 +++ .../Proxy/NotificationItemProxyProtocol.swift | 2 + .../Room/RoomPreview/RoomPreviewProxy.swift | 4 +- NSE/Sources/NotificationContentBuilder.swift | 6 +- project.yml | 2 +- 12 files changed, 119 insertions(+), 21 deletions(-) diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index 01118d142..a89b6fadf 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -1533,6 +1533,7 @@ 227AC5D71A4CE43512062243 /* URL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URL.swift; sourceTree = ""; }; 22DB19219E6CC4D002E15D48 /* GlobalSearchScreenCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalSearchScreenCell.swift; sourceTree = ""; }; 2355398E4A55DA5A89128AD1 /* EncryptionKeyProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionKeyProvider.swift; sourceTree = ""; }; + 23674BF78CE814366EBD8762 /* cy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cy; path = cy.lproj/InfoPlist.strings; sourceTree = ""; }; 2389732B0E115A999A069083 /* NotificationSettingsScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsScreenCoordinator.swift; sourceTree = ""; }; 23E6EB7960BC9D0F7396B3BD /* RoomChangeRolesScreenRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChangeRolesScreenRow.swift; sourceTree = ""; }; 23EE69982BBA18C6D51AD08E /* UserProfileScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileScreen.swift; sourceTree = ""; }; @@ -1584,6 +1585,7 @@ 2AE83A3DD63BCFBB956FE5CB /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = nl; path = nl.lproj/Localizable.stringsdict; sourceTree = ""; }; 2AF715D4FD4710EBB637D661 /* SettingsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsScreenViewModelProtocol.swift; sourceTree = ""; }; 2B1FB56520A847DD2532D5C8 /* VideoMediaEventsTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoMediaEventsTimelineView.swift; sourceTree = ""; }; + 2B9BCACD0CC4CB8E37F17732 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = lt; path = lt.lproj/Localizable.stringsdict; sourceTree = ""; }; 2BA894BC09972DC45E497D37 /* TimelineInteractionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineInteractionHandler.swift; sourceTree = ""; }; 2BB385E148DE55C85C0A02D6 /* SoftLogoutScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoftLogoutScreenModels.swift; sourceTree = ""; }; 2BDB3E65A79779EDA5D33D8A /* AudioPlayerState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioPlayerState.swift; sourceTree = ""; }; @@ -2209,6 +2211,7 @@ B08CBE1E670690ECF11C2C6A /* eu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = eu; path = eu.lproj/Localizable.stringsdict; sourceTree = ""; }; B0A307A44F952CD73E63AE31 /* RoomEventStringBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomEventStringBuilder.swift; sourceTree = ""; }; B0BA67B3E4EF9D29D14A78CE /* AppLockSettingsScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSettingsScreenViewModelTests.swift; sourceTree = ""; }; + B0C5E5931A668B18D8C09028 /* cy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cy; path = cy.lproj/Localizable.strings; sourceTree = ""; }; B0F5CC38803B8382D2C63222 /* TimelineControllerFactoryMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineControllerFactoryMock.swift; sourceTree = ""; }; B14B1DE3E2D5D26732C49036 /* RoomChangeRolesScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomChangeRolesScreenViewModel.swift; sourceTree = ""; }; B16048D30F0438731C41F775 /* StateRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StateRoomTimelineItem.swift; sourceTree = ""; }; @@ -2394,6 +2397,7 @@ D622EC7898469BB1D0881CDD /* PollFormScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreen.swift; sourceTree = ""; }; D653265D006E708E4E51AD64 /* HomeScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenCoordinator.swift; sourceTree = ""; }; D66B5D86A9AB95E0E01BED82 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = ""; }; + D67CBAFA48ED0B6FCE74F88F /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Localizable.strings; sourceTree = ""; }; D6DC38E64A5ED3FDB201029A /* BugReportService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportService.swift; sourceTree = ""; }; D7149BDDE47F8AD104E644E2 /* TraceLogPack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TraceLogPack.swift; sourceTree = ""; }; D7673F2B0B038FAB2A8D16AD /* ElementTextFieldStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElementTextFieldStyle.swift; sourceTree = ""; }; @@ -6350,6 +6354,7 @@ be, bg, cs, + cy, de, el, en, @@ -6364,6 +6369,7 @@ id, it, ka, + lt, nb, nl, pl, @@ -7916,6 +7922,7 @@ 475D47D0BFE961B02BAC5D49 /* id */, 6FC5015B9634698BDB8701AF /* it */, D1896F6288D80E1F3EFB3DF8 /* ka */, + 2B9BCACD0CC4CB8E37F17732 /* lt */, 7720ACAC6155AB7F9C70B546 /* nb */, 2AE83A3DD63BCFBB956FE5CB /* nl */, 4C8D988E82A8DFA13BE46F7C /* pl */, @@ -7940,6 +7947,7 @@ F0205C03F98BE861EDABCB0D /* be */, 49193CB0C248D621A96FB2AA /* bg */, 8D8169443E5AC5FF71BFB3DB /* cs */, + B0C5E5931A668B18D8C09028 /* cy */, 35AFCF4C05DEED04E3DB1A16 /* de */, 113356152C099951A6D17D85 /* el */, CACA846B3E3E9A521D98B178 /* en */, @@ -7954,6 +7962,7 @@ EF98A02DED04075F7CF0C721 /* id */, 7B04BD3874D736127A8156B8 /* it */, 4629710C0337ADD9C8909542 /* ka */, + D67CBAFA48ED0B6FCE74F88F /* lt */, F51D674A5B5F1FE1B878E20F /* nb */, CDE3F3911FF7CC639BDE5844 /* nl */, 8140010A796DB2C7977B6643 /* pl */, @@ -7978,6 +7987,7 @@ 34ED3AB7E0287552A5648AB3 /* be */, EA880E78AF4BD24E45A7808C /* bg */, 8D1FA20DAB853C1156054912 /* cs */, + 23674BF78CE814366EBD8762 /* cy */, 84311D707B09854D67F78BBF /* de */, 8585C636A10B8141A7AE909F /* el */, 1215A4FC53D2319E81AE8970 /* en */, @@ -8617,7 +8627,7 @@ repositoryURL = "https://github.com/element-hq/matrix-rust-components-swift"; requirement = { kind = exactVersion; - version = 25.04.09; + version = 25.04.14; }; }; 701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = { diff --git a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 91af0472d..3906f3c77 100644 --- a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -158,8 +158,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/element-hq/matrix-rust-components-swift", "state" : { - "revision" : "5c16b97c7753bd9b6512877b66b580ffebe4bc89", - "version" : "25.4.9" + "revision" : "1f43ea9360f43ecd3d6674048265823709c96f1a", + "version" : "25.4.14" } }, { diff --git a/ElementX/Sources/Mocks/Generated/SDKGeneratedMocks.swift b/ElementX/Sources/Mocks/Generated/SDKGeneratedMocks.swift index 1a23603ad..4efb6fc04 100644 --- a/ElementX/Sources/Mocks/Generated/SDKGeneratedMocks.swift +++ b/ElementX/Sources/Mocks/Generated/SDKGeneratedMocks.swift @@ -13641,6 +13641,81 @@ open class RoomSDKMock: MatrixRustSDK.Room, @unchecked Sendable { } } + //MARK: - memberWithSenderInfo + + open var memberWithSenderInfoUserIdThrowableError: Error? + var memberWithSenderInfoUserIdUnderlyingCallsCount = 0 + open var memberWithSenderInfoUserIdCallsCount: Int { + get { + if Thread.isMainThread { + return memberWithSenderInfoUserIdUnderlyingCallsCount + } else { + var returnValue: Int? = nil + DispatchQueue.main.sync { + returnValue = memberWithSenderInfoUserIdUnderlyingCallsCount + } + + return returnValue! + } + } + set { + if Thread.isMainThread { + memberWithSenderInfoUserIdUnderlyingCallsCount = newValue + } else { + DispatchQueue.main.sync { + memberWithSenderInfoUserIdUnderlyingCallsCount = newValue + } + } + } + } + open var memberWithSenderInfoUserIdCalled: Bool { + return memberWithSenderInfoUserIdCallsCount > 0 + } + open var memberWithSenderInfoUserIdReceivedUserId: String? + open var memberWithSenderInfoUserIdReceivedInvocations: [String] = [] + + var memberWithSenderInfoUserIdUnderlyingReturnValue: RoomMemberWithSenderInfo! + open var memberWithSenderInfoUserIdReturnValue: RoomMemberWithSenderInfo! { + get { + if Thread.isMainThread { + return memberWithSenderInfoUserIdUnderlyingReturnValue + } else { + var returnValue: RoomMemberWithSenderInfo? = nil + DispatchQueue.main.sync { + returnValue = memberWithSenderInfoUserIdUnderlyingReturnValue + } + + return returnValue! + } + } + set { + if Thread.isMainThread { + memberWithSenderInfoUserIdUnderlyingReturnValue = newValue + } else { + DispatchQueue.main.sync { + memberWithSenderInfoUserIdUnderlyingReturnValue = newValue + } + } + } + } + open var memberWithSenderInfoUserIdClosure: ((String) async throws -> RoomMemberWithSenderInfo)? + + open override func memberWithSenderInfo(userId: String) async throws -> RoomMemberWithSenderInfo { + if let error = memberWithSenderInfoUserIdThrowableError { + throw error + } + memberWithSenderInfoUserIdCallsCount += 1 + memberWithSenderInfoUserIdReceivedUserId = userId + DispatchQueue.main.async { + self.memberWithSenderInfoUserIdReceivedInvocations.append(userId) + } + if let memberWithSenderInfoUserIdClosure = memberWithSenderInfoUserIdClosure { + return try await memberWithSenderInfoUserIdClosure(userId) + } else { + return memberWithSenderInfoUserIdReturnValue + } + } + //MARK: - members open var membersThrowableError: Error? @@ -18625,13 +18700,13 @@ open class RoomPreviewSDKMock: MatrixRustSDK.RoomPreview, @unchecked Sendable { return ownMembershipDetailsCallsCount > 0 } - var ownMembershipDetailsUnderlyingReturnValue: RoomMembershipDetails? - open var ownMembershipDetailsReturnValue: RoomMembershipDetails? { + var ownMembershipDetailsUnderlyingReturnValue: RoomMemberWithSenderInfo? + open var ownMembershipDetailsReturnValue: RoomMemberWithSenderInfo? { get { if Thread.isMainThread { return ownMembershipDetailsUnderlyingReturnValue } else { - var returnValue: RoomMembershipDetails?? = nil + var returnValue: RoomMemberWithSenderInfo?? = nil DispatchQueue.main.sync { returnValue = ownMembershipDetailsUnderlyingReturnValue } @@ -18649,9 +18724,9 @@ open class RoomPreviewSDKMock: MatrixRustSDK.RoomPreview, @unchecked Sendable { } } } - open var ownMembershipDetailsClosure: (() async -> RoomMembershipDetails?)? + open var ownMembershipDetailsClosure: (() async -> RoomMemberWithSenderInfo?)? - open override func ownMembershipDetails() async -> RoomMembershipDetails? { + open override func ownMembershipDetails() async -> RoomMemberWithSenderInfo? { ownMembershipDetailsCallsCount += 1 if let ownMembershipDetailsClosure = ownMembershipDetailsClosure { return await ownMembershipDetailsClosure() diff --git a/ElementX/Sources/Other/Extensions/ClientBuilder.swift b/ElementX/Sources/Other/Extensions/ClientBuilder.swift index ebe21193b..d090f49b1 100644 --- a/ElementX/Sources/Other/Extensions/ClientBuilder.swift +++ b/ElementX/Sources/Other/Extensions/ClientBuilder.swift @@ -21,7 +21,7 @@ extension ClientBuilder { .enableOidcRefreshLock() .setSessionDelegate(sessionDelegate: sessionDelegate) .userAgent(userAgent: UserAgentBuilder.makeASCIIUserAgent()) - .requestConfig(config: .init(retryLimit: 0, timeout: 30000, maxConcurrentRequests: nil, retryTimeout: nil)) + .requestConfig(config: .init(retryLimit: 0, timeout: 30000, maxConcurrentRequests: nil, maxRetryTime: nil)) .useEventCachePersistentStorage(value: true) builder = switch slidingSync { diff --git a/ElementX/Sources/Services/Authentication/AuthenticationService.swift b/ElementX/Sources/Services/Authentication/AuthenticationService.swift index a4aa9faae..e5f1810ac 100644 --- a/ElementX/Sources/Services/Authentication/AuthenticationService.swift +++ b/ElementX/Sources/Services/Authentication/AuthenticationService.swift @@ -128,7 +128,7 @@ class AuthenticationService: AuthenticationServiceProtocol { } return await userSession(for: client) - } catch let ClientError.MatrixApi(errorKind, _, _) { + } catch let ClientError.MatrixApi(errorKind, _, _, _) { MXLog.error("Failed logging in with error kind: \(errorKind)") switch errorKind { case .forbidden: diff --git a/ElementX/Sources/Services/Client/ClientProxy.swift b/ElementX/Sources/Services/Client/ClientProxy.swift index 8b43e9ddb..18881fb62 100644 --- a/ElementX/Sources/Services/Client/ClientProxy.swift +++ b/ElementX/Sources/Services/Client/ClientProxy.swift @@ -437,7 +437,7 @@ class ClientProxy: ClientProxyProtocol { await waitForRoomToSync(roomID: roomID, timeout: .seconds(30)) return .success(()) - } catch ClientError.MatrixApi(.forbidden, _, _) { + } catch ClientError.MatrixApi(.forbidden, _, _, _) { MXLog.error("Failed joining roomAlias: \(roomID) forbidden") return .failure(.forbiddenAccess) } catch { @@ -453,7 +453,7 @@ class ClientProxy: ClientProxyProtocol { await waitForRoomToSync(roomID: room.id(), timeout: .seconds(30)) return .success(()) - } catch ClientError.MatrixApi(.forbidden, _, _) { + } catch ClientError.MatrixApi(.forbidden, _, _, _) { MXLog.error("Failed joining roomAlias: \(roomAlias) forbidden") return .failure(.forbiddenAccess) } catch { @@ -494,7 +494,7 @@ class ClientProxy: ClientProxyProtocol { let data = try Data(contentsOf: media.url) let matrixUrl = try await client.uploadMedia(mimeType: mimeType, data: data, progressWatcher: nil) return .success(matrixUrl) - } catch let ClientError.MatrixApi(errorKind, _, _) { + } catch let ClientError.MatrixApi(errorKind, _, _, _) { MXLog.error("Failed uploading media with error kind: \(errorKind)") return .failure(ClientProxyError.failedUploadingMedia(errorKind)) } catch { @@ -526,7 +526,7 @@ class ClientProxy: ClientProxyProtocol { do { let roomPreview = try await client.getRoomPreviewFromRoomId(roomId: identifier, viaServers: via) return try .success(RoomPreviewProxy(roomPreview: roomPreview)) - } catch ClientError.MatrixApi(.forbidden, _, _) { + } catch ClientError.MatrixApi(.forbidden, _, _, _) { MXLog.error("Failed retrieving preview for room: \(identifier) is private") return .failure(.roomPreviewIsPrivate) } catch { diff --git a/ElementX/Sources/Services/Keychain/KeychainController.swift b/ElementX/Sources/Services/Keychain/KeychainController.swift index ae03a46d8..d9a658582 100644 --- a/ElementX/Sources/Services/Keychain/KeychainController.swift +++ b/ElementX/Sources/Services/Keychain/KeychainController.swift @@ -97,7 +97,7 @@ class KeychainController: KeychainControllerProtocol { func retrieveSessionFromKeychain(userId: String) throws -> Session { MXLog.info("Retrieving an updated Session from the keychain.") guard let session = restorationTokenForUsername(userId)?.session else { - throw ClientError.Generic(msg: "Failed to find RestorationToken in the Keychain.") + throw ClientError.Generic(msg: "Failed to find RestorationToken in the Keychain.", details: nil) } return session } diff --git a/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxy.swift b/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxy.swift index a69d0bb5e..31264d822 100644 --- a/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxy.swift +++ b/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxy.swift @@ -39,6 +39,15 @@ struct NotificationItemProxy: NotificationItemProxyProtocol { var isRoomDirect: Bool { notificationItem.roomInfo.isDirect } + + var isRoomPrivate: Bool { + switch notificationItem.roomInfo.joinRule { + case .invite, .knock, .restricted, .knockRestricted: + true + default: + false + } + } var roomJoinedMembers: Int { Int(notificationItem.roomInfo.joinedMembersCount) @@ -89,6 +98,8 @@ struct EmptyNotificationItemProxy: NotificationItemProxyProtocol { var isNoisy: Bool { false } var isRoomDirect: Bool { false } + + var isRoomPrivate: Bool { false } var senderAvatarMediaSource: MediaSourceProxy? { nil } diff --git a/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxyProtocol.swift b/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxyProtocol.swift index 298066d7c..63952f27a 100644 --- a/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxyProtocol.swift +++ b/ElementX/Sources/Services/Notification/Proxy/NotificationItemProxyProtocol.swift @@ -29,6 +29,8 @@ protocol NotificationItemProxyProtocol { var roomJoinedMembers: Int { get } var isRoomDirect: Bool { get } + + var isRoomPrivate: Bool { get } var isNoisy: Bool { get } diff --git a/ElementX/Sources/Services/Room/RoomPreview/RoomPreviewProxy.swift b/ElementX/Sources/Services/Room/RoomPreview/RoomPreviewProxy.swift index 41e15661e..9e667a319 100644 --- a/ElementX/Sources/Services/Room/RoomPreview/RoomPreviewProxy.swift +++ b/ElementX/Sources/Services/Room/RoomPreview/RoomPreviewProxy.swift @@ -24,11 +24,11 @@ final class RoomPreviewProxy: RoomPreviewProxyProtocol { } var senderRoomMember: RoomMemberProxy? - if let member = details.senderRoomMember { + if let member = details.senderInfo { senderRoomMember = .init(member: member) } - return RoomMembershipDetailsProxy(ownRoomMember: RoomMemberProxy(member: details.ownRoomMember), + return RoomMembershipDetailsProxy(ownRoomMember: RoomMemberProxy(member: details.roomMember), senderRoomMember: senderRoomMember) } } diff --git a/NSE/Sources/NotificationContentBuilder.swift b/NSE/Sources/NotificationContentBuilder.swift index e06bf1bd8..8d629d82a 100644 --- a/NSE/Sources/NotificationContentBuilder.swift +++ b/NSE/Sources/NotificationContentBuilder.swift @@ -106,9 +106,9 @@ struct NotificationContentBuilder { let displayName = notificationItem.senderDisplayName ?? notificationItem.roomDisplayName notification.body = String(messageEventStringBuilder.buildAttributedString(for: messageType, senderDisplayName: displayName).characters) - // For now we are fine hiding all images if the visibility is not `always` while we wait for an `isPublic` flag - // to be implemented in the SDK. - guard settings.timelineMediaVisibility == .always else { return notification } + guard settings.timelineMediaVisibility == .always || + (settings.timelineMediaVisibility == .privateOnly && notificationItem.isRoomPrivate) + else { return notification } switch messageType { case .image(content: let content): diff --git a/project.yml b/project.yml index 211675e31..48e8173bd 100644 --- a/project.yml +++ b/project.yml @@ -59,7 +59,7 @@ packages: # Element/Matrix dependencies MatrixRustSDK: url: https://github.com/element-hq/matrix-rust-components-swift - exactVersion: 25.04.09 + exactVersion: 25.04.14 # path: ../matrix-rust-sdk Compound: url: https://github.com/element-hq/compound-ios