import Foundation import SwiftSignalKit import Postbox import TelegramCore import TelegramPresentationData import TelegramUIPreferences import AnimationCache import MultiAnimationRenderer public protocol ShareControllerAccountContext: AnyObject { var accountId: AccountRecordId { get } var accountPeerId: EnginePeer.Id { get } var stateManager: AccountStateManager { get } var engineData: TelegramEngine.EngineData { get } var animationCache: AnimationCache { get } var animationRenderer: MultiAnimationRenderer { get } var contentSettings: ContentSettings { get } var appConfiguration: AppConfiguration { get } func resolveInlineStickers(fileIds: [Int64]) -> Signal<[Int64: TelegramMediaFile], NoError> } public protocol ShareControllerEnvironment: AnyObject { var presentationData: PresentationData { get } var updatedPresentationData: Signal { get } var isMainApp: Bool { get } var energyUsageSettings: EnergyUsageSettings { get } var mediaManager: MediaManager? { get } func setAccountUserInterfaceInUse(id: AccountRecordId) -> Disposable func donateSendMessageIntent(account: ShareControllerAccountContext, peerIds: [EnginePeer.Id]) } public enum ShareControllerExternalStatus { case preparing(Bool) case progress(Float) case done } public enum ShareControllerError { case generic case fileTooBig(Int64) } public enum ShareControllerSubject { case url(String) case text(String) case quote(text: String, url: String) case messages([Message]) case image([ImageRepresentationWithReference]) case media(AnyMediaReference) case mapMedia(TelegramMediaMap) case fromExternal(([PeerId], [PeerId: Int64], String, ShareControllerAccountContext, Bool) -> Signal) }