KMLoginWindowsController.swift 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. //
  2. // KMLoginWindowsController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by wanjun on 2024/10/22.
  6. //
  7. import Cocoa
  8. import Combine
  9. typealias LoginResultComplete = (_ success: Bool) -> Void
  10. @objcMembers
  11. class KMLoginWindowsController: NSWindowController {
  12. @IBOutlet weak var leftBox: NSBox!
  13. @IBOutlet weak var leftImageView: NSImageView!
  14. @IBOutlet weak var leftsubImageView: NSImageView!
  15. @IBOutlet weak var leftsubLabel: NSTextField!
  16. @IBOutlet weak var rightBox: NSBox!
  17. var memberInfo: KMMemberInfo = KMMemberInfo.shared
  18. var signUpView: KMSignUpView?
  19. var loginResult: LoginResultComplete!
  20. private var viewModel = KMSignUpViewModel()
  21. private var cancellables = Set<AnyCancellable>()
  22. static let shared: KMLoginWindowsController = {
  23. let windowC = KMLoginWindowsController(windowNibName: "KMLoginWindowsController")
  24. return windowC
  25. }()
  26. override func windowDidLoad() {
  27. super.windowDidLoad()
  28. // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
  29. // window?.styleMask.insert([.titled, .closable, .miniaturizable, .fullSizeContentView])
  30. // window?.titleVisibility = .visible
  31. leftsubLabel.stringValue = NSLocalizedString("Welcome to PDF Reader Pro", tableName: "MemberCenterLocalizable", comment: "")
  32. initializeUI()
  33. NotificationCenter.default.addObserver(self, selector: #selector(loginSuccessNotification), name: NSNotification.Name(rawValue: "MemberCenterLoginSuccess"), object: nil)
  34. NotificationCenter.default.addObserver(self, selector: #selector(logoutSuccessNotification), name: NSNotification.Name(rawValue: "MemberCenterLogoutSuccess"), object: nil)
  35. }
  36. // MARK: Private Action
  37. private func initializeUI() -> Void {
  38. if memberInfo.isLogin {
  39. window?.close()
  40. } else {
  41. guard let parentView = self.window?.contentView else { return }
  42. signUpView = KMSignUpView(model: viewModel, superView: parentView)
  43. if(signUpView != nil) {
  44. signUpView?.frame = rightBox.frame
  45. rightBox.contentView = signUpView!
  46. }
  47. let signUpView = KMSignUpView()
  48. signUpView.frame = rightBox.frame
  49. rightBox.contentView = signUpView
  50. rightBox.fillColor = NSColor(named: "membercentercolor") ?? NSColor.white
  51. }
  52. }
  53. @IBAction func leftButtonAction(_ sender: NSButton) {
  54. //远程控制
  55. if let loginContent = KMAdvertisementManager.manager.info.loginViewContent {
  56. if loginContent.content?.isEmpty == false {
  57. let content = loginContent.content?.first
  58. let string = KMAdvertisementModelTransition.transitionLanguage(langeuage: content?.linkURL)
  59. if string.count != 0 {
  60. NSWorkspace.shared.open(URL.init(string: string)!)
  61. }
  62. }
  63. }
  64. }
  65. // 刷新左侧视图
  66. private func refreshSplitView() -> Void {
  67. leftImageView.image = NSImage(named: "WelcomePDFReaderPro1")
  68. self.leftsubLabel.isHidden = false
  69. self.leftsubImageView.isHidden = false
  70. if viewModel.screenType == .signUp {
  71. leftsubImageView.image = NSImage(named: "WelcomeSubPDFReaderPro")
  72. //远程控制
  73. if let loginContent = KMAdvertisementManager.manager.info.loginViewContent {
  74. if loginContent.content?.isEmpty == false {
  75. let content = loginContent.content?.first
  76. let url = URL(string: KMAdvertisementModelTransition.transitionImagePath(image: content?.image, highlight: false))
  77. let _ = KMAdvertisementImage.imageWithURL(url: url) { [weak self] image in
  78. guard let self = self else { return }
  79. self.leftImageView.image = image
  80. self.leftsubLabel.isHidden = true
  81. self.leftsubImageView.isHidden = true
  82. }
  83. }
  84. }
  85. } else {
  86. leftsubImageView.image = NSImage(named: "WelcomeSub2PDFReaderPro")
  87. }
  88. }
  89. // MARK: public Action
  90. @objc func loginSuccessNotification() -> Void {
  91. if let result = loginResult {
  92. result(true)
  93. }
  94. window?.close()
  95. }
  96. @objc func logoutSuccessNotification() -> Void {
  97. signUpView?.resetTextFileData()
  98. }
  99. func openWindow(_ complete: @escaping LoginResultComplete) -> Void {
  100. KMLoginWindowsController.shared.showWindow(nil)
  101. loginResult = complete
  102. }
  103. // MARK: Bind Method
  104. func bindViewModel() -> Void {
  105. viewModel.$screenType
  106. .receive(on: RunLoop.main)
  107. .sink { [weak self] newValue in
  108. self?.refreshSplitView()
  109. }
  110. .store(in: &cancellables)
  111. }
  112. }