KMLoginWindowsController.swift 4.4 KB

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