Files
omnivore/apple/Sources/ShareExtension/ShareExtensionViewController.swift
2024-03-21 10:17:50 +08:00

139 lines
4.1 KiB
Swift

import App
import Services
import SwiftUI
import Utils
import Views
#if os(iOS)
import UIKit
@objc(ShareExtensionViewController)
final class ShareExtensionViewController: UIViewController, UIGestureRecognizerDelegate {
let labelsViewModel = LabelsViewModel()
let viewModel = ShareExtensionViewModel()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor(white: 1.0, alpha: 0.001)
view.isUserInteractionEnabled = true
let dismissGesture = UITapGestureRecognizer(target: self, action: #selector(self.viewTapped(_:)))
dismissGesture.delegate = self
view.addGestureRecognizer(dismissGesture)
if !viewModel.services.authenticator.isLoggedIn,
!viewModel.services.dataService.appEnvironment.environmentConfigured
{
embed(
childViewController: UIViewController.makeLoggedOutShareExtensionController(extensionContext: extensionContext),
heightRatio: 0.60
)
return
}
NotificationCenter.default.addObserver(
forName: Notification.Name("ShowAddNoteSheet"),
object: nil,
queue: OperationQueue.main
) { _ in
self.openSheet(AnyView(AddNoteSheet(viewModel: self.viewModel)))
}
NotificationCenter.default.addObserver(
forName: Notification.Name("ShowEditLabelsSheet"),
object: nil,
queue: OperationQueue.main
) { _ in
self.openSheet(AnyView(EditLabelsSheet(viewModel: self.viewModel, labelsViewModel: self.labelsViewModel)))
}
NotificationCenter.default.addObserver(
forName: Notification.Name("ShowEditInfoSheet"),
object: nil,
queue: OperationQueue.main
) { _ in
self.openSheet(AnyView(EditInfoSheet(viewModel: self.viewModel)))
}
embed(
childViewController: UIViewController.makeShareExtensionController(
viewModel: viewModel,
labelsViewModel: labelsViewModel,
extensionContext: extensionContext
),
heightRatio: 0.60
)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return touch.view == gestureRecognizer.view
}
@objc func viewTapped(_ panGesture: UIGestureRecognizer) {
viewModel.dismissExtension(extensionContext: extensionContext)
}
func openSheet(_ rootView: AnyView) {
let hostingController = UIHostingController(rootView: rootView)
present(hostingController, animated: true, completion: nil)
}
}
#elseif os(macOS)
import Cocoa
class ShareViewController: NSViewController {
let labelsViewModel = LabelsViewModel()
let viewModel = ShareExtensionViewModel()
override func loadView() {
view = NSView(frame: NSRect(x: 0, y: 0, width: 400, height: 300))
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(
forName: Notification.Name("ShowAddNoteSheet"),
object: nil,
queue: OperationQueue.main
) { _ in
self.openSheet(AnyView(AddNoteSheet(viewModel: self.viewModel)))
}
NotificationCenter.default.addObserver(
forName: Notification.Name("ShowEditLabelsSheet"),
object: nil,
queue: OperationQueue.main
) { _ in
self.openSheet(AnyView(EditLabelsSheet(viewModel: self.viewModel, labelsViewModel: self.labelsViewModel)))
}
NotificationCenter.default.addObserver(
forName: Notification.Name("ShowEditInfoSheet"),
object: nil,
queue: OperationQueue.main
) { _ in
self.openSheet(AnyView(EditInfoSheet(viewModel: self.viewModel)))
}
embed(
childViewController: NSViewController.makeShareExtensionController(
viewModel: viewModel,
labelsViewModel: labelsViewModel,
extensionContext: extensionContext
)
)
}
func openSheet(_ rootView: AnyView) {
let hostingController = PlatformHostingController(rootView: rootView)
presentAsSheet(hostingController)
}
}
#endif