mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
102 lines
4.3 KiB
Swift
102 lines
4.3 KiB
Swift
import Foundation
|
|
import LegacyComponents
|
|
import Display
|
|
import UIKit
|
|
import TelegramCore
|
|
import Postbox
|
|
|
|
func presentedLegacyCamera(account: Account, peer: Peer, cameraView: TGAttachmentCameraView?, menuController: TGMenuSheetController?, parentController: ViewController, sendMessagesWithSignals: @escaping ([Any]?) -> Void) {
|
|
let legacyController = LegacyController(presentation: .custom)
|
|
legacyController.statusBar.statusBarStyle = .Hide
|
|
|
|
let controller: TGCameraController
|
|
if let cameraView = cameraView, let previewView = cameraView.previewView() {
|
|
controller = TGCameraController(context: legacyController.context, saveEditedPhotos: true, saveCapturedMedia: true, camera: previewView.camera, previewView: previewView, intent: TGCameraControllerGenericIntent)
|
|
} else {
|
|
controller = TGCameraController()
|
|
}
|
|
|
|
controller.isImportant = true
|
|
controller.shouldStoreCapturedAssets = true
|
|
controller.allowCaptions = true
|
|
controller.inhibitDocumentCaptions = false
|
|
controller.suggestionContext = legacySuggestionContext(account: account, peerId: peer.id)
|
|
controller.recipientName = peer.displayTitle
|
|
if peer is TelegramUser || peer is TelegramSecretChat {
|
|
controller.hasTimer = true
|
|
}
|
|
|
|
let screenSize = parentController.view.bounds.size
|
|
var startFrame = CGRect(x: 0, y: screenSize.height, width: screenSize.width, height: screenSize.height)
|
|
if let cameraView = cameraView, let menuController = menuController {
|
|
startFrame = menuController.view.convert(cameraView.previewView()!.frame, from: cameraView)
|
|
}
|
|
|
|
legacyController.bind(controller: controller)
|
|
legacyController.controllerLoaded = { [weak controller] in
|
|
if let controller = controller {
|
|
cameraView?.detachPreviewView()
|
|
controller.beginTransitionIn(from: startFrame)
|
|
}
|
|
}
|
|
|
|
controller.beginTransitionOut = { [weak controller, weak cameraView] in
|
|
if let controller = controller, let cameraView = cameraView {
|
|
cameraView.willAttachPreviewView()
|
|
return controller.view.convert(cameraView.frame, from: cameraView.superview)
|
|
} else {
|
|
return CGRect()
|
|
}
|
|
}
|
|
|
|
controller.finishedTransitionOut = { [weak cameraView, weak legacyController] in
|
|
if let cameraView = cameraView {
|
|
cameraView.attachPreviewView(animated: true)
|
|
}
|
|
legacyController?.dismiss()
|
|
}
|
|
|
|
controller.finishedWithPhoto = { [weak menuController, weak legacyController] overlayController, image, caption, stickers, timer in
|
|
if let image = image {
|
|
let description = NSMutableDictionary()
|
|
description["type"] = "capturedPhoto"
|
|
description["image"] = image
|
|
if let timer = timer {
|
|
description["timer"] = timer
|
|
}
|
|
if let item = legacyAssetPickerItemGenerator()(description, caption, nil) {
|
|
sendMessagesWithSignals([SSignal.single(item)])
|
|
}
|
|
}
|
|
|
|
menuController?.dismiss(animated: false)
|
|
legacyController?.dismissWithAnimation()
|
|
}
|
|
|
|
controller.finishedWithVideo = { [weak menuController, weak legacyController] overlayController, videoURL, previewImage, duration, dimensions, adjustments, caption, stickers, timer in
|
|
if let videoURL = videoURL {
|
|
let description = NSMutableDictionary()
|
|
description["type"] = "video"
|
|
description["url"] = videoURL.path
|
|
if let previewImage = previewImage {
|
|
description["previewImage"] = previewImage
|
|
}
|
|
if let adjustments = adjustments {
|
|
description["adjustments"] = adjustments
|
|
}
|
|
description["duration"] = duration as NSNumber
|
|
description["dimensions"] = NSValue(cgSize: dimensions)
|
|
if let timer = timer {
|
|
description["timer"] = timer
|
|
}
|
|
if let item = legacyAssetPickerItemGenerator()(description, caption, nil) {
|
|
sendMessagesWithSignals([SSignal.single(item)])
|
|
}
|
|
}
|
|
menuController?.dismiss(animated: false)
|
|
legacyController?.dismissWithAnimation()
|
|
}
|
|
|
|
parentController.present(legacyController, in: .window(.root))
|
|
}
|