omnivore/apple/Sources/ShareExtension/ShareExtensionViewController.swift

139 lines
4.1 KiB
Swift
Raw Normal View History

2022-02-24 23:07:32 +00:00
import App
2023-10-30 02:33:56 +00:00
import Services
import SwiftUI
2022-02-11 17:24:33 +00:00
import Utils
import Views
2022-02-11 17:24:33 +00:00
#if os(iOS)
import UIKit
@objc(ShareExtensionViewController)
2024-03-21 02:17:50 +00:00
final class ShareExtensionViewController: UIViewController, UIGestureRecognizerDelegate {
2023-10-30 02:33:56 +00:00
let labelsViewModel = LabelsViewModel()
let viewModel = ShareExtensionViewModel()
2022-02-11 17:24:33 +00:00
override func viewDidLoad() {
super.viewDidLoad()
2024-03-21 02:17:50 +00:00
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)
2022-02-11 17:24:33 +00:00
if !viewModel.services.authenticator.isLoggedIn,
!viewModel.services.dataService.appEnvironment.environmentConfigured
{
embed(
childViewController: UIViewController.makeLoggedOutShareExtensionController(extensionContext: extensionContext),
heightRatio: 0.60
)
return
}
2023-10-30 02:33:56 +00:00
NotificationCenter.default.addObserver(
forName: Notification.Name("ShowAddNoteSheet"),
object: nil,
queue: OperationQueue.main
) { _ in
self.openSheet(AnyView(AddNoteSheet(viewModel: self.viewModel)))
}
2023-10-30 02:33:56 +00:00
NotificationCenter.default.addObserver(
forName: Notification.Name("ShowEditLabelsSheet"),
object: nil,
queue: OperationQueue.main
) { _ in
self.openSheet(AnyView(EditLabelsSheet(viewModel: self.viewModel, labelsViewModel: self.labelsViewModel)))
}
2023-10-30 11:16:47 +00:00
NotificationCenter.default.addObserver(
forName: Notification.Name("ShowEditInfoSheet"),
object: nil,
queue: OperationQueue.main
) { _ in
self.openSheet(AnyView(EditInfoSheet(viewModel: self.viewModel)))
}
2022-02-11 17:24:33 +00:00
embed(
2023-10-30 02:33:56 +00:00
childViewController: UIViewController.makeShareExtensionController(
viewModel: viewModel,
labelsViewModel: labelsViewModel,
extensionContext: extensionContext
),
heightRatio: 0.60
2022-02-11 17:24:33 +00:00
)
}
2024-03-21 02:17:50 +00:00
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
return touch.view == gestureRecognizer.view
}
@objc func viewTapped(_ panGesture: UIGestureRecognizer) {
viewModel.dismissExtension(extensionContext: extensionContext)
}
2023-10-30 02:33:56 +00:00
func openSheet(_ rootView: AnyView) {
let hostingController = UIHostingController(rootView: rootView)
present(hostingController, animated: true, completion: nil)
}
2022-02-11 17:24:33 +00:00
}
#elseif os(macOS)
import Cocoa
class ShareViewController: NSViewController {
2023-11-10 04:41:30 +00:00
let labelsViewModel = LabelsViewModel()
let viewModel = ShareExtensionViewModel()
2022-02-11 17:24:33 +00:00
override func loadView() {
2023-11-10 12:33:05 +00:00
view = NSView(frame: NSRect(x: 0, y: 0, width: 400, height: 300))
2022-02-11 17:24:33 +00:00
}
override func viewDidLoad() {
super.viewDidLoad()
2023-11-10 12:33:05 +00:00
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)))
}
2022-02-11 17:24:33 +00:00
embed(
2023-11-10 04:41:30 +00:00
childViewController: NSViewController.makeShareExtensionController(
viewModel: viewModel,
labelsViewModel: labelsViewModel,
extensionContext: extensionContext
)
2022-02-11 17:24:33 +00:00
)
}
2023-11-10 12:33:05 +00:00
func openSheet(_ rootView: AnyView) {
let hostingController = PlatformHostingController(rootView: rootView)
presentAsSheet(hostingController)
}
2022-02-11 17:24:33 +00:00
}
#endif