Be more leninent with handler transitions and only rely on the configuration of the state machine and its error handler.

This commit is contained in:
Stefan Ceriu
2025-05-28 18:36:44 +03:00
committed by Stefan Ceriu
parent 1ff1813b01
commit 4cb1758ac9
@@ -291,117 +291,73 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
case (.room, .presentThread(let itemID), .thread): case (.room, .presentThread(let itemID), .thread):
Task { await self.presentThread(itemID: itemID) } Task { await self.presentThread(itemID: itemID) }
case (.thread, .dismissThread, .room):
break
case (.initial, .presentRoomDetails, .roomDetails(let isRoot)), case (.initial, .presentRoomDetails, .roomDetails(let isRoot)),
(.room, .presentRoomDetails, .roomDetails(let isRoot)), (.room, .presentRoomDetails, .roomDetails(let isRoot)),
(.roomDetails, .presentRoomDetails, .roomDetails(let isRoot)): (.roomDetails, .presentRoomDetails, .roomDetails(let isRoot)):
Task { await self.presentRoomDetails(isRoot: isRoot, animated: animated) } Task { await self.presentRoomDetails(isRoot: isRoot, animated: animated) }
case (.roomDetails, .dismissRoomDetails, .room):
break
case (.roomDetails, .presentRoomDetailsEditScreen, .roomDetailsEditScreen): case (.roomDetails, .presentRoomDetailsEditScreen, .roomDetailsEditScreen):
presentRoomDetailsEditScreen() presentRoomDetailsEditScreen()
case (.roomDetailsEditScreen, .dismissRoomDetailsEditScreen, .roomDetails):
break
case (.roomDetails, .presentNotificationSettingsScreen, .notificationSettings): case (.roomDetails, .presentNotificationSettingsScreen, .notificationSettings):
presentNotificationSettingsScreen() presentNotificationSettingsScreen()
case (.notificationSettings, .dismissNotificationSettingsScreen, .roomDetails):
break
case (.notificationSettings, .presentGlobalNotificationSettingsScreen, .globalNotificationSettings): case (.notificationSettings, .presentGlobalNotificationSettingsScreen, .globalNotificationSettings):
presentGlobalNotificationSettingsScreen() presentGlobalNotificationSettingsScreen()
case (.globalNotificationSettings, .dismissGlobalNotificationSettingsScreen, .notificationSettings):
break
case (.roomDetails, .presentRoomMembersList, .roomMembersList): case (.roomDetails, .presentRoomMembersList, .roomMembersList):
presentRoomMembersList() presentRoomMembersList()
case (.roomMembersList, .dismissRoomMembersList, .roomDetails):
break
case (.room, .presentRoomMemberDetails, .roomMemberDetails(let userID, _)): case (.room, .presentRoomMemberDetails, .roomMemberDetails(let userID, _)):
presentRoomMemberDetails(userID: userID) presentRoomMemberDetails(userID: userID)
case (.roomMemberDetails, .dismissRoomMemberDetails, .room):
break
case (.roomMembersList, .presentRoomMemberDetails, .roomMemberDetails(let userID, _)): case (.roomMembersList, .presentRoomMemberDetails, .roomMemberDetails(let userID, _)):
presentRoomMemberDetails(userID: userID) presentRoomMemberDetails(userID: userID)
case (.roomMemberDetails, .dismissRoomMemberDetails, .roomMembersList):
break
case (.roomMemberDetails, .presentUserProfile(let userID), .userProfile): case (.roomMemberDetails, .presentUserProfile(let userID), .userProfile):
replaceRoomMemberDetailsWithUserProfile(userID: userID) replaceRoomMemberDetailsWithUserProfile(userID: userID)
case (.userProfile, .dismissUserProfile, .room):
break
case (.roomDetails, .presentInviteUsersScreen, .inviteUsersScreen): case (.roomDetails, .presentInviteUsersScreen, .inviteUsersScreen):
presentInviteUsersScreen() presentInviteUsersScreen()
case (.inviteUsersScreen, .dismissInviteUsersScreen, .roomDetails):
break
case (.roomMembersList, .presentInviteUsersScreen, .inviteUsersScreen): case (.roomMembersList, .presentInviteUsersScreen, .inviteUsersScreen):
presentInviteUsersScreen() presentInviteUsersScreen()
case (.inviteUsersScreen, .dismissInviteUsersScreen, .roomMembersList):
break
case (.room, .presentReportContent, .reportContent(let itemID, let senderID, _)): case (.room, .presentReportContent, .reportContent(let itemID, let senderID, _)):
presentReportContent(for: itemID, from: senderID) presentReportContent(for: itemID, from: senderID)
case (.reportContent, .dismissReportContent, .room):
break
case (.room, .presentMediaUploadPicker, .mediaUploadPicker(let source, _)): case (.room, .presentMediaUploadPicker, .mediaUploadPicker(let source, _)):
presentMediaUploadPickerWithSource(source) presentMediaUploadPickerWithSource(source)
case (.mediaUploadPicker, .dismissMediaUploadPicker, .room):
break
case (.mediaUploadPicker, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL, _)): case (.mediaUploadPicker, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL, _)):
presentMediaUploadPreviewScreen(for: fileURL, animated: animated) presentMediaUploadPreviewScreen(for: fileURL, animated: animated)
case (.room, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL, _)): case (.room, .presentMediaUploadPreview, .mediaUploadPreview(let fileURL, _)):
presentMediaUploadPreviewScreen(for: fileURL, animated: animated) presentMediaUploadPreviewScreen(for: fileURL, animated: animated)
case (.mediaUploadPreview, .dismissMediaUploadPreview, .room):
break
case (_, .presentEmojiPicker, .emojiPicker(let itemID, let selectedEmoji, _)): case (_, .presentEmojiPicker, .emojiPicker(let itemID, let selectedEmoji, _)):
presentEmojiPicker(for: itemID, selectedEmoji: selectedEmoji) presentEmojiPicker(for: itemID, selectedEmoji: selectedEmoji)
case (.emojiPicker, .dismissEmojiPicker, _):
break
case (.room, .presentMessageForwarding(let forwardingItem), .messageForwarding): case (.room, .presentMessageForwarding(let forwardingItem), .messageForwarding):
presentMessageForwarding(with: forwardingItem) presentMessageForwarding(with: forwardingItem)
case (.messageForwarding, .dismissMessageForwarding, .room):
break
case (.room, .presentMapNavigator(let mode), .mapNavigator): case (.room, .presentMapNavigator(let mode), .mapNavigator):
presentMapNavigator(interactionMode: mode) presentMapNavigator(interactionMode: mode)
case (.mapNavigator, .dismissMapNavigator, .room):
break
case (.room, .presentPollForm(let mode), .pollForm): case (.room, .presentPollForm(let mode), .pollForm):
presentPollForm(mode: mode) presentPollForm(mode: mode)
case (.pollForm, .dismissPollForm, .room):
break
case (.room, .presentPinnedEventsTimeline, .pinnedEventsTimeline): case (.room, .presentPinnedEventsTimeline, .pinnedEventsTimeline):
startPinnedEventsTimelineFlow() startPinnedEventsTimelineFlow()
case (.pinnedEventsTimeline, .dismissPinnedEventsTimeline, .room):
break
case (.roomDetails, .presentPollsHistory, .pollsHistory): case (.roomDetails, .presentPollsHistory, .pollsHistory):
presentPollsHistory() presentPollsHistory()
case (.pollsHistory, .dismissPollsHistory, .roomDetails):
break
case (.roomDetails, .presentPinnedEventsTimeline, .pinnedEventsTimeline): case (.roomDetails, .presentPinnedEventsTimeline, .pinnedEventsTimeline):
startPinnedEventsTimelineFlow() startPinnedEventsTimelineFlow()
case (.pinnedEventsTimeline, .dismissPinnedEventsTimeline, .roomDetails):
break
case (.pollsHistory, .presentPollForm(let mode), .pollsHistoryForm): case (.pollsHistory, .presentPollForm(let mode), .pollsHistoryForm):
presentPollForm(mode: mode) presentPollForm(mode: mode)
case (.pollsHistoryForm, .dismissPollForm, .pollsHistory):
break
case (.roomDetails, .presentRolesAndPermissionsScreen, .rolesAndPermissions): case (.roomDetails, .presentRolesAndPermissionsScreen, .rolesAndPermissions):
presentRolesAndPermissionsScreen() presentRolesAndPermissionsScreen()
@@ -410,45 +366,26 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
case (.roomDetails, .presentRoomMemberDetails(let userID), .roomMemberDetails): case (.roomDetails, .presentRoomMemberDetails(let userID), .roomMemberDetails):
presentRoomMemberDetails(userID: userID) presentRoomMemberDetails(userID: userID)
case (.roomMemberDetails, .dismissRoomMemberDetails, .roomDetails):
break
case (.roomMemberDetails, .dismissUserProfile, .roomDetails):
break
case (.room, .presentResolveSendFailure(let failure, let sendHandle), .resolveSendFailure): case (.room, .presentResolveSendFailure(let failure, let sendHandle), .resolveSendFailure):
presentResolveSendFailure(failure: failure, sendHandle: sendHandle) presentResolveSendFailure(failure: failure, sendHandle: sendHandle)
case (.resolveSendFailure, .dismissResolveSendFailure, .room):
break
case (.roomDetails, .presentKnockRequestsListScreen, .knockRequestsList): case (.roomDetails, .presentKnockRequestsListScreen, .knockRequestsList):
presentKnockRequestsList() presentKnockRequestsList()
case (.knockRequestsList, .dismissKnockRequestsListScreen, .roomDetails):
break
case (.room, .presentKnockRequestsListScreen, .knockRequestsList): case (.room, .presentKnockRequestsListScreen, .knockRequestsList):
presentKnockRequestsList() presentKnockRequestsList()
case (.knockRequestsList, .dismissKnockRequestsListScreen, .room):
break
case (.roomDetails, .presentMediaEventsTimeline, .mediaEventsTimeline): case (.roomDetails, .presentMediaEventsTimeline, .mediaEventsTimeline):
Task { await self.startMediaEventsTimelineFlow() } Task { await self.startMediaEventsTimelineFlow() }
case (.mediaEventsTimeline, .dismissMediaEventsTimeline, .roomDetails):
break
case (.roomDetails, .presentSecurityAndPrivacyScreen, .securityAndPrivacy): case (.roomDetails, .presentSecurityAndPrivacyScreen, .securityAndPrivacy):
presentSecurityAndPrivacyScreen() presentSecurityAndPrivacyScreen()
case (.securityAndPrivacy, .dismissSecurityAndPrivacyScreen, .roomDetails):
break
case (.roomDetails, .presentReportRoomScreen, .reportRoom): case (.roomDetails, .presentReportRoomScreen, .reportRoom):
presentReportRoom() presentReportRoom()
case (.reportRoom, .dismissReportRoomScreen, .roomDetails):
break
case (.joinRoomScreen, .presentDeclineAndBlockScreen(let userID), .declineAndBlockScreen): case (.joinRoomScreen, .presentDeclineAndBlockScreen(let userID), .declineAndBlockScreen):
presentDeclineAndBlockScreen(userID: userID) presentDeclineAndBlockScreen(userID: userID)
case (.declineAndBlockScreen, .dismissDeclineAndBlockScreen, .joinRoomScreen):
break
// Child flow // Child flow
case (_, .startChildFlow(let roomID, let via, let entryPoint), .presentingChild): case (_, .startChildFlow(let roomID, let via, let entryPoint), .presentingChild):
@@ -457,7 +394,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
childRoomFlowCoordinator = nil childRoomFlowCoordinator = nil
default: default:
fatalError("Unknown transition: \(context)") break
} }
} }