123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- //
- // 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 leftsubImageView: NSImageView!
- @IBOutlet weak var leftsubLabel: NSTextField!
- @IBOutlet weak var rightBox: NSBox!
-
- var memberInfo: KMMemberInfo = KMMemberInfo.shared
-
- var signUpView: KMSignUpView?
-
- var loginResult: LoginResultComplete!
-
- private var viewModel = KMSignUpViewModel()
- private var cancellables = Set<AnyCancellable>()
- 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
-
- leftsubLabel.stringValue = NSLocalizedString("Welcome to PDF Reader Pro", tableName: "MemberCenterLocalizable", comment: "")
-
- 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)
-
- rightBox.addObserver(self, forKeyPath: "contentView", options: [.new, .old], context: nil)
- }
-
- override func showWindow(_ sender: Any?) {
- super.showWindow(sender)
-
- initializeUI()
- }
-
- deinit {
- rightBox.removeObserver(self, forKeyPath: "contentView")
- }
-
- // MARK: Private Action
-
- private func initializeUI() -> Void {
- if memberInfo.isLogin {
- window?.close()
- } else {
- guard let parentView = self.window?.contentView else { return }
- signUpView = KMSignUpView(model: viewModel, superView: parentView)
- if(signUpView != nil) {
- signUpView?.frame = rightBox.frame
- rightBox.contentView = signUpView!
- }
-
- 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 {
- leftImageView.image = NSImage(named: "WelcomePDFReaderPro1")
- self.leftsubLabel.isHidden = false
- self.leftsubImageView.isHidden = false
- if viewModel.screenType == .signUp {
- leftsubImageView.image = NSImage(named: "WelcomeSubPDFReaderPro")
- //远程控制
- 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 }
- if image.isValid {
- self.leftImageView.image = image
- self.leftsubLabel.isHidden = true
- self.leftsubImageView.isHidden = true
- }
- }
- }
- }
- } else {
- leftsubImageView.image = NSImage(named: "WelcomeSub2PDFReaderPro")
- }
- }
-
- // 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)
-
- }
-
- override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
- if keyPath == "contentView" {
- if let newContentView = change?[.newKey] as? NSView {
- if newContentView is KMSignUpView {
- viewModel.screenType = .signUp
- } else if newContentView is KMForgotPasswordView {
- viewModel.screenType = .forgotPassword
- } else if newContentView is KMEnterVerificationCodeView {
- viewModel.screenType = .enterVerificationCode
- } else if newContentView is KMEnterNewPasswordView {
- viewModel.screenType = .enterNewPassword
- }
- refreshSplitView()
- }
- }
- }
- }
|