mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Camera and media editor improvements
This commit is contained in:
@@ -18,6 +18,7 @@ import TabBarUI
|
||||
import WallpaperBackgroundNode
|
||||
import ChatPresentationInterfaceState
|
||||
import CameraScreen
|
||||
import MediaEditorScreen
|
||||
import LegacyComponents
|
||||
import LegacyMediaPickerUI
|
||||
import LegacyCamera
|
||||
@@ -255,51 +256,61 @@ public final class TelegramRootController: NavigationController {
|
||||
}
|
||||
controller.view.endEditing(true)
|
||||
|
||||
let context = self.context
|
||||
|
||||
var presentImpl: ((ViewController) -> Void)?
|
||||
var returnToCameraImpl: (() -> Void)?
|
||||
var dismissCameraImpl: (() -> Void)?
|
||||
let cameraController = CameraScreen(context: self.context, mode: .story, completion: { [weak self] result in
|
||||
if let self {
|
||||
let item: TGMediaEditableItem & TGMediaSelectableItem
|
||||
let _ = presentImpl
|
||||
let _ = returnToCameraImpl
|
||||
let _ = dismissCameraImpl
|
||||
let cameraController = CameraScreen(context: context, mode: .story, completion: { result in
|
||||
let subject: Signal<MediaEditorScreen.Subject?, NoError> = result
|
||||
|> map { value -> MediaEditorScreen.Subject? in
|
||||
switch value {
|
||||
case .pendingImage:
|
||||
return nil
|
||||
case let .image(image):
|
||||
return .image(image, PixelDimensions(image.size))
|
||||
case let .video(path, dimensions):
|
||||
return .video(path, dimensions)
|
||||
case let .asset(asset):
|
||||
return .asset(asset)
|
||||
}
|
||||
}
|
||||
let controller = MediaEditorScreen(context: context, subject: subject, completion: { result in
|
||||
switch result {
|
||||
case let .image(image):
|
||||
item = TGCameraCapturedPhoto(existing: image)
|
||||
case let .video(path):
|
||||
item = TGCameraCapturedVideo(url: URL(fileURLWithPath: path))
|
||||
case let .asset(asset):
|
||||
item = TGMediaAsset(phAsset: asset)
|
||||
}
|
||||
let context = self.context
|
||||
legacyStoryMediaEditor(context: self.context, item: item, getCaptionPanelView: { return nil }, completion: { result in
|
||||
dismissCameraImpl?()
|
||||
switch result {
|
||||
case let .image(image):
|
||||
_ = image
|
||||
case let .video(path):
|
||||
_ = path
|
||||
case let .asset(asset):
|
||||
let options = PHImageRequestOptions()
|
||||
options.deliveryMode = .highQualityFormat
|
||||
options.isNetworkAccessAllowed = true
|
||||
PHImageManager.default().requestImageData(for: asset, options:options, resultHandler: { data, _, _, _ in
|
||||
if let data, let image = UIImage(data: data) {
|
||||
Queue.mainQueue().async {
|
||||
let _ = context.engine.messages.uploadStory(media: .image(dimensions: PixelDimensions(image.size), data: data)).start()
|
||||
}
|
||||
}
|
||||
})
|
||||
if let data = image.jpegData(compressionQuality: 0.8) {
|
||||
let _ = context.engine.messages.uploadStory(media: .image(dimensions: PixelDimensions(image.size), data: data)).start()
|
||||
}
|
||||
}, present: { c, a in
|
||||
presentImpl?(c)
|
||||
})
|
||||
case .video:
|
||||
break
|
||||
}
|
||||
dismissCameraImpl?()
|
||||
})
|
||||
controller.sourceHint = .camera
|
||||
controller.cancelled = {
|
||||
returnToCameraImpl?()
|
||||
}
|
||||
presentImpl?(controller)
|
||||
})
|
||||
controller.push(cameraController)
|
||||
presentImpl = { [weak cameraController] c in
|
||||
cameraController?.present(c, in: .window(.root))
|
||||
if let navigationController = cameraController?.navigationController as? NavigationController {
|
||||
var controllers = navigationController.viewControllers
|
||||
controllers.append(c)
|
||||
navigationController.setViewControllers(controllers, animated: false)
|
||||
}
|
||||
}
|
||||
dismissCameraImpl = { [weak cameraController] in
|
||||
cameraController?.dismiss(animated: false)
|
||||
}
|
||||
returnToCameraImpl = { [weak cameraController] in
|
||||
if let cameraController {
|
||||
cameraController.returnFromEditor()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public func openSettings() {
|
||||
|
||||
Reference in New Issue
Block a user