// // KMSubscribeWaterMarkWindowController.swift // PDF Reader Pro // // 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 var tempLimit: Bool = false var tempContinue: Bool = false 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 isLimit: Bool? var type: KMSubscribeWaterMarkType? { didSet { self.waterMarkView?.type = type } } deinit { KMPrint("KMSubscribeWaterMarkWindowController 释放") } override func windowDidLoad() { super.windowDidLoad() self.waterMarkView.subscribeLabel.stringValue = "" 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() // self.waterMarkView.subscribeLabel.stringValue = "" } //MARK: 打开文件 @objc static func show(window: NSWindow, isContinue: Bool = false, limit: Bool = false, type: KMSubscribeWaterMarkType = .none, subscribeDidClick: (()->Void)? = nil, completion: @escaping (_ isSubscribeSuccess: Bool, _ isWaterMarkExport: Bool, _ isClose: Bool) -> Void) -> KMSubscribeWaterMarkWindowController { #if VERSION_DMG if type != .save && !KMLightMemberManager.manager.isLogin() { KMLoginWindowController.show(window: window) return KMSubscribeWaterMarkWindowController() } #endif tempLimit = limit tempType = type tempContinue = isContinue 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 Reader Pro.", 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 subscribeWaterMarkWindowController.isLimit = limit 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 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 || ((type.isConvertType() || type == .merge) && !limit) { _ = KMComparativeTableViewController.show(window: subscribeWaterMarkMainWindow ?? NSWindow(), .equity, inputType: type) } else { _ = KMLoginWindowController.show(window: subscribeWaterMarkMainWindow ?? NSWindow()) } subscribeWaterMarkMainWindow = nil } subscribeWaterMarkController = subscribeWaterMarkWindowController subscribeWaterMarkMainWindow = window return subscribeWaterMarkWindowController } } func setup() { self.window?.contentView?.backgroundColor(NSColor.km_init(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 KMSubscribeWaterMarkWindowController.canShowSubscripBenefits() { self.waterViewHeightConstrain.constant = 462 } else { self.waterViewHeightConstrain.constant = 563 } self.waterMarkView.type = tempType self.waterMarkView.updateConstraints() self.updateLanguage() } func updateLanguage() { if self.waterMarkView != nil { if tempContinue { self.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "") } else { if tempType == .merge { if (tempLimit) { self.waterMarkView.waterExportButton.title = NSLocalizedString("Exceed Times Limit", comment: "") self.waterMarkView.isSecondEnable = false self.waterMarkView.subscribeLabel.stringValue = NSLocalizedString("Upgrade Now", comment: "") } else { self.waterMarkView.isSecondEnable = true self.waterMarkView.waterExportButton.title = NSLocalizedString("Delete Files from List", comment: "") } } else if tempType.isConvertType() { if (tempLimit) { self.waterMarkView.waterExportButton.title = NSLocalizedString("Exceed Times Limit", comment: "") self.waterMarkView.isSecondEnable = false self.waterMarkView.subscribeLabel.stringValue = NSLocalizedString("Upgrade Now", comment: "") } else { self.waterMarkView.isSecondEnable = true // if KMLightMemberManager.manager.isLogin() { self.waterMarkView.waterExportButton.title = NSLocalizedString("Convert First 10 Pages", comment: "") // } else { // subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Later", comment: "") // } } } else if (type == .save) { self.waterMarkView.subscribeLabel.stringValue = NSLocalizedString("Upgrade Now", comment: "") self.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "") } else { self.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "") } } } } static func isSampleController() -> KMSubscribeWaterMarkWindowController { for window in NSApp.windows { let controller = window.windowController if controller is KMSubscribeWaterMarkWindowController { return controller as! KMSubscribeWaterMarkWindowController } } return KMSubscribeWaterMarkWindowController() } static func canShowSubscripBenefits() -> Bool { #if VERSION_DMG return KMLightMemberManager.manager.isLogin() || tempType == .save || ((tempType.isConvertType() || tempType == .merge) && tempLimit) #else return KMLightMemberManager.manager.isLogin() || tempType == .save || ((tempType.isConvertType() || tempType == .merge) && !tempLimit) #endif } } // 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) } }