107 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| import Cocoa
 | |
| import AVFoundation
 | |
| import FlutterMacOS
 | |
| import desktop_multi_window
 | |
| // import bitsdojo_window_macos
 | |
| 
 | |
| import desktop_drop
 | |
| import device_info_plus_macos
 | |
| 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_macos
 | |
| 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"))
 | |
|             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"))
 | |
|             FLTPackageInfoPlusPlugin.register(with: controller.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
 | |
|             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"))
 | |
|             WakelockMacosPlugin.register(with: controller.registrar(forPlugin: "WakelockMacosPlugin"))
 | |
|             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)
 | |
|                 }
 | |
|         })
 | |
|     }
 | |
| }
 |