import Foundation import UIKit import SwiftSignalKit import Postbox import TelegramCore import AsyncDisplayKit import Display import UndoUI import AccountContext import ChatControllerInteraction extension ChatControllerImpl { func displayPostedScheduledMessagesToast(ids: [EngineMessage.Id]) { let timestamp = CFAbsoluteTimeGetCurrent() if self.lastPostedScheduledMessagesToastTimestamp + 0.4 >= timestamp { return } self.lastPostedScheduledMessagesToastTimestamp = timestamp guard case .scheduledMessages = self.presentationInterfaceState.subject else { return } let _ = (self.context.engine.data.get( EngineDataList(ids.map(TelegramEngine.EngineData.Item.Messages.Message.init(id:))) ) |> deliverOnMainQueue).startStandalone(next: { [weak self] messages in guard let self else { return } let messages = messages.compactMap { $0 } var found: (message: EngineMessage, file: TelegramMediaFile)? outer: for message in messages { for media in message.media { if let file = media as? TelegramMediaFile, file.isVideo { found = (message, file) break outer } } } guard let (message, file) = found else { return } guard case let .loaded(isEmpty, _) = self.chatDisplayNode.historyNode.currentHistoryState else { return } if isEmpty { if let navigationController = self.navigationController as? NavigationController, let topController = navigationController.viewControllers.first(where: { c in if let c = c as? ChatController, c.chatLocation == self.chatLocation { return true } return false }) as? ChatControllerImpl { topController.controllerInteraction?.presentControllerInCurrent(UndoOverlayController( presentationData: self.presentationData, content: .media( context: self.context, file: .message(message: MessageReference(message._asMessage()), media: file), title: nil, text: self.presentationData.strings.Chat_ToastVideoPublished_Title, undoText: nil, customAction: nil ), elevatedLayout: false, position: .top, animateInAsReplacement: false, action: { _ in false } ), nil) self.dismiss() } } else { self.controllerInteraction?.presentControllerInCurrent(UndoOverlayController( presentationData: self.presentationData, content: .media( context: self.context, file: .message(message: MessageReference(message._asMessage()), media: file), title: nil, text: self.presentationData.strings.Chat_ToastVideoPublished_Title, undoText: self.presentationData.strings.Chat_ToastVideoPublished_Action, customAction: { [weak self] in guard let self else { return } self.dismiss() } ), elevatedLayout: false, position: .top, animateInAsReplacement: false, action: { _ in false } ), nil) } }) } }