From f64159670b6636751e78d756eec51c2e64a054a1 Mon Sep 17 00:00:00 2001 From: Nicolas Mauri Date: Fri, 11 Aug 2023 11:54:44 +0200 Subject: [PATCH] Update SDK to 1.0.106-alpha (#1480) --- ElementX.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 4 +- .../Mocks/Generated/GeneratedMocks.swift | 86 +++++++++---------- .../Mocks/NotificationSettingsProxyMock.swift | 8 +- .../RoomDetailsScreenViewModel.swift | 4 +- ...mNotificationSettingsScreenViewModel.swift | 2 +- .../NotificationSettingsScreenViewModel.swift | 10 +-- .../View/NotificationSettingsScreen.swift | 6 +- .../NotificationSettingsProxy.swift | 12 +-- .../NotificationSettingsProxyProtocol.swift | 6 +- .../RoomSummary/RoomSummaryProvider.swift | 2 +- ...ficationSettingsScreenViewModelTests.swift | 26 +++--- .../Sources/RoomDetailsViewModelTests.swift | 18 ++-- ...ficationSettingsScreenViewModelTests.swift | 12 +-- project.yml | 2 +- 15 files changed, 99 insertions(+), 101 deletions(-) diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index e352de917..1cde4d4bf 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -5402,7 +5402,7 @@ repositoryURL = "https://github.com/matrix-org/matrix-rust-components-swift"; requirement = { kind = exactVersion; - version = "1.0.105-alpha"; + version = "1.0.106-alpha"; }; }; 821C67C9A7F8CC3FD41B28B4 /* XCRemoteSwiftPackageReference "emojibase-bindings" */ = { diff --git a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 1d9a87e6c..30894b30d 100644 --- a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -129,8 +129,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/matrix-org/matrix-rust-components-swift", "state" : { - "revision" : "ce67b9e191755f8562f1f1eccc195ebbb696cfb2", - "version" : "1.0.105-alpha" + "revision" : "e9c185dc6a9d01c198fae36161b0e4180dfcfdd6", + "version" : "1.0.106-alpha" } }, { diff --git a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift index 90f671a38..675ac9215 100644 --- a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift +++ b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift @@ -322,27 +322,27 @@ class NotificationSettingsProxyMock: NotificationSettingsProxyProtocol { //MARK: - getNotificationSettings - var getNotificationSettingsRoomIdIsEncryptedActiveMembersCountThrowableError: Error? - var getNotificationSettingsRoomIdIsEncryptedActiveMembersCountCallsCount = 0 - var getNotificationSettingsRoomIdIsEncryptedActiveMembersCountCalled: Bool { - return getNotificationSettingsRoomIdIsEncryptedActiveMembersCountCallsCount > 0 + var getNotificationSettingsRoomIdIsEncryptedIsOneToOneThrowableError: Error? + var getNotificationSettingsRoomIdIsEncryptedIsOneToOneCallsCount = 0 + var getNotificationSettingsRoomIdIsEncryptedIsOneToOneCalled: Bool { + return getNotificationSettingsRoomIdIsEncryptedIsOneToOneCallsCount > 0 } - var getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReceivedArguments: (roomId: String, isEncrypted: Bool, activeMembersCount: UInt64)? - var getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReceivedInvocations: [(roomId: String, isEncrypted: Bool, activeMembersCount: UInt64)] = [] - var getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue: RoomNotificationSettingsProxyProtocol! - var getNotificationSettingsRoomIdIsEncryptedActiveMembersCountClosure: ((String, Bool, UInt64) async throws -> RoomNotificationSettingsProxyProtocol)? + var getNotificationSettingsRoomIdIsEncryptedIsOneToOneReceivedArguments: (roomId: String, isEncrypted: Bool, isOneToOne: Bool)? + var getNotificationSettingsRoomIdIsEncryptedIsOneToOneReceivedInvocations: [(roomId: String, isEncrypted: Bool, isOneToOne: Bool)] = [] + var getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue: RoomNotificationSettingsProxyProtocol! + var getNotificationSettingsRoomIdIsEncryptedIsOneToOneClosure: ((String, Bool, Bool) async throws -> RoomNotificationSettingsProxyProtocol)? - func getNotificationSettings(roomId: String, isEncrypted: Bool, activeMembersCount: UInt64) async throws -> RoomNotificationSettingsProxyProtocol { - if let error = getNotificationSettingsRoomIdIsEncryptedActiveMembersCountThrowableError { + func getNotificationSettings(roomId: String, isEncrypted: Bool, isOneToOne: Bool) async throws -> RoomNotificationSettingsProxyProtocol { + if let error = getNotificationSettingsRoomIdIsEncryptedIsOneToOneThrowableError { throw error } - getNotificationSettingsRoomIdIsEncryptedActiveMembersCountCallsCount += 1 - getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReceivedArguments = (roomId: roomId, isEncrypted: isEncrypted, activeMembersCount: activeMembersCount) - getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReceivedInvocations.append((roomId: roomId, isEncrypted: isEncrypted, activeMembersCount: activeMembersCount)) - if let getNotificationSettingsRoomIdIsEncryptedActiveMembersCountClosure = getNotificationSettingsRoomIdIsEncryptedActiveMembersCountClosure { - return try await getNotificationSettingsRoomIdIsEncryptedActiveMembersCountClosure(roomId, isEncrypted, activeMembersCount) + getNotificationSettingsRoomIdIsEncryptedIsOneToOneCallsCount += 1 + getNotificationSettingsRoomIdIsEncryptedIsOneToOneReceivedArguments = (roomId: roomId, isEncrypted: isEncrypted, isOneToOne: isOneToOne) + getNotificationSettingsRoomIdIsEncryptedIsOneToOneReceivedInvocations.append((roomId: roomId, isEncrypted: isEncrypted, isOneToOne: isOneToOne)) + if let getNotificationSettingsRoomIdIsEncryptedIsOneToOneClosure = getNotificationSettingsRoomIdIsEncryptedIsOneToOneClosure { + return try await getNotificationSettingsRoomIdIsEncryptedIsOneToOneClosure(roomId, isEncrypted, isOneToOne) } else { - return getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue + return getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue } } //MARK: - setNotificationMode @@ -367,23 +367,23 @@ class NotificationSettingsProxyMock: NotificationSettingsProxyProtocol { } //MARK: - getDefaultNotificationRoomMode - var getDefaultNotificationRoomModeIsEncryptedActiveMembersCountCallsCount = 0 - var getDefaultNotificationRoomModeIsEncryptedActiveMembersCountCalled: Bool { - return getDefaultNotificationRoomModeIsEncryptedActiveMembersCountCallsCount > 0 + var getDefaultNotificationRoomModeIsEncryptedIsOneToOneCallsCount = 0 + var getDefaultNotificationRoomModeIsEncryptedIsOneToOneCalled: Bool { + return getDefaultNotificationRoomModeIsEncryptedIsOneToOneCallsCount > 0 } - var getDefaultNotificationRoomModeIsEncryptedActiveMembersCountReceivedArguments: (isEncrypted: Bool, activeMembersCount: UInt64)? - var getDefaultNotificationRoomModeIsEncryptedActiveMembersCountReceivedInvocations: [(isEncrypted: Bool, activeMembersCount: UInt64)] = [] - var getDefaultNotificationRoomModeIsEncryptedActiveMembersCountReturnValue: RoomNotificationModeProxy! - var getDefaultNotificationRoomModeIsEncryptedActiveMembersCountClosure: ((Bool, UInt64) async -> RoomNotificationModeProxy)? + var getDefaultNotificationRoomModeIsEncryptedIsOneToOneReceivedArguments: (isEncrypted: Bool, isOneToOne: Bool)? + var getDefaultNotificationRoomModeIsEncryptedIsOneToOneReceivedInvocations: [(isEncrypted: Bool, isOneToOne: Bool)] = [] + var getDefaultNotificationRoomModeIsEncryptedIsOneToOneReturnValue: RoomNotificationModeProxy! + var getDefaultNotificationRoomModeIsEncryptedIsOneToOneClosure: ((Bool, Bool) async -> RoomNotificationModeProxy)? - func getDefaultNotificationRoomMode(isEncrypted: Bool, activeMembersCount: UInt64) async -> RoomNotificationModeProxy { - getDefaultNotificationRoomModeIsEncryptedActiveMembersCountCallsCount += 1 - getDefaultNotificationRoomModeIsEncryptedActiveMembersCountReceivedArguments = (isEncrypted: isEncrypted, activeMembersCount: activeMembersCount) - getDefaultNotificationRoomModeIsEncryptedActiveMembersCountReceivedInvocations.append((isEncrypted: isEncrypted, activeMembersCount: activeMembersCount)) - if let getDefaultNotificationRoomModeIsEncryptedActiveMembersCountClosure = getDefaultNotificationRoomModeIsEncryptedActiveMembersCountClosure { - return await getDefaultNotificationRoomModeIsEncryptedActiveMembersCountClosure(isEncrypted, activeMembersCount) + func getDefaultNotificationRoomMode(isEncrypted: Bool, isOneToOne: Bool) async -> RoomNotificationModeProxy { + getDefaultNotificationRoomModeIsEncryptedIsOneToOneCallsCount += 1 + getDefaultNotificationRoomModeIsEncryptedIsOneToOneReceivedArguments = (isEncrypted: isEncrypted, isOneToOne: isOneToOne) + getDefaultNotificationRoomModeIsEncryptedIsOneToOneReceivedInvocations.append((isEncrypted: isEncrypted, isOneToOne: isOneToOne)) + if let getDefaultNotificationRoomModeIsEncryptedIsOneToOneClosure = getDefaultNotificationRoomModeIsEncryptedIsOneToOneClosure { + return await getDefaultNotificationRoomModeIsEncryptedIsOneToOneClosure(isEncrypted, isOneToOne) } else { - return getDefaultNotificationRoomModeIsEncryptedActiveMembersCountReturnValue + return getDefaultNotificationRoomModeIsEncryptedIsOneToOneReturnValue } } //MARK: - restoreDefaultNotificationMode @@ -425,23 +425,23 @@ class NotificationSettingsProxyMock: NotificationSettingsProxyProtocol { } //MARK: - unmuteRoom - var unmuteRoomRoomIdIsEncryptedActiveMembersCountThrowableError: Error? - var unmuteRoomRoomIdIsEncryptedActiveMembersCountCallsCount = 0 - var unmuteRoomRoomIdIsEncryptedActiveMembersCountCalled: Bool { - return unmuteRoomRoomIdIsEncryptedActiveMembersCountCallsCount > 0 + var unmuteRoomRoomIdIsEncryptedIsOneToOneThrowableError: Error? + var unmuteRoomRoomIdIsEncryptedIsOneToOneCallsCount = 0 + var unmuteRoomRoomIdIsEncryptedIsOneToOneCalled: Bool { + return unmuteRoomRoomIdIsEncryptedIsOneToOneCallsCount > 0 } - var unmuteRoomRoomIdIsEncryptedActiveMembersCountReceivedArguments: (roomId: String, isEncrypted: Bool, activeMembersCount: UInt64)? - var unmuteRoomRoomIdIsEncryptedActiveMembersCountReceivedInvocations: [(roomId: String, isEncrypted: Bool, activeMembersCount: UInt64)] = [] - var unmuteRoomRoomIdIsEncryptedActiveMembersCountClosure: ((String, Bool, UInt64) async throws -> Void)? + var unmuteRoomRoomIdIsEncryptedIsOneToOneReceivedArguments: (roomId: String, isEncrypted: Bool, isOneToOne: Bool)? + var unmuteRoomRoomIdIsEncryptedIsOneToOneReceivedInvocations: [(roomId: String, isEncrypted: Bool, isOneToOne: Bool)] = [] + var unmuteRoomRoomIdIsEncryptedIsOneToOneClosure: ((String, Bool, Bool) async throws -> Void)? - func unmuteRoom(roomId: String, isEncrypted: Bool, activeMembersCount: UInt64) async throws { - if let error = unmuteRoomRoomIdIsEncryptedActiveMembersCountThrowableError { + func unmuteRoom(roomId: String, isEncrypted: Bool, isOneToOne: Bool) async throws { + if let error = unmuteRoomRoomIdIsEncryptedIsOneToOneThrowableError { throw error } - unmuteRoomRoomIdIsEncryptedActiveMembersCountCallsCount += 1 - unmuteRoomRoomIdIsEncryptedActiveMembersCountReceivedArguments = (roomId: roomId, isEncrypted: isEncrypted, activeMembersCount: activeMembersCount) - unmuteRoomRoomIdIsEncryptedActiveMembersCountReceivedInvocations.append((roomId: roomId, isEncrypted: isEncrypted, activeMembersCount: activeMembersCount)) - try await unmuteRoomRoomIdIsEncryptedActiveMembersCountClosure?(roomId, isEncrypted, activeMembersCount) + unmuteRoomRoomIdIsEncryptedIsOneToOneCallsCount += 1 + unmuteRoomRoomIdIsEncryptedIsOneToOneReceivedArguments = (roomId: roomId, isEncrypted: isEncrypted, isOneToOne: isOneToOne) + unmuteRoomRoomIdIsEncryptedIsOneToOneReceivedInvocations.append((roomId: roomId, isEncrypted: isEncrypted, isOneToOne: isOneToOne)) + try await unmuteRoomRoomIdIsEncryptedIsOneToOneClosure?(roomId, isEncrypted, isOneToOne) } //MARK: - isRoomMentionEnabled diff --git a/ElementX/Sources/Mocks/NotificationSettingsProxyMock.swift b/ElementX/Sources/Mocks/NotificationSettingsProxyMock.swift index 671387c49..6ecf96530 100644 --- a/ElementX/Sources/Mocks/NotificationSettingsProxyMock.swift +++ b/ElementX/Sources/Mocks/NotificationSettingsProxyMock.swift @@ -34,19 +34,19 @@ extension NotificationSettingsProxyMock { self.init() callbacks = configuration.callback - getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = configuration.roomMode - getDefaultNotificationRoomModeIsEncryptedActiveMembersCountReturnValue = configuration.defaultRoomMode + getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = configuration.roomMode + getDefaultNotificationRoomModeIsEncryptedIsOneToOneReturnValue = configuration.defaultRoomMode setNotificationModeRoomIdModeClosure = { [weak self] _, mode in guard let self else { return } - self.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: mode, isDefault: false)) + self.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: mode, isDefault: false)) Task { self.callbacks.send(.settingsDidChange) } } restoreDefaultNotificationModeRoomIdClosure = { [weak self] _ in guard let self else { return } - self.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: configuration.defaultRoomMode, isDefault: true)) + self.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: configuration.defaultRoomMode, isDefault: true)) Task { self.callbacks.send(.settingsDidChange) } diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift index 3337361ee..ca647dcf3 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift @@ -195,7 +195,7 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr do { let notificationMode = try await notificationSettingsProxy.getNotificationSettings(roomId: roomProxy.id, isEncrypted: roomProxy.isEncrypted, - activeMembersCount: UInt64(roomProxy.activeMembersCount)) + isOneToOne: roomProxy.activeMembersCount == 2) state.notificationSettingsState = .loaded(settings: notificationMode) } catch { state.notificationSettingsState = .error @@ -213,7 +213,7 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr do { try await notificationSettingsProxy.unmuteRoom(roomId: roomProxy.id, isEncrypted: roomProxy.isEncrypted, - activeMembersCount: UInt64(roomProxy.activeMembersCount)) + isOneToOne: roomProxy.activeMembersCount == 2) } catch { state.bindings.alertInfo = AlertInfo(id: .alert, title: L10n.commonError, diff --git a/ElementX/Sources/Screens/RoomNotificationSettingsScreen/RoomNotificationSettingsScreenViewModel.swift b/ElementX/Sources/Screens/RoomNotificationSettingsScreen/RoomNotificationSettingsScreenViewModel.swift index 5515a0d23..2abb48ea4 100644 --- a/ElementX/Sources/Screens/RoomNotificationSettingsScreen/RoomNotificationSettingsScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomNotificationSettingsScreen/RoomNotificationSettingsScreenViewModel.swift @@ -79,7 +79,7 @@ class RoomNotificationSettingsScreenViewModel: RoomNotificationSettingsScreenVie do { let settings = try await notificationSettingsProxy.getNotificationSettings(roomId: roomProxy.id, isEncrypted: roomProxy.isEncrypted, - activeMembersCount: UInt64(roomProxy.activeMembersCount)) + isOneToOne: roomProxy.activeMembersCount == 2) guard !Task.isCancelled else { return } state.notificationSettingsState = .loaded(settings: settings) if !state.isRestoringDefautSetting { diff --git a/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/NotificationSettingsScreenViewModel.swift b/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/NotificationSettingsScreenViewModel.swift index 0ef77b33c..219210f41 100644 --- a/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/NotificationSettingsScreenViewModel.swift +++ b/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/NotificationSettingsScreenViewModel.swift @@ -121,15 +121,13 @@ class NotificationSettingsScreenViewModel: NotificationSettingsScreenViewModelTy fetchSettingsTask = Task { // Group chats // A group chat is a chat having more than 2 active members - let groupChatActiveMembers: UInt64 = 3 - var groupChatsMode = await notificationSettingsProxy.getDefaultNotificationRoomMode(isEncrypted: false, activeMembersCount: groupChatActiveMembers) - let encryptedGroupChatsMode = await notificationSettingsProxy.getDefaultNotificationRoomMode(isEncrypted: true, activeMembersCount: groupChatActiveMembers) + var groupChatsMode = await notificationSettingsProxy.getDefaultNotificationRoomMode(isEncrypted: false, isOneToOne: false) + let encryptedGroupChatsMode = await notificationSettingsProxy.getDefaultNotificationRoomMode(isEncrypted: true, isOneToOne: false) // Direct chats // A direct chat is a chat having exactly 2 active members - let directChatActiveMembers: UInt64 = 2 - var directChatsMode = await notificationSettingsProxy.getDefaultNotificationRoomMode(isEncrypted: false, activeMembersCount: directChatActiveMembers) - let encryptedDirectChatsMode = await notificationSettingsProxy.getDefaultNotificationRoomMode(isEncrypted: true, activeMembersCount: directChatActiveMembers) + var directChatsMode = await notificationSettingsProxy.getDefaultNotificationRoomMode(isEncrypted: false, isOneToOne: true) + let encryptedDirectChatsMode = await notificationSettingsProxy.getDefaultNotificationRoomMode(isEncrypted: true, isOneToOne: true) // Old clients were having specific settings for encrypted and unencrypted rooms, // so it's possible for `group chats` and `direct chats` settings to be inconsistent (e.g. encrypted `direct chats` can have a different mode that unencrypted `direct chats`) diff --git a/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/View/NotificationSettingsScreen.swift b/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/View/NotificationSettingsScreen.swift index fe7127a16..10bcee8a7 100644 --- a/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/View/NotificationSettingsScreen.swift +++ b/ElementX/Sources/Screens/Settings/NotificationSettingsScreen/View/NotificationSettingsScreen.swift @@ -183,9 +183,9 @@ struct NotificationSettingsScreen_Previews: PreviewProvider { let notificationCenter = UserNotificationCenterMock() notificationCenter.authorizationStatusReturnValue = .notDetermined let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init()) - notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedActiveMembersCountClosure = { isEncrypted, activeMembersCount in - switch (isEncrypted, activeMembersCount) { - case (_, 2): + notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedIsOneToOneClosure = { isEncrypted, isOneToOne in + switch (isEncrypted, isOneToOne) { + case (_, true): return .allMessages default: return .mentionsAndKeywordsOnly diff --git a/ElementX/Sources/Services/NotificationSettings/NotificationSettingsProxy.swift b/ElementX/Sources/Services/NotificationSettings/NotificationSettingsProxy.swift index 4504ebdbe..db6aabf2c 100644 --- a/ElementX/Sources/Services/NotificationSettings/NotificationSettingsProxy.swift +++ b/ElementX/Sources/Services/NotificationSettings/NotificationSettingsProxy.swift @@ -46,8 +46,8 @@ final class NotificationSettingsProxy: NotificationSettingsProxyProtocol { notificationSettings.setDelegate(delegate: WeakNotificationSettingsProxy(proxy: self)) } - func getNotificationSettings(roomId: String, isEncrypted: Bool, activeMembersCount: UInt64) async throws -> RoomNotificationSettingsProxyProtocol { - let roomMotificationSettings = try await notificationSettings.getRoomNotificationSettings(roomId: roomId, isEncrypted: isEncrypted, activeMembersCount: activeMembersCount) + func getNotificationSettings(roomId: String, isEncrypted: Bool, isOneToOne: Bool) async throws -> RoomNotificationSettingsProxyProtocol { + let roomMotificationSettings = try await notificationSettings.getRoomNotificationSettings(roomId: roomId, isEncrypted: isEncrypted, isOneToOne: isOneToOne) return RoomNotificationSettingsProxy(roomNotificationSettings: roomMotificationSettings) } @@ -68,8 +68,8 @@ final class NotificationSettingsProxy: NotificationSettingsProxyProtocol { await updatedSettings() } - func getDefaultNotificationRoomMode(isEncrypted: Bool, activeMembersCount: UInt64) async -> RoomNotificationModeProxy { - let roomNotificationMode = await notificationSettings.getDefaultRoomNotificationMode(isEncrypted: isEncrypted, activeMembersCount: activeMembersCount) + func getDefaultNotificationRoomMode(isEncrypted: Bool, isOneToOne: Bool) async -> RoomNotificationModeProxy { + let roomNotificationMode = await notificationSettings.getDefaultRoomNotificationMode(isEncrypted: isEncrypted, isOneToOne: isOneToOne) return RoomNotificationModeProxy.from(roomNotificationMode: roomNotificationMode) } @@ -85,11 +85,11 @@ final class NotificationSettingsProxy: NotificationSettingsProxyProtocol { await notificationSettings.containsKeywordsRules() } - func unmuteRoom(roomId: String, isEncrypted: Bool, activeMembersCount: UInt64) async throws { + func unmuteRoom(roomId: String, isEncrypted: Bool, isOneToOne: Bool) async throws { let backgroundTask = await backgroundTaskService?.startBackgroundTask(withName: "unmuteRoom") defer { backgroundTask?.stop() } - try await notificationSettings.unmuteRoom(roomId: roomId, isEncrypted: isEncrypted, membersCount: activeMembersCount) + try await notificationSettings.unmuteRoom(roomId: roomId, isEncrypted: isEncrypted, isOneToOne: isOneToOne) await updatedSettings() } diff --git a/ElementX/Sources/Services/NotificationSettings/NotificationSettingsProxyProtocol.swift b/ElementX/Sources/Services/NotificationSettings/NotificationSettingsProxyProtocol.swift index 4a736315b..8cf24dbe1 100644 --- a/ElementX/Sources/Services/NotificationSettings/NotificationSettingsProxyProtocol.swift +++ b/ElementX/Sources/Services/NotificationSettings/NotificationSettingsProxyProtocol.swift @@ -26,12 +26,12 @@ enum NotificationSettingsProxyCallback { protocol NotificationSettingsProxyProtocol { var callbacks: PassthroughSubject { get } - func getNotificationSettings(roomId: String, isEncrypted: Bool, activeMembersCount: UInt64) async throws -> RoomNotificationSettingsProxyProtocol + func getNotificationSettings(roomId: String, isEncrypted: Bool, isOneToOne: Bool) async throws -> RoomNotificationSettingsProxyProtocol func setNotificationMode(roomId: String, mode: RoomNotificationModeProxy) async throws - func getDefaultNotificationRoomMode(isEncrypted: Bool, activeMembersCount: UInt64) async -> RoomNotificationModeProxy + func getDefaultNotificationRoomMode(isEncrypted: Bool, isOneToOne: Bool) async -> RoomNotificationModeProxy func restoreDefaultNotificationMode(roomId: String) async throws func containsKeywordsRules() async -> Bool - func unmuteRoom(roomId: String, isEncrypted: Bool, activeMembersCount: UInt64) async throws + func unmuteRoom(roomId: String, isEncrypted: Bool, isOneToOne: Bool) async throws func isRoomMentionEnabled() async throws -> Bool func setRoomMentionEnabled(enabled: Bool) async throws func isUserMentionEnabled() async throws -> Bool diff --git a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift index cb10e102d..ddd5339ad 100644 --- a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift +++ b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift @@ -73,7 +73,7 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol { self.roomList = roomList do { - let listUpdatesSubscriptionResult = try roomList.entries(listener: RoomListEntriesListenerProxy { [weak self] updates in + let listUpdatesSubscriptionResult = roomList.entries(listener: RoomListEntriesListenerProxy { [weak self] updates in guard let self else { return } MXLog.info("\(name): Received list update") diffsPublisher.send(updates) diff --git a/UnitTests/Sources/NotificationSettingsScreenViewModelTests.swift b/UnitTests/Sources/NotificationSettingsScreenViewModelTests.swift index 4faa4d1b8..534d4b52e 100644 --- a/UnitTests/Sources/NotificationSettingsScreenViewModelTests.swift +++ b/UnitTests/Sources/NotificationSettingsScreenViewModelTests.swift @@ -34,7 +34,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase { userNotificationCenter.authorizationStatusReturnValue = .authorized appSettings = AppSettings() notificationSettingsProxy = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()) - notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedActiveMembersCountReturnValue = .allMessages + notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedIsOneToOneReturnValue = .allMessages notificationSettingsProxy.isRoomMentionEnabledReturnValue = true notificationSettingsProxy.isCallEnabledReturnValue = true @@ -58,9 +58,9 @@ class NotificationSettingsScreenViewModelTests: XCTestCase { } func testFetchSettings() async throws { - notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedActiveMembersCountClosure = { isEncrypted, activeMembersCount in - switch (isEncrypted, activeMembersCount) { - case (_, 2): + notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedIsOneToOneClosure = { isEncrypted, isOneToOne in + switch (isEncrypted, isOneToOne) { + case (_, true): return .allMessages case (_, _): return .mentionsAndKeywordsOnly @@ -71,7 +71,7 @@ class NotificationSettingsScreenViewModelTests: XCTestCase { notificationSettingsProxy.callbacks.send(.settingsDidChange) try await deferred.fulfill() - XCTAssertEqual(notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedActiveMembersCountCallsCount, 4) + XCTAssertEqual(notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedIsOneToOneCallsCount, 4) XCTAssert(notificationSettingsProxy.isRoomMentionEnabledCalled) XCTAssert(notificationSettingsProxy.isCallEnabledCalled) @@ -82,11 +82,11 @@ class NotificationSettingsScreenViewModelTests: XCTestCase { } func testInconsistentGroupChatsSettings() async throws { - notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedActiveMembersCountClosure = { isEncrypted, activeMembersCount in - switch (isEncrypted, activeMembersCount) { - case (true, 3): + notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedIsOneToOneClosure = { isEncrypted, isOneToOne in + switch (isEncrypted, isOneToOne) { + case (true, false): return .allMessages - case (false, 3): + case (false, false): return .mentionsAndKeywordsOnly default: return .allMessages @@ -103,11 +103,11 @@ class NotificationSettingsScreenViewModelTests: XCTestCase { } func testInconsistentDirectChatsSettings() async throws { - notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedActiveMembersCountClosure = { isEncrypted, activeMembersCount in - switch (isEncrypted, activeMembersCount) { - case (true, 2): + notificationSettingsProxy.getDefaultNotificationRoomModeIsEncryptedIsOneToOneClosure = { isEncrypted, isOneToOne in + switch (isEncrypted, isOneToOne) { + case (true, true): return .allMessages - case (false, 2): + case (false, true): return .mentionsAndKeywordsOnly default: return .allMessages diff --git a/UnitTests/Sources/RoomDetailsViewModelTests.swift b/UnitTests/Sources/RoomDetailsViewModelTests.swift index fb75c3dfd..afd91f4cb 100644 --- a/UnitTests/Sources/RoomDetailsViewModelTests.swift +++ b/UnitTests/Sources/RoomDetailsViewModelTests.swift @@ -381,7 +381,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { // MARK: - Notifications func testNotificationLoadingSettingsFailure() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountThrowableError = NotificationSettingsError.Generic(message: "error") + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneThrowableError = NotificationSettingsError.Generic(message: "error") viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", roomProxy: roomProxyMock, mediaProvider: MockMediaProvider(), @@ -403,7 +403,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { } func testNotificationDefaultMode() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .allMessages, isDefault: true)) + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .allMessages, isDefault: true)) let deferred = deferFulfillment(context.$viewState.map(\.notificationSettingsState).first(where: \.isLoaded)) notificationSettingsProxyMock.callbacks.send(.settingsDidChange) try await deferred.fulfill() @@ -412,7 +412,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { } func testNotificationCustomMode() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .allMessages, isDefault: false)) + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .allMessages, isDefault: false)) let deferred = deferFulfillment(context.$viewState.map(\.notificationSettingsState).first(where: \.isCustom)) notificationSettingsProxyMock.callbacks.send(.settingsDidChange) try await deferred.fulfill() @@ -421,7 +421,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { } func testNotificationRoomMuted() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mute, isDefault: false)) + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mute, isDefault: false)) let deferred = deferFulfillment(context.$viewState.map(\.notificationSettingsState).first(where: \.isLoaded)) notificationSettingsProxyMock.callbacks.send(.settingsDidChange) try await deferred.fulfill() @@ -431,7 +431,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { } func testNotificationRoomNotMuted() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: false)) + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: false)) let deferred = deferFulfillment(context.$viewState.map(\.notificationSettingsState).first(where: \.isLoaded)) notificationSettingsProxyMock.callbacks.send(.settingsDidChange) try await deferred.fulfill() @@ -444,7 +444,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { try await testNotificationRoomMuted() let expectation = expectation(description: #function) - notificationSettingsProxyMock.unmuteRoomRoomIdIsEncryptedActiveMembersCountClosure = { _, _, _ in + notificationSettingsProxyMock.unmuteRoomRoomIdIsEncryptedIsOneToOneClosure = { _, _, _ in defer { expectation.fulfill() } @@ -495,7 +495,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let expectation = expectation(description: #function) notificationSettingsProxyMock.setNotificationModeRoomIdModeClosure = { [weak notificationSettingsProxyMock] _, mode in - notificationSettingsProxyMock?.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: mode, isDefault: false)) + notificationSettingsProxyMock?.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: mode, isDefault: false)) expectation.fulfill() } context.send(viewAction: .processToogleMuteNotifications) @@ -521,8 +521,8 @@ class RoomDetailsScreenViewModelTests: XCTestCase { try await testNotificationRoomMuted() let expectation = expectation(description: #function) - notificationSettingsProxyMock.unmuteRoomRoomIdIsEncryptedActiveMembersCountClosure = { [weak notificationSettingsProxyMock] _, _, _ in - notificationSettingsProxyMock?.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .allMessages, isDefault: false)) + notificationSettingsProxyMock.unmuteRoomRoomIdIsEncryptedIsOneToOneClosure = { [weak notificationSettingsProxyMock] _, _, _ in + notificationSettingsProxyMock?.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .allMessages, isDefault: false)) expectation.fulfill() } context.send(viewAction: .processToogleMuteNotifications) diff --git a/UnitTests/Sources/RoomNotificationSettingsScreenViewModelTests.swift b/UnitTests/Sources/RoomNotificationSettingsScreenViewModelTests.swift index 7ab923863..d62501cae 100644 --- a/UnitTests/Sources/RoomNotificationSettingsScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomNotificationSettingsScreenViewModelTests.swift @@ -34,7 +34,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase { } func testInitialStateDefaultMode() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true)) + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true)) viewModel = RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxyMock, roomProxy: roomProxyMock) let deferred = deferFulfillment(context.$viewState.map(\.notificationSettingsState) @@ -46,7 +46,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase { } func testInitialStateCustomMode() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: false)) + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: false)) viewModel = RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxyMock, roomProxy: roomProxyMock) let deferred = deferFulfillment(context.$viewState.map(\.notificationSettingsState) @@ -58,7 +58,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase { } func testInitialStateFailure() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountThrowableError = NotificationSettingsError.Generic(message: "error") + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneThrowableError = NotificationSettingsError.Generic(message: "error") viewModel = RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxyMock, roomProxy: roomProxyMock) let deferred = deferFulfillment(context.$viewState.map(\.notificationSettingsState) @@ -75,7 +75,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase { } func testToggleAllCustomSettingOff() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: false)) + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: false)) viewModel = RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxyMock, roomProxy: roomProxyMock) let deferred = deferFulfillment(context.$viewState.map(\.notificationSettingsState) @@ -96,7 +96,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase { } func testToggleAllCustomSettingOffOn() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true)) + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true)) viewModel = RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxyMock, roomProxy: roomProxyMock) var deferred = deferFulfillment(context.$viewState.map(\.notificationSettingsState).first(where: \.isLoaded)) @@ -114,7 +114,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase { } func testSetCustomMode() async throws { - notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedActiveMembersCountReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: false)) + notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: false)) viewModel = RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxyMock, roomProxy: roomProxyMock) let deferredState = deferFulfillment(context.$viewState.map(\.notificationSettingsState).first(where: \.isLoaded)) diff --git a/project.yml b/project.yml index 8fc6c7fa7..6948759cb 100644 --- a/project.yml +++ b/project.yml @@ -44,7 +44,7 @@ include: packages: MatrixRustSDK: url: https://github.com/matrix-org/matrix-rust-components-swift - exactVersion: 1.0.105-alpha + exactVersion: 1.0.106-alpha # path: ../matrix-rust-sdk DesignKit: path: DesignKit