123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import Cocoa
- import AVFoundation
- import FlutterMacOS
- import desktop_multi_window
- // import bitsdojo_window_macos
- import desktop_drop
- import device_info_plus
- import flutter_custom_cursor
- import package_info_plus
- import path_provider_foundation
- import screen_retriever
- import sqflite
- // import tray_manager
- import uni_links_desktop
- import url_launcher_macos
- import wakelock_plus
- import window_manager
- import window_size
- import texture_rgba_renderer
- class MainFlutterWindow: NSWindow {
- override func awakeFromNib() {
- rustdesk_core_main();
- let flutterViewController = FlutterViewController.init()
- let windowFrame = self.frame
- self.contentViewController = flutterViewController
- self.setFrame(windowFrame, display: true)
- // register self method handler
- let registrar = flutterViewController.registrar(forPlugin: "RustDeskPlugin")
- setMethodHandler(registrar: registrar)
-
- RegisterGeneratedPlugins(registry: flutterViewController)
- FlutterMultiWindowPlugin.setOnWindowCreatedCallback { controller in
- // Register the plugin which you want access from other isolate.
- // DesktopLifecyclePlugin.register(with: controller.registrar(forPlugin: "DesktopLifecyclePlugin"))
- // Note: copy below from above RegisterGeneratedPlugins
- self.setMethodHandler(registrar: controller.registrar(forPlugin: "RustDeskPlugin"))
- DesktopDropPlugin.register(with: controller.registrar(forPlugin: "DesktopDropPlugin"))
- DeviceInfoPlusMacosPlugin.register(with: controller.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
- FlutterCustomCursorPlugin.register(with: controller.registrar(forPlugin: "FlutterCustomCursorPlugin"))
- FPPPackageInfoPlusPlugin.register(with: controller.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
- PathProviderPlugin.register(with: controller.registrar(forPlugin: "PathProviderPlugin"))
- SqflitePlugin.register(with: controller.registrar(forPlugin: "SqflitePlugin"))
- // TrayManagerPlugin.register(with: controller.registrar(forPlugin: "TrayManagerPlugin"))
- UniLinksDesktopPlugin.register(with: controller.registrar(forPlugin: "UniLinksDesktopPlugin"))
- UrlLauncherPlugin.register(with: controller.registrar(forPlugin: "UrlLauncherPlugin"))
- WakelockPlusMacosPlugin.register(with: controller.registrar(forPlugin: "WakelockPlusMacosPlugin"))
- WindowSizePlugin.register(with: controller.registrar(forPlugin: "WindowSizePlugin"))
- TextureRgbaRendererPlugin.register(with: controller.registrar(forPlugin: "TextureRgbaRendererPlugin"))
- }
-
- super.awakeFromNib()
- }
-
- override public func order(_ place: NSWindow.OrderingMode, relativeTo otherWin: Int) {
- super.order(place, relativeTo: otherWin)
- hiddenWindowAtLaunch()
- }
-
- /// Override window theme.
- public func setWindowInterfaceMode(window: NSWindow, themeName: String) {
- window.appearance = NSAppearance(named: themeName == "light" ? .aqua : .darkAqua)
- }
-
- public func setMethodHandler(registrar: FlutterPluginRegistrar) {
- let channel = FlutterMethodChannel(name: "org.rustdesk.rustdesk/macos", binaryMessenger: registrar.messenger)
- channel.setMethodCallHandler({
- (call, result) -> Void in
- switch call.method {
- case "setWindowTheme":
- let arg = call.arguments as! [String: Any]
- let themeName = arg["themeName"] as? String
- guard let window = registrar.view?.window else {
- result(nil)
- return
- }
- self.setWindowInterfaceMode(window: window,themeName: themeName ?? "light")
- result(nil)
- break;
- case "terminate":
- NSApplication.shared.terminate(self)
- result(nil)
- case "canRecordAudio":
- switch AVCaptureDevice.authorizationStatus(for: .audio) {
- case .authorized:
- result(1)
- break
- case .notDetermined:
- result(0)
- break
- default:
- result(-1)
- break
- }
- case "requestRecordAudio":
- AVCaptureDevice.requestAccess(for: .audio, completionHandler: { granted in
- result(granted)
- })
- break
- default:
- result(FlutterMethodNotImplemented)
- }
- })
- }
- }
|