Swiftgram/submodules/TelegramUI/Sources/Chat/ChatControllerToasts.swift
2024-10-29 15:01:51 +01:00

101 lines
4.0 KiB
Swift

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)
}
})
}
}