KMSubscribeWaterMarkWindowController.swift 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  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. func isConvertType() -> Bool {
  41. if (self == .toWord || self == .toExcel || self == .toPPT || self == .toRTF || self == .toCSV || self == .toHTML || self == .toText || self == .toImage) {
  42. return true
  43. }
  44. return false
  45. }
  46. }
  47. typealias KMSubscribeWaterMarkWindowControllerCloseAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  48. typealias KMSubscribeWaterMarkWindowControllerWatermarkExportAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  49. typealias KMSubscribeWaterMarkWindowControllerSubscribeAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  50. class KMSubscribeWaterMarkWindowController: NSWindowController {
  51. @IBOutlet weak var waterMarkView: KMSubscribeWaterMarkView!
  52. @IBOutlet weak var waterViewHeightConstrain: NSLayoutConstraint!
  53. var closeAction: KMSubscribeWaterMarkWindowControllerCloseAction?
  54. var subscribeAction: KMSubscribeWaterMarkWindowControllerSubscribeAction?
  55. var watermarkExportAction: KMSubscribeWaterMarkWindowControllerWatermarkExportAction?
  56. var isContinue: Bool?
  57. var isAI: Bool?
  58. deinit {
  59. KMPrint("KMSubscribeWaterMarkWindowController 释放")
  60. }
  61. override func windowDidLoad() {
  62. super.windowDidLoad()
  63. self.setup()
  64. self.reloadData()
  65. // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
  66. }
  67. override func awakeFromNib() {
  68. super.awakeFromNib()
  69. }
  70. //MARK: 打开文件
  71. @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 {
  72. var isAI = false
  73. if type == .aiCorrect ||
  74. type == .aiRewrite ||
  75. type == .aiTranslate {
  76. isAI = true
  77. } else {
  78. isAI = false
  79. }
  80. if isAI && KMLightMemberManager.manager.purchaseState != .subscription {
  81. if KMLightMemberManager.manager.isLogin() {
  82. KMComparativeTableViewController.show(window: NSApp.mainWindow!, .equity)
  83. } else {
  84. let controller = KMLoginWindowController.show(window: NSApp.mainWindow!,.equity)
  85. if isAI {
  86. let alert = NSAlert()
  87. alert.messageText = NSLocalizedString("Please Login or Sign up to proceed to the next step.", comment: "")
  88. alert.informativeText = NSLocalizedString("On upgrading your account, you can enjoy all AI features in PDF Master.", comment: "")
  89. alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
  90. alert.beginSheetModal(for: (controller?.window)!) { result in
  91. }
  92. }
  93. }
  94. return KMSubscribeWaterMarkWindowController.init()
  95. } else {
  96. let subscribeWaterMarkWindowController: KMSubscribeWaterMarkWindowController = KMSubscribeWaterMarkWindowController.init(windowNibName: "KMSubscribeWaterMarkWindowController")
  97. subscribeWaterMarkWindowController.isContinue = isContinue
  98. subscribeWaterMarkWindowController.isAI = isAI
  99. window.beginSheet(subscribeWaterMarkWindowController.window!)
  100. subscribeWaterMarkWindowController.window?.center()
  101. subscribeWaterMarkWindowController.closeAction = { controller in
  102. completion(false, false, true)
  103. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  104. controller.window?.close()
  105. subscribeWaterMarkController = nil
  106. subscribeWaterMarkMainWindow = nil
  107. }
  108. subscribeWaterMarkWindowController.watermarkExportAction = { controller in
  109. completion(false, true, false)
  110. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  111. controller.window?.close()
  112. subscribeWaterMarkController = nil
  113. subscribeWaterMarkMainWindow = nil
  114. }
  115. subscribeWaterMarkWindowController.subscribeAction = { controller in
  116. if let callback = subscribeDidClick {
  117. callback()
  118. }
  119. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  120. controller.window?.close()
  121. subscribeWaterMarkController = nil
  122. if KMLightMemberManager.manager.isLogin() {
  123. KMComparativeTableViewController.show(window: subscribeWaterMarkMainWindow ?? NSWindow(), .equity)
  124. } else {
  125. KMLoginWindowController.show(window: subscribeWaterMarkMainWindow ?? NSWindow())
  126. }
  127. subscribeWaterMarkMainWindow = nil
  128. }
  129. if isContinue {
  130. if type == .merge {
  131. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "")
  132. } else {
  133. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save and Continue", comment: "")
  134. }
  135. } else {
  136. if type == .merge {
  137. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Delete from the file list.", comment: "")
  138. } else if type.isConvertType() {
  139. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Convert First 10 Pages", comment: "")
  140. } else {
  141. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "")
  142. }
  143. }
  144. subscribeWaterMarkController = subscribeWaterMarkWindowController
  145. subscribeWaterMarkMainWindow = window
  146. return subscribeWaterMarkWindowController
  147. }
  148. }
  149. func setup() {
  150. self.window?.contentView?.backgroundColor(NSColor(hex: "#FFFFFF"))
  151. self.waterMarkView.waterExportButton.title = ""
  152. self.waterMarkView.closeAction = { [weak self] view in
  153. guard let callBack = self?.closeAction else { return }
  154. callBack((self!))
  155. }
  156. self.waterMarkView.waterMarkExportAction = { [weak self] view in
  157. self?.trackEvent(eventName: "PUW_Sub_SaveWatermark")
  158. guard let callBack = self?.watermarkExportAction else { return }
  159. callBack((self!))
  160. }
  161. self.waterMarkView.subscribeAction = { [weak self] view in
  162. guard let callBack = self?.subscribeAction else { return }
  163. callBack((self!))
  164. }
  165. }
  166. func closeWindow() {
  167. if subscribeWaterMarkMainWindow != nil {
  168. subscribeWaterMarkMainWindow?.endSheet((subscribeWaterMarkController?.window)!)
  169. }
  170. if subscribeWaterMarkController != nil {
  171. subscribeWaterMarkController?.window?.close()
  172. }
  173. subscribeWaterMarkController = nil
  174. subscribeWaterMarkMainWindow = nil
  175. }
  176. func reloadData() {
  177. if KMLightMemberManager.manager.isLogin() {
  178. self.waterViewHeightConstrain.constant = 624
  179. } else {
  180. self.waterViewHeightConstrain.constant = 505
  181. }
  182. }
  183. static func isSampleController() -> KMSubscribeWaterMarkWindowController {
  184. for window in NSApp.windows {
  185. let controller = window.windowController
  186. if controller is KMSubscribeWaterMarkWindowController {
  187. return controller as! KMSubscribeWaterMarkWindowController
  188. }
  189. }
  190. return KMSubscribeWaterMarkWindowController()
  191. }
  192. }
  193. // MARK: - Analytics (埋点)
  194. extension KMSubscribeWaterMarkWindowController {
  195. func trackEvent(eventName: String) -> Void {
  196. KMAnalytics.trackEvent(eventName: eventName, parameters: [
  197. KMAnalytics.Parameter.categoryKey : KMAnalytics.Category.puw,
  198. KMAnalytics.Parameter.labelKey : KMAnalytics.Label.sub_PUW], platform: .AppCenter, appTarget: .all)
  199. }
  200. func trackEvent(type: KMSubscribeWaterMarkType) -> Void {
  201. KMTools.trackEvent(type: type)
  202. }
  203. }