KMSubscribeWaterMarkWindowController.swift 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  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. }
  41. typealias KMSubscribeWaterMarkWindowControllerCloseAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  42. typealias KMSubscribeWaterMarkWindowControllerWatermarkExportAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  43. typealias KMSubscribeWaterMarkWindowControllerSubscribeAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  44. typealias KMSubscribeWaterMarkWindowControllerRestoreAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  45. class KMSubscribeWaterMarkWindowController: NSWindowController {
  46. @IBOutlet weak var waterMarkView: KMSubscribeWaterMarkView!
  47. @IBOutlet weak var waterViewHeightConstrain: NSLayoutConstraint!
  48. var closeAction: KMSubscribeWaterMarkWindowControllerCloseAction?
  49. var subscribeAction: KMSubscribeWaterMarkWindowControllerSubscribeAction?
  50. var watermarkExportAction: KMSubscribeWaterMarkWindowControllerWatermarkExportAction?
  51. var restoreAction: KMSubscribeWaterMarkWindowControllerRestoreAction?
  52. var isContinue: Bool?
  53. var isAI: Bool?
  54. deinit {
  55. KMPrint("KMSubscribeWaterMarkWindowController 释放")
  56. }
  57. override func windowDidLoad() {
  58. super.windowDidLoad()
  59. self.setup()
  60. self.reloadData()
  61. // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
  62. }
  63. override func awakeFromNib() {
  64. super.awakeFromNib()
  65. if let data = self.isAI, data {
  66. self.waterMarkView.waterExportButton.isHidden = true
  67. self.waterMarkView.subTrailingConst.constant = 60
  68. self.waterMarkView.subWidthConst.constant = 280
  69. self.waterMarkView.preferentialImageTrailingConst.constant = 92
  70. } else {
  71. self.waterMarkView.waterExportButton.isHidden = false
  72. self.waterMarkView.subTrailingConst.constant = 0
  73. self.waterMarkView.subWidthConst.constant = 192
  74. self.waterMarkView.preferentialImageTrailingConst.constant = 32
  75. }
  76. }
  77. //MARK: 打开文件
  78. static func show(window: NSWindow, isContinue: Bool = false, isAI: Bool = false, type: KMSubscribeWaterMarkType = .none, subscribeDidClick: (()->Void)? = nil, completion: @escaping (_ isSubscribeSuccess: Bool, _ isWaterMarkExport: Bool, _ isClose: Bool) -> Void) -> KMSubscribeWaterMarkWindowController {
  79. if KMLightMemberManager.manager.isLogin() {
  80. let subscribeWaterMarkWindowController: KMSubscribeWaterMarkWindowController = KMSubscribeWaterMarkWindowController.init(windowNibName: "KMSubscribeWaterMarkWindowController")
  81. subscribeWaterMarkWindowController.isContinue = isContinue
  82. subscribeWaterMarkWindowController.isAI = isAI
  83. window.beginSheet(subscribeWaterMarkWindowController.window!)
  84. subscribeWaterMarkWindowController.window?.center()
  85. if isContinue {
  86. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Continue", comment: "")
  87. } else {
  88. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "")
  89. }
  90. subscribeWaterMarkWindowController.closeAction = { controller in
  91. completion(false, false, true)
  92. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  93. controller.window?.close()
  94. subscribeWaterMarkController = nil
  95. subscribeWaterMarkMainWindow = nil
  96. }
  97. subscribeWaterMarkWindowController.watermarkExportAction = { controller in
  98. completion(false, true, false)
  99. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  100. controller.window?.close()
  101. subscribeWaterMarkController = nil
  102. subscribeWaterMarkMainWindow = nil
  103. }
  104. subscribeWaterMarkWindowController.subscribeAction = { controller in
  105. if let callback = subscribeDidClick {
  106. callback()
  107. }
  108. // 数据埋点
  109. controller.trackEvent(type: type)
  110. controller.waterMarkView.beginLoading(backgroundColor: NSColor.black.withAlphaComponent(0.2))
  111. KMPurchaseManager.manager.purchaseProduct(productIdentifier: PRODUCT_1) { isSuccess, error in
  112. if isSuccess {
  113. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  114. controller.window?.close()
  115. subscribeWaterMarkController = nil
  116. // subscribeWaterMarkMainWindow = nil
  117. if subscribeWaterMarkMainWindow != nil {
  118. let controller = KMSubscribeSuccessWindowController.show(window: subscribeWaterMarkMainWindow!)
  119. controller.closeAction = { controller in
  120. controller.closeWindow()
  121. completion(true, false, false)
  122. }
  123. subscribeWaterMarkMainWindow = nil
  124. } else {
  125. completion(true, false, false)
  126. }
  127. } else {
  128. KMComparativeTableViewController.purchasefailed(view: subscribeWaterMarkController?.waterMarkView, state: error)
  129. completion(false, false, false)
  130. }
  131. controller.waterMarkView.endLoading()
  132. }
  133. }
  134. subscribeWaterMarkWindowController.restoreAction = { controller in
  135. controller.waterMarkView.beginLoading(backgroundColor: NSColor.black.withAlphaComponent(0.2))
  136. KMPurchaseManager.manager.restorePurchases { isSuccess, error in
  137. if isSuccess {
  138. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  139. controller.window?.close()
  140. subscribeWaterMarkController = nil
  141. subscribeWaterMarkMainWindow = nil
  142. completion(true, false, false)
  143. } else {
  144. if error != .restoreSuccess {
  145. KMComparativeTableViewController.purchasefailed(view: subscribeWaterMarkController?.waterMarkView, state: error)
  146. }
  147. completion(false, false, false)
  148. }
  149. controller.waterMarkView.endLoading()
  150. }
  151. }
  152. subscribeWaterMarkController = subscribeWaterMarkWindowController
  153. subscribeWaterMarkMainWindow = window
  154. return subscribeWaterMarkWindowController
  155. } else {
  156. KMLoginWindowController.show(window: NSApp.mainWindow!,.equity)
  157. return KMSubscribeWaterMarkWindowController.init()
  158. }
  159. }
  160. func setup() {
  161. self.window?.contentView?.backgroundColor(NSColor(hex: "#FFFFFF"))
  162. self.waterMarkView.waterExportButton.title = ""
  163. self.waterMarkView.closeAction = { [weak self] view in
  164. guard let callBack = self?.closeAction else { return }
  165. callBack((self!))
  166. }
  167. self.waterMarkView.waterMarkExportAction = { [weak self] view in
  168. self?.trackEvent(eventName: "PUW_Sub_SaveWatermark")
  169. guard let callBack = self?.watermarkExportAction else { return }
  170. callBack((self!))
  171. }
  172. self.waterMarkView.subscribeAction = { [weak self] view in
  173. self?.trackEvent(eventName: "PUW_Sub_Subscribe")
  174. guard let callBack = self?.subscribeAction else { return }
  175. callBack((self!))
  176. }
  177. self.waterMarkView.restoreAction = { [weak self] view in
  178. guard let callBack = self?.restoreAction else { return }
  179. callBack((self!))
  180. }
  181. }
  182. func closeWindow() {
  183. if subscribeWaterMarkMainWindow != nil {
  184. subscribeWaterMarkMainWindow?.endSheet((subscribeWaterMarkController?.window)!)
  185. }
  186. if subscribeWaterMarkController != nil {
  187. subscribeWaterMarkController?.window?.close()
  188. }
  189. subscribeWaterMarkController = nil
  190. subscribeWaterMarkMainWindow = nil
  191. }
  192. func reloadData() {
  193. #if VERSION_FREE
  194. self.waterViewHeightConstrain.constant = 511
  195. #endif
  196. #if VERSION_DMG
  197. self.waterViewHeightConstrain.constant = 511 - 80
  198. #endif
  199. }
  200. static func isSampleController() -> KMSubscribeWaterMarkWindowController {
  201. for window in NSApp.windows {
  202. let controller = window.windowController
  203. if controller is KMSubscribeWaterMarkWindowController {
  204. return controller as! KMSubscribeWaterMarkWindowController
  205. }
  206. }
  207. return KMSubscribeWaterMarkWindowController()
  208. }
  209. }
  210. // MARK: - Analytics (埋点)
  211. extension KMSubscribeWaterMarkWindowController {
  212. func trackEvent(eventName: String) -> Void {
  213. KMAnalytics.trackEvent(eventName: eventName, parameters: [
  214. KMAnalytics.Parameter.categoryKey : KMAnalytics.Category.puw,
  215. KMAnalytics.Parameter.labelKey : KMAnalytics.Label.sub_PUW], platform: .AppCenter, appTarget: .all)
  216. }
  217. func trackEvent(type: KMSubscribeWaterMarkType) -> Void {
  218. KMTools.trackEvent(type: type)
  219. }
  220. }