| 
									
										
										
										
											2022-05-23 16:25:55 +08:00
										 |  |  | import Cocoa | 
					
						
							|  |  |  | import FlutterMacOS | 
					
						
							| 
									
										
										
										
											2022-11-22 23:01:42 +08:00
										 |  |  | import desktop_multi_window | 
					
						
							| 
									
										
										
										
											2022-06-27 10:00:51 +08:00
										 |  |  | // import bitsdojo_window_macos | 
					
						
							| 
									
										
										
										
											2022-05-23 16:25:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-22 23:01:42 +08:00
										 |  |  | import desktop_drop | 
					
						
							|  |  |  | import device_info_plus_macos | 
					
						
							|  |  |  | import flutter_custom_cursor | 
					
						
							|  |  |  | import package_info_plus_macos | 
					
						
							| 
									
										
										
										
											2023-01-28 09:41:05 +08:00
										 |  |  | import path_provider_foundation | 
					
						
							| 
									
										
										
										
											2022-11-22 23:01:42 +08:00
										 |  |  | import screen_retriever | 
					
						
							|  |  |  | import sqflite | 
					
						
							| 
									
										
										
										
											2022-12-02 16:20:46 +08:00
										 |  |  | // import tray_manager | 
					
						
							| 
									
										
										
										
											2022-11-22 23:01:42 +08:00
										 |  |  | import uni_links_desktop | 
					
						
							|  |  |  | import url_launcher_macos | 
					
						
							|  |  |  | import wakelock_macos | 
					
						
							|  |  |  | import window_manager | 
					
						
							|  |  |  | import window_size | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-27 10:00:51 +08:00
										 |  |  | class MainFlutterWindow: NSWindow { | 
					
						
							| 
									
										
										
										
											2022-06-02 16:13:34 +08:00
										 |  |  |     override func awakeFromNib() { | 
					
						
							|  |  |  |         if (!rustdesk_core_main()){ | 
					
						
							|  |  |  |             print("Rustdesk core returns false, exiting without launching Flutter app") | 
					
						
							|  |  |  |             NSApplication.shared.terminate(self) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         let flutterViewController = FlutterViewController.init() | 
					
						
							|  |  |  |         let windowFrame = self.frame | 
					
						
							|  |  |  |         self.contentViewController = flutterViewController | 
					
						
							|  |  |  |         self.setFrame(windowFrame, display: true) | 
					
						
							| 
									
										
										
										
											2023-02-02 13:57:20 +08:00
										 |  |  |         // register self method handler | 
					
						
							|  |  |  |         let registrar = flutterViewController.registrar(forPlugin: "RustDeskPlugin") | 
					
						
							|  |  |  |         setMethodHandler(registrar: registrar) | 
					
						
							| 
									
										
										
										
											2022-06-02 16:13:34 +08:00
										 |  |  |          | 
					
						
							|  |  |  |         RegisterGeneratedPlugins(registry: flutterViewController) | 
					
						
							| 
									
										
										
										
											2022-11-22 23:01:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         FlutterMultiWindowPlugin.setOnWindowCreatedCallback { controller in | 
					
						
							|  |  |  |             // Register the plugin which you want access from other isolate. | 
					
						
							|  |  |  |             // DesktopLifecyclePlugin.register(with: controller.registrar(forPlugin: "DesktopLifecyclePlugin")) | 
					
						
							| 
									
										
										
										
											2023-02-02 13:57:20 +08:00
										 |  |  |             self.setMethodHandler(registrar: controller.registrar(forPlugin: "RustDeskPlugin")) | 
					
						
							| 
									
										
										
										
											2022-11-22 23:01:42 +08:00
										 |  |  |             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")) | 
					
						
							| 
									
										
										
										
											2022-12-02 16:20:46 +08:00
										 |  |  |             // TrayManagerPlugin.register(with: controller.registrar(forPlugin: "TrayManagerPlugin")) | 
					
						
							| 
									
										
										
										
											2022-11-22 23:01:42 +08:00
										 |  |  |             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")) | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-06-02 16:13:34 +08:00
										 |  |  |          | 
					
						
							|  |  |  |         super.awakeFromNib() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2023-01-06 20:40:29 -08:00
										 |  |  |     override public func order(_ place: NSWindow.OrderingMode, relativeTo otherWin: Int) { | 
					
						
							|  |  |  |         super.order(place, relativeTo: otherWin) | 
					
						
							|  |  |  |         hiddenWindowAtLaunch() | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-02-02 13:57:20 +08:00
										 |  |  |      | 
					
						
							|  |  |  |     /// 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; | 
					
						
							| 
									
										
										
										
											2023-02-03 17:08:40 +08:00
										 |  |  |                 case "terminate": | 
					
						
							|  |  |  |                     NSApplication.shared.terminate(self) | 
					
						
							|  |  |  |                     result(nil) | 
					
						
							| 
									
										
										
										
											2023-02-02 13:57:20 +08:00
										 |  |  |                 default: | 
					
						
							|  |  |  |                     result(FlutterMethodNotImplemented) | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-05-23 16:25:55 +08:00
										 |  |  | } |