// // KMComparativeTableViewController.swift // PDF Master // // Created by lizhe on 2023/2/24. // import Cocoa typealias KMComparativeTableViewControllerLoginAction = (_ controller: KMComparativeTableViewController) -> Void typealias KMComparativeTableViewControllerSignUpAction = (_ controller: KMComparativeTableViewController) -> Void typealias KMComparativeTableViewControllerSubscriptionAction = (_ controller: KMComparativeTableViewController) -> Void typealias KMComparativeTableViewControllerRestoreAction = (_ controller: KMComparativeTableViewController) -> Void var comparativeController: KMComparativeTableViewController? var comparativeMainWindow: NSWindow? enum KMComparativeInputType: Int { case unknown = 0 case login = 1 //登录界面 case register = 2 //注册界面 case resetPassword = 3 //重置密码 case verificationCode = 4 //验证码 case registerSuccess = 5 //注册成功 case loginInputPassword = 6 //登录密码输入 case accountInfo = 7 //用户信息 case compress = 8 // 压缩 case convert = 9 // 转档 case secure = 10 // 安全 case pageEdit = 11 // 页面编辑 case merge = 12 // 合并 case crop = 13 // 裁切 case thumb = 14 // 缩略图列表 //后续添加 } class KMComparativeTableViewController: NSWindowController { @IBOutlet weak var comparativeTableView: KMComparativeTableView! @IBOutlet weak var comparativeView: KMComparativeView! var inputType: KMComparativeInputType? var loginAction: KMComparativeTableViewControllerLoginAction? var signUpAction: KMComparativeTableViewControllerSignUpAction? var subscriptionAction: KMComparativeTableViewControllerSubscriptionAction? var restoreAction: KMComparativeTableViewControllerRestoreAction? deinit { print("KMComparativeTableViewController 释放") } //MARK: 打开文件 /** @abstract 弹出比较表 @param window 弹出window @param type 从什么页面跳转到比较表 默认batch */ static func show(window: NSWindow, _ type: KMComparativeInputType = .unknown) -> KMComparativeTableViewController? { #if VERSION_DMG if KMLightMemberManager.manager.isLogin() { KMPurchaseManager.manager.purchaseProduct(productIdentifier: "") { isSuccess, error in } } else { var email: String = UserDefaults.standard.value(forKey: "kLoginEmail") as? String ?? "" if email.count == 0 { KMLoginWindowController.show(window: NSApp.mainWindow!, .Batch, .register) } else { KMLoginWindowController.show(window: NSApp.mainWindow!) } } #endif #if VERSION_FREE let controller: KMComparativeTableViewController = KMComparativeTableViewController.init(windowNibName: "KMComparativeTableViewController") controller.inputType = type controller.loginAction = { controller in comparativeController = nil comparativeMainWindow?.endSheet(controller.window!) comparativeMainWindow = nil controller.close() if NSApp.mainWindow != nil { KMLoginWindowController.show(window: NSApp.mainWindow!, .Batch, .login) } } controller.signUpAction = { controller in comparativeController = nil comparativeMainWindow?.endSheet(controller.window!) comparativeMainWindow = nil controller.close() if NSApp.mainWindow != nil { KMLoginWindowController.show(window: NSApp.mainWindow!, .Batch, .register) } } controller.subscriptionAction = { controller in controller.subscribeAction(controller: controller) } controller.restoreAction = { controller in controller.subscribeAction(controller: controller, isRestore:true) } window.beginSheet(controller.window!) comparativeController = controller comparativeMainWindow = window return controller #endif return nil } 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. self.setup() print("订阅状态: \(KMInAppPurchaseManager.manager.state)") } func setup() { self.window?.contentView?.backgroundColor(NSColor(hex: "FFFFFF")) self.comparativeView.closeAction = { view in print("关闭") comparativeMainWindow?.endSheet(view.window!) view.window?.close() comparativeController = nil comparativeMainWindow = nil } self.comparativeView.signUpAction = { [weak self] view in print("注册") guard let callBack = self?.signUpAction else { return } callBack(self!) } // self.comparativeTableView.loginAction = { [weak self] view in // print("登录") // guard let callBack = self?.loginAction else { return } // // callBack(self!) // } // self.comparativeView.subscriptionAction = { [weak self] view in print("订阅") guard let callBack = self?.subscriptionAction else { return } callBack(self!) } self.comparativeView.restoreAction = { [weak self] view in print("restore订阅") guard let callBack = self?.restoreAction else { return } callBack(self!) } } static func isSampleController() -> KMComparativeTableViewController { for window in NSApp.windows { let controller = window.windowController if controller is KMComparativeTableViewController { return controller as! KMComparativeTableViewController } } return KMComparativeTableViewController() } func subscribeAction(controller: KMComparativeTableViewController, isRestore: Bool = false) { //loading controller.comparativeView.beginLoading(backgroundColor: NSColor.black.withAlphaComponent(0.2)) if KMLightMemberManager.manager.isLogin() { if isRestore { KMPurchaseManager.manager.restorePurchases { isSuccess in if isSuccess { comparativeController = nil comparativeMainWindow?.endSheet(controller.window!) comparativeMainWindow = nil controller.close() } else { controller.purchasefailed() } controller.comparativeView.endLoading() } } else { KMPurchaseManager.manager.purchaseProduct(productIdentifier: PRODUCT_1) { isSuccess, error in if isSuccess { print("订阅成功") comparativeController = nil comparativeMainWindow?.endSheet(controller.window!) comparativeMainWindow = nil controller.close() DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) { if NSApp.mainWindow != nil { _ = KMSubscribeSuccessWindowController.show(window: NSApp.mainWindow!) } } } else { controller.purchasefailed() } //loading controller.comparativeView.endLoading() } } } else { comparativeController = nil comparativeMainWindow?.endSheet(controller.window!) comparativeMainWindow = nil controller.close() var email: String = UserDefaults.standard.value(forKey: "kLoginEmail") as? String ?? "" if email.count == 0 { let tempController = KMLoginWindowController.show(window: NSApp.mainWindow!, .ComparativeTable, .register) } else { let tempController = KMLoginWindowController.show(window: NSApp.mainWindow!, .ComparativeTable) } } } func purchasefailed() { DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1, execute: { let alert = NSAlert() alert.messageText = NSLocalizedString("购买失败", comment: "") alert.informativeText = NSLocalizedString("", comment: "") // alert.addButton(withTitle: NSLocalizedString("OK", comment: "")) alert.addButton(withTitle: NSLocalizedString("OK", comment: "")) var window = NSApp.mainWindow if NSApp.mainWindow?.sheets.first != nil { window = NSApp.mainWindow?.sheets.first } if window != nil { alert.beginSheetModal(for: window!) { result in if (result == .alertFirstButtonReturn) { } else if result == .alertSecondButtonReturn { return } } } }) } }