import UIKit import PushFeature import ChatFeature import SearchFeature import LaunchFeature import ChatListFeature import RequestsFeature import DependencyInjection import XXModels import XXMessengerClient extension PushRouter { static func live(navigationController: UINavigationController) -> PushRouter { PushRouter { route, completion in if let launchController = navigationController.viewControllers.last as? LaunchController { launchController.pendingPushRoute = route } else { switch route { case .requests: if !(navigationController.viewControllers.last is RequestsContainerController) { navigationController.setViewControllers([RequestsContainerController()], animated: true) } case .search(username: let username): if let messenger = try? DependencyInjection.Container.shared.resolve() as Messenger, let _ = try? messenger.ud.get()?.getContact() { if !(navigationController.viewControllers.last is SearchContainerController) { navigationController.setViewControllers([ ChatListController(), SearchContainerController(username) ], animated: true) } else { (navigationController.viewControllers.last as? SearchContainerController)?.startSearchingFor(username) } } case .contactChat(id: let id): if let database: Database = try? DependencyInjection.Container.shared.resolve(), let contact = try? database.fetchContacts(.init(id: [id])).first { navigationController.setViewControllers([ ChatListController(), SingleChatController(contact) ], animated: true) } case .groupChat(id: let id): if let database: Database = try? DependencyInjection.Container.shared.resolve(), let info = try? database.fetchGroupInfos(.init(groupId: id)).first { navigationController.setViewControllers([ ChatListController(), GroupChatController(info) ], animated: true) } } } completion() } } }