KMSubscribeWaterMarkWindowController.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. //
  2. // KMSubscribeWaterMarkWindowController.swift
  3. // PDF Master
  4. //
  5. // Created by lizhe on 2023/6/12.
  6. //
  7. import Cocoa
  8. var subscribeWaterMarkController: KMSubscribeWaterMarkWindowController?
  9. var subscribeWaterMarkMainWindow: NSWindow?
  10. @objc enum KMSubscribeWaterMarkType: Int {
  11. case none = 0
  12. case stamp = 1
  13. case link
  14. case sign
  15. case editText
  16. case editImage
  17. case insert
  18. case extract
  19. case replace
  20. case split
  21. case delete
  22. case rotate
  23. case copy
  24. case toWord
  25. case toExcel
  26. case toPPT
  27. case toRTF
  28. case toCSV
  29. case toHTML
  30. case toText
  31. case toImage
  32. case compress
  33. case merge
  34. case setPassword
  35. case removePassword
  36. case crop
  37. case aiTranslate
  38. case aiRewrite
  39. case aiCorrect
  40. case save
  41. func isConvertType() -> Bool {
  42. if (self == .toWord || self == .toExcel || self == .toPPT || self == .toRTF || self == .toCSV || self == .toHTML || self == .toText || self == .toImage) {
  43. return true
  44. }
  45. return false
  46. }
  47. }
  48. typealias KMSubscribeWaterMarkWindowControllerCloseAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  49. typealias KMSubscribeWaterMarkWindowControllerWatermarkExportAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  50. typealias KMSubscribeWaterMarkWindowControllerSubscribeAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  51. var tempType: KMSubscribeWaterMarkType = .none
  52. class KMSubscribeWaterMarkWindowController: NSWindowController {
  53. @IBOutlet weak var waterMarkView: KMSubscribeWaterMarkView!
  54. @IBOutlet weak var waterViewHeightConstrain: NSLayoutConstraint!
  55. var closeAction: KMSubscribeWaterMarkWindowControllerCloseAction?
  56. var subscribeAction: KMSubscribeWaterMarkWindowControllerSubscribeAction?
  57. var watermarkExportAction: KMSubscribeWaterMarkWindowControllerWatermarkExportAction?
  58. var isContinue: Bool?
  59. var isAI: Bool?
  60. var type: KMSubscribeWaterMarkType? {
  61. didSet {
  62. self.waterMarkView?.type = type
  63. }
  64. }
  65. deinit {
  66. KMPrint("KMSubscribeWaterMarkWindowController 释放")
  67. }
  68. override func windowDidLoad() {
  69. super.windowDidLoad()
  70. self.setup()
  71. self.reloadData()
  72. // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
  73. }
  74. override func awakeFromNib() {
  75. super.awakeFromNib()
  76. }
  77. //MARK: 打开文件
  78. @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 {
  79. tempType = type
  80. var isAI = false
  81. if type == .aiCorrect ||
  82. type == .aiRewrite ||
  83. type == .aiTranslate {
  84. isAI = true
  85. } else {
  86. isAI = false
  87. }
  88. if isAI && KMLightMemberManager.manager.purchaseState != .subscription {
  89. if KMLightMemberManager.manager.isLogin() {
  90. KMComparativeTableViewController.show(window: NSApp.mainWindow!, .equity)
  91. } else {
  92. let controller = KMLoginWindowController.show(window: NSApp.mainWindow!,.equity)
  93. if isAI {
  94. let alert = NSAlert()
  95. alert.messageText = NSLocalizedString("Please Login or Sign up to proceed to the next step.", comment: "")
  96. alert.informativeText = NSLocalizedString("On upgrading your account, you can enjoy all AI features in PDF Master.", comment: "")
  97. alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
  98. alert.beginSheetModal(for: (controller?.window)!) { result in
  99. }
  100. }
  101. }
  102. return KMSubscribeWaterMarkWindowController.init()
  103. } else {
  104. let subscribeWaterMarkWindowController: KMSubscribeWaterMarkWindowController = KMSubscribeWaterMarkWindowController.init(windowNibName: "KMSubscribeWaterMarkWindowController")
  105. subscribeWaterMarkWindowController.isContinue = isContinue
  106. subscribeWaterMarkWindowController.isAI = isAI
  107. window.beginSheet(subscribeWaterMarkWindowController.window!)
  108. subscribeWaterMarkWindowController.window?.center()
  109. subscribeWaterMarkWindowController.type = type
  110. subscribeWaterMarkWindowController.reloadData()
  111. subscribeWaterMarkWindowController.closeAction = { controller in
  112. completion(false, false, true)
  113. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  114. controller.window?.close()
  115. subscribeWaterMarkController = nil
  116. subscribeWaterMarkMainWindow = nil
  117. }
  118. subscribeWaterMarkWindowController.watermarkExportAction = { controller in
  119. if type.isConvertType() && !KMLightMemberManager.manager.isLogin() {
  120. completion(false, false, true)
  121. } else {
  122. completion(false, true, false)
  123. }
  124. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  125. controller.window?.close()
  126. subscribeWaterMarkController = nil
  127. subscribeWaterMarkMainWindow = nil
  128. }
  129. subscribeWaterMarkWindowController.subscribeAction = { controller in
  130. if let callback = subscribeDidClick {
  131. callback()
  132. }
  133. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  134. controller.window?.close()
  135. subscribeWaterMarkController = nil
  136. if KMLightMemberManager.manager.isLogin() || type == .save {
  137. KMComparativeTableViewController.show(window: subscribeWaterMarkMainWindow ?? NSWindow(), .equity, inputType: type)
  138. } else {
  139. KMLoginWindowController.show(window: subscribeWaterMarkMainWindow ?? NSWindow())
  140. }
  141. subscribeWaterMarkMainWindow = nil
  142. }
  143. if isContinue {
  144. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "")
  145. } else {
  146. if type == .merge {
  147. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Delete From the File List", comment: "")
  148. } else if type.isConvertType() {
  149. if KMLightMemberManager.manager.isLogin() {
  150. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Convert First 10 Pages", comment: "")
  151. } else {
  152. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Later", comment: "")
  153. }
  154. } else if (type == .save) {
  155. subscribeWaterMarkWindowController.waterMarkView.subscribeLabel.stringValue = NSLocalizedString("Upgrade Now", comment: "")
  156. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "")
  157. } else {
  158. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "")
  159. }
  160. }
  161. subscribeWaterMarkController = subscribeWaterMarkWindowController
  162. subscribeWaterMarkMainWindow = window
  163. return subscribeWaterMarkWindowController
  164. }
  165. }
  166. func setup() {
  167. self.window?.contentView?.backgroundColor(NSColor(hex: "#FFFFFF"))
  168. self.waterMarkView.waterExportButton.title = ""
  169. self.waterMarkView.subscribeLabel.stringValue = ""
  170. self.waterMarkView.closeAction = { [weak self] view in
  171. guard let callBack = self?.closeAction else { return }
  172. callBack((self!))
  173. }
  174. self.waterMarkView.waterMarkExportAction = { [weak self] view in
  175. self?.trackEvent(eventName: "PUW_Sub_SaveWatermark")
  176. guard let callBack = self?.watermarkExportAction else { return }
  177. callBack((self!))
  178. }
  179. self.waterMarkView.subscribeAction = { [weak self] view in
  180. guard let callBack = self?.subscribeAction else { return }
  181. callBack((self!))
  182. }
  183. }
  184. func closeWindow() {
  185. if subscribeWaterMarkMainWindow != nil {
  186. subscribeWaterMarkMainWindow?.endSheet((subscribeWaterMarkController?.window)!)
  187. }
  188. if subscribeWaterMarkController != nil {
  189. subscribeWaterMarkController?.window?.close()
  190. }
  191. subscribeWaterMarkController = nil
  192. subscribeWaterMarkMainWindow = nil
  193. }
  194. func reloadData() {
  195. if KMLightMemberManager.manager.isLogin() || tempType == .save {
  196. self.waterViewHeightConstrain.constant = 506
  197. } else {
  198. self.waterViewHeightConstrain.constant = 643
  199. }
  200. self.waterMarkView.type = tempType
  201. self.waterMarkView.updateConstraints()
  202. }
  203. static func isSampleController() -> KMSubscribeWaterMarkWindowController {
  204. for window in NSApp.windows {
  205. let controller = window.windowController
  206. if controller is KMSubscribeWaterMarkWindowController {
  207. return controller as! KMSubscribeWaterMarkWindowController
  208. }
  209. }
  210. return KMSubscribeWaterMarkWindowController()
  211. }
  212. }
  213. // MARK: - Analytics (埋点)
  214. extension KMSubscribeWaterMarkWindowController {
  215. func trackEvent(eventName: String) -> Void {
  216. KMAnalytics.trackEvent(eventName: eventName, parameters: [
  217. KMAnalytics.Parameter.categoryKey : KMAnalytics.Category.puw,
  218. KMAnalytics.Parameter.labelKey : KMAnalytics.Label.sub_PUW], platform: .AppCenter, appTarget: .all)
  219. }
  220. func trackEvent(type: KMSubscribeWaterMarkType) -> Void {
  221. KMTools.trackEvent(type: type)
  222. }
  223. }