Instant View: reference view, scroll position saving, overlay progresses for photos and more

This commit is contained in:
Ilya Laktyushin
2018-11-27 21:28:38 +04:00
parent 394b204f29
commit 3a0d33ef7d
66 changed files with 4032 additions and 3299 deletions

View File

@@ -9,21 +9,22 @@ public enum NavigateToChatKeepStack {
case never
}
public func navigateToChatController(navigationController: NavigationController, chatController: ChatController? = nil, account: Account, chatLocation: ChatLocation, messageId: MessageId? = nil, botStart: ChatControllerInitialBotStart? = nil, keepStack: NavigateToChatKeepStack = .default, purposefulAction: (() -> Void)? = nil, animated: Bool = true, completion: @escaping () -> Void = {}) {
public func navigateToChatController(navigationController: NavigationController, chatController: ChatController? = nil, account: Account, chatLocation: ChatLocation, messageId: MessageId? = nil, botStart: ChatControllerInitialBotStart? = nil, keepStack: NavigateToChatKeepStack = .default, purposefulAction: (() -> Void)? = nil, scrollToEndIfExists: Bool = false, animated: Bool = true, completion: @escaping () -> Void = {}) {
var found = false
var isFirst = true
for controller in navigationController.viewControllers.reversed() {
if let controller = controller as? ChatController, controller.chatLocation == chatLocation {
if let messageId = messageId {
controller.purposefulAction = purposefulAction
controller.navigateToMessage(messageLocation: .id(messageId), animated: isFirst, completion: { [weak navigationController, weak controller] in
if let navigationController = navigationController, let controller = controller {
let _ = navigationController.popToViewController(controller, animated: animated)
}
})
} else {
let _ = navigationController.popToViewController(controller, animated: animated)
} else if scrollToEndIfExists && isFirst {
controller.scrollToEndOfHistory()
}
controller.purposefulAction = purposefulAction
let _ = navigationController.popToViewController(controller, animated: animated)
completion()
found = true
break