// // KMSubscribeWaterMarkWindowController.swift // PDF Master // // Created by lizhe on 2023/6/12. // import Cocoa var subscribeWaterMarkController: KMSubscribeWaterMarkWindowController? var subscribeWaterMarkMainWindow: NSWindow? @objc enum KMSubscribeWaterMarkType: Int { case none = 0 case stamp = 1 case link case sign case editText case editImage case insert case extract case replace case split case delete case rotate case copy case toWord case toExcel case toPPT case toRTF case toCSV case toHTML case toText case toImage case compress case merge case setPassword case removePassword case crop case aiTranslate case aiRewrite case aiCorrect case save func isConvertType() -> Bool { if (self == .toWord || self == .toExcel || self == .toPPT || self == .toRTF || self == .toCSV || self == .toHTML || self == .toText || self == .toImage) { return true } return false } } typealias KMSubscribeWaterMarkWindowControllerCloseAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void typealias KMSubscribeWaterMarkWindowControllerWatermarkExportAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void typealias KMSubscribeWaterMarkWindowControllerSubscribeAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void var tempType: KMSubscribeWaterMarkType = .none class KMSubscribeWaterMarkWindowController: NSWindowController { @IBOutlet weak var waterMarkView: KMSubscribeWaterMarkView! @IBOutlet weak var waterViewHeightConstrain: NSLayoutConstraint! var closeAction: KMSubscribeWaterMarkWindowControllerCloseAction? var subscribeAction: KMSubscribeWaterMarkWindowControllerSubscribeAction? var watermarkExportAction: KMSubscribeWaterMarkWindowControllerWatermarkExportAction? var isContinue: Bool? var isAI: Bool? var type: KMSubscribeWaterMarkType? { didSet { self.waterMarkView?.type = type } } deinit { KMPrint("KMSubscribeWaterMarkWindowController 释放") } override func windowDidLoad() { super.windowDidLoad() self.setup() self.reloadData() // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. } override func awakeFromNib() { super.awakeFromNib() } //MARK: 打开文件 @objc static func show(window: NSWindow, isContinue: Bool = false, type: KMSubscribeWaterMarkType = .none, subscribeDidClick: (()->Void)? = nil, completion: @escaping (_ isSubscribeSuccess: Bool, _ isWaterMarkExport: Bool, _ isClose: Bool) -> Void) -> KMSubscribeWaterMarkWindowController { tempType = type var isAI = false if type == .aiCorrect || type == .aiRewrite || type == .aiTranslate { isAI = true } else { isAI = false } if isAI && KMLightMemberManager.manager.purchaseState != .subscription { if KMLightMemberManager.manager.isLogin() { KMComparativeTableViewController.show(window: NSApp.mainWindow!, .equity) } else { let controller = KMLoginWindowController.show(window: NSApp.mainWindow!,.equity) if isAI { let alert = NSAlert() alert.messageText = NSLocalizedString("Please Login or Sign up to proceed to the next step.", comment: "") alert.informativeText = NSLocalizedString("On upgrading your account, you can enjoy all AI features in PDF Master.", comment: "") alert.addButton(withTitle: NSLocalizedString("OK", comment: "")) alert.beginSheetModal(for: (controller?.window)!) { result in } } } return KMSubscribeWaterMarkWindowController.init() } else { let subscribeWaterMarkWindowController: KMSubscribeWaterMarkWindowController = KMSubscribeWaterMarkWindowController.init(windowNibName: "KMSubscribeWaterMarkWindowController") subscribeWaterMarkWindowController.isContinue = isContinue subscribeWaterMarkWindowController.isAI = isAI window.beginSheet(subscribeWaterMarkWindowController.window!) subscribeWaterMarkWindowController.window?.center() subscribeWaterMarkWindowController.type = type subscribeWaterMarkWindowController.reloadData() subscribeWaterMarkWindowController.closeAction = { controller in completion(false, false, true) subscribeWaterMarkMainWindow?.endSheet(controller.window!) controller.window?.close() subscribeWaterMarkController = nil subscribeWaterMarkMainWindow = nil } subscribeWaterMarkWindowController.watermarkExportAction = { controller in if type.isConvertType() && !KMLightMemberManager.manager.isLogin() { completion(false, false, true) } else { completion(false, true, false) } subscribeWaterMarkMainWindow?.endSheet(controller.window!) controller.window?.close() subscribeWaterMarkController = nil subscribeWaterMarkMainWindow = nil } subscribeWaterMarkWindowController.subscribeAction = { controller in if let callback = subscribeDidClick { callback() } subscribeWaterMarkMainWindow?.endSheet(controller.window!) controller.window?.close() subscribeWaterMarkController = nil if KMLightMemberManager.manager.isLogin() || type == .save { KMComparativeTableViewController.show(window: subscribeWaterMarkMainWindow ?? NSWindow(), .equity, inputType: type) } else { KMLoginWindowController.show(window: subscribeWaterMarkMainWindow ?? NSWindow()) } subscribeWaterMarkMainWindow = nil } if isContinue { subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "") } else { if type == .merge { subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Delete From the File List", comment: "") } else if type.isConvertType() { if KMLightMemberManager.manager.isLogin() { subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Convert First 10 Pages", comment: "") } else { subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Later", comment: "") } } else if (type == .save) { subscribeWaterMarkWindowController.waterMarkView.subscribeLabel.stringValue = NSLocalizedString("Upgrade Now", comment: "") subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "") } else { subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "") } } subscribeWaterMarkController = subscribeWaterMarkWindowController subscribeWaterMarkMainWindow = window return subscribeWaterMarkWindowController } } func setup() { self.window?.contentView?.backgroundColor(NSColor(hex: "#FFFFFF")) self.waterMarkView.waterExportButton.title = "" self.waterMarkView.subscribeLabel.stringValue = "" self.waterMarkView.closeAction = { [weak self] view in guard let callBack = self?.closeAction else { return } callBack((self!)) } self.waterMarkView.waterMarkExportAction = { [weak self] view in self?.trackEvent(eventName: "PUW_Sub_SaveWatermark") guard let callBack = self?.watermarkExportAction else { return } callBack((self!)) } self.waterMarkView.subscribeAction = { [weak self] view in guard let callBack = self?.subscribeAction else { return } callBack((self!)) } } func closeWindow() { if subscribeWaterMarkMainWindow != nil { subscribeWaterMarkMainWindow?.endSheet((subscribeWaterMarkController?.window)!) } if subscribeWaterMarkController != nil { subscribeWaterMarkController?.window?.close() } subscribeWaterMarkController = nil subscribeWaterMarkMainWindow = nil } func reloadData() { if KMLightMemberManager.manager.isLogin() || tempType == .save { self.waterViewHeightConstrain.constant = 506 } else { self.waterViewHeightConstrain.constant = 643 } self.waterMarkView.type = tempType self.waterMarkView.updateConstraints() } static func isSampleController() -> KMSubscribeWaterMarkWindowController { for window in NSApp.windows { let controller = window.windowController if controller is KMSubscribeWaterMarkWindowController { return controller as! KMSubscribeWaterMarkWindowController } } return KMSubscribeWaterMarkWindowController() } } // MARK: - Analytics (埋点) extension KMSubscribeWaterMarkWindowController { func trackEvent(eventName: String) -> Void { KMAnalytics.trackEvent(eventName: eventName, parameters: [ KMAnalytics.Parameter.categoryKey : KMAnalytics.Category.puw, KMAnalytics.Parameter.labelKey : KMAnalytics.Label.sub_PUW], platform: .AppCenter, appTarget: .all) } func trackEvent(type: KMSubscribeWaterMarkType) -> Void { KMTools.trackEvent(type: type) } }