110 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			4.8 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_macos
 | 
						|
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() {
 | 
						|
        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)
 | 
						|
        // 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)
 | 
						|
                }
 | 
						|
        })
 | 
						|
    }
 | 
						|
}
 |