mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Require acknowledgement to send to verified users who have unsigned devices or have changed their identity. (#3215)
* Refactor HeroImage style. * Add a screen to resolve (crypto-related) timeline item send failures. * Refactor send failures. * Update the SDK.
This commit is contained in:
@@ -349,6 +349,11 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
case (.roomDetails, .presentRoomMemberDetails(let userID)):
|
||||
return .roomMemberDetails(userID: userID, previousState: fromState)
|
||||
|
||||
case (.room, .presentResolveSendFailure):
|
||||
return .resolveSendFailure
|
||||
case (.resolveSendFailure, .dismissResolveSendFailure):
|
||||
return .room
|
||||
|
||||
// Child flow
|
||||
|
||||
case (_, .startChildFlow(let roomID, _, _)):
|
||||
@@ -499,6 +504,11 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
case (.roomMemberDetails, .dismissUserProfile, .roomDetails):
|
||||
break
|
||||
|
||||
case (.room, .presentResolveSendFailure(let failure, let itemID), .resolveSendFailure):
|
||||
presentResolveSendFailure(failure: failure, itemID: itemID)
|
||||
case (.resolveSendFailure, .dismissResolveSendFailure, .room):
|
||||
break
|
||||
|
||||
// Child flow
|
||||
case (_, .startChildFlow(let roomID, let via, let entryPoint), .presentingChild):
|
||||
Task { await self.startChildFlow(for: roomID, via: via, entryPoint: entryPoint) }
|
||||
@@ -623,6 +633,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
actionsSubject.send(.presentCallScreen(roomProxy: roomProxy))
|
||||
case .presentPinnedEventsTimeline:
|
||||
stateMachine.tryEvent(.presentPinnedEventsTimeline)
|
||||
case .presentResolveSendFailure(failure: let failure, itemID: let itemID):
|
||||
stateMachine.tryEvent(.presentResolveSendFailure(failure: failure, itemID: itemID))
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
@@ -1351,6 +1363,25 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
coordinator.start()
|
||||
}
|
||||
|
||||
private func presentResolveSendFailure(failure: TimelineItemSendFailure.VerifiedUser, itemID: TimelineItemIdentifier) {
|
||||
let coordinator = ResolveVerifiedUserSendFailureScreenCoordinator(parameters: .init(failure: failure,
|
||||
itemID: itemID,
|
||||
roomProxy: roomProxy))
|
||||
coordinator.actionsPublisher.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
|
||||
switch action {
|
||||
case .dismiss:
|
||||
navigationStackCoordinator.setSheetCoordinator(nil)
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
navigationStackCoordinator.setSheetCoordinator(coordinator) { [weak self] in
|
||||
self?.stateMachine.tryEvent(.dismissResolveSendFailure)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Child Flow
|
||||
|
||||
private func startChildFlow(for roomID: String, via: [String], entryPoint: RoomFlowCoordinatorEntryPoint) async {
|
||||
@@ -1425,6 +1456,7 @@ private extension RoomFlowCoordinator {
|
||||
case pollsHistoryForm
|
||||
case rolesAndPermissions
|
||||
case pinnedEventsTimeline(previousState: PinnedEventsTimelineSource)
|
||||
case resolveSendFailure
|
||||
|
||||
/// A child flow is in progress.
|
||||
case presentingChild(childRoomID: String, previousState: State)
|
||||
@@ -1497,6 +1529,9 @@ private extension RoomFlowCoordinator {
|
||||
case presentPinnedEventsTimeline
|
||||
case dismissPinnedEventsTimeline
|
||||
|
||||
case presentResolveSendFailure(failure: TimelineItemSendFailure.VerifiedUser, itemID: TimelineItemIdentifier)
|
||||
case dismissResolveSendFailure
|
||||
|
||||
// Child room flow events
|
||||
case startChildFlow(roomID: String, via: [String], entryPoint: RoomFlowCoordinatorEntryPoint)
|
||||
case dismissChildFlow
|
||||
|
||||
Reference in New Issue
Block a user