// // KMLoginWindowsController.swift // PDF Reader Pro // // Created by wanjun on 2024/10/22. // import Cocoa import Combine typealias LoginResultComplete = (_ success: Bool) -> Void @objcMembers class KMLoginWindowsController: NSWindowController { @IBOutlet weak var leftBox: NSBox! @IBOutlet weak var leftImageView: NSImageView! @IBOutlet weak var rightBox: NSBox! var memberInfo: KMMemberInfo = KMMemberInfo.shared var signUpView: KMSignUpView? var loginResult: LoginResultComplete! private var viewModel = KMSignUpViewModel() private var cancellables = Set() static let shared: KMLoginWindowsController = { let windowC = KMLoginWindowsController(windowNibName: "KMLoginWindowsController") return windowC }() override func windowDidLoad() { super.windowDidLoad() // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. // window?.styleMask.insert([.titled, .closable, .miniaturizable, .fullSizeContentView]) // window?.titleVisibility = .visible initializeUI() NotificationCenter.default.addObserver(self, selector: #selector(loginSuccessNotification), name: NSNotification.Name(rawValue: "MemberCenterLoginSuccess"), object: nil) NotificationCenter.default.addObserver(self, selector: #selector(logoutSuccessNotification), name: NSNotification.Name(rawValue: "MemberCenterLogoutSuccess"), object: nil) } // MARK: Private Action private func initializeUI() -> Void { if memberInfo.isLogin { window?.close() } else { leftImageView.image = NSImage(named: "WelcomePDFReaderPro1") guard let parentView = self.window?.contentView else { return } signUpView = KMSignUpView(model: viewModel, superView: parentView) if(signUpView != nil) { signUpView?.frame = rightBox.frame rightBox.contentView = signUpView! } //远程控制 if let loginContent = KMAdvertisementManager.manager.info.loginViewContent { if loginContent.content?.isEmpty == false { let content = loginContent.content?.first let url = URL(string: KMAdvertisementModelTransition.transitionImagePath(image: content?.image, highlight: false)) let _ = KMAdvertisementImage.imageWithURL(url: url) { [weak self] image in guard let self = self else { return } self.leftImageView.image = image } } } let signUpView = KMSignUpView() signUpView.frame = rightBox.frame rightBox.contentView = signUpView rightBox.fillColor = NSColor(named: "membercentercolor") ?? NSColor.white } } @IBAction func leftButtonAction(_ sender: NSButton) { //远程控制 if let loginContent = KMAdvertisementManager.manager.info.loginViewContent { if loginContent.content?.isEmpty == false { let content = loginContent.content?.first let string = KMAdvertisementModelTransition.transitionLanguage(langeuage: content?.linkURL) if string.count != 0 { NSWorkspace.shared.open(URL.init(string: string)!) } } } } // 刷新左侧视图 private func refreshSplitView() -> Void { if viewModel.screenType == .signUp { } } // MARK: public Action @objc func loginSuccessNotification() -> Void { if let result = loginResult { result(true) } window?.close() } @objc func logoutSuccessNotification() -> Void { signUpView?.resetTextFileData() } func openWindow(_ complete: @escaping LoginResultComplete) -> Void { KMLoginWindowsController.shared.showWindow(nil) loginResult = complete } // MARK: Bind Method func bindViewModel() -> Void { viewModel.$screenType .receive(on: RunLoop.main) .sink { [weak self] newValue in self?.refreshSplitView() } .store(in: &cancellables) } }