KMSubscribeWaterMarkWindowController.swift 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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. var tempLimit: Bool = false
  53. class KMSubscribeWaterMarkWindowController: NSWindowController {
  54. @IBOutlet weak var waterMarkView: KMSubscribeWaterMarkView!
  55. @IBOutlet weak var waterViewHeightConstrain: NSLayoutConstraint!
  56. var closeAction: KMSubscribeWaterMarkWindowControllerCloseAction?
  57. var subscribeAction: KMSubscribeWaterMarkWindowControllerSubscribeAction?
  58. var watermarkExportAction: KMSubscribeWaterMarkWindowControllerWatermarkExportAction?
  59. var isContinue: Bool?
  60. var isAI: Bool?
  61. var isLimit: Bool?
  62. var type: KMSubscribeWaterMarkType? {
  63. didSet {
  64. self.waterMarkView?.type = type
  65. }
  66. }
  67. deinit {
  68. KMPrint("KMSubscribeWaterMarkWindowController 释放")
  69. }
  70. override func windowDidLoad() {
  71. super.windowDidLoad()
  72. self.waterMarkView.subscribeLabel.stringValue = ""
  73. self.setup()
  74. self.reloadData()
  75. // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
  76. }
  77. override func awakeFromNib() {
  78. super.awakeFromNib()
  79. // self.waterMarkView.subscribeLabel.stringValue = ""
  80. }
  81. //MARK: 打开文件
  82. @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 {
  83. #if VERSION_DMG
  84. if type != .save && !KMLightMemberManager.manager.isLogin() {
  85. KMLoginWindowController.show(window: window)
  86. return KMSubscribeWaterMarkWindowController()
  87. }
  88. #endif
  89. tempLimit = limit
  90. tempType = type
  91. var isAI = false
  92. if type == .aiCorrect ||
  93. type == .aiRewrite ||
  94. type == .aiTranslate {
  95. isAI = true
  96. } else {
  97. isAI = false
  98. }
  99. if isAI && KMLightMemberManager.manager.purchaseState != .subscription {
  100. if KMLightMemberManager.manager.isLogin() {
  101. KMComparativeTableViewController.show(window: NSApp.mainWindow!, .equity)
  102. } else {
  103. let controller = KMLoginWindowController.show(window: NSApp.mainWindow!,.equity)
  104. if isAI {
  105. let alert = NSAlert()
  106. alert.messageText = NSLocalizedString("Please Login or Sign up to proceed to the next step.", comment: "")
  107. alert.informativeText = NSLocalizedString("On upgrading your account, you can enjoy all AI features in PDF Master.", comment: "")
  108. alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
  109. alert.beginSheetModal(for: (controller?.window)!) { result in
  110. }
  111. }
  112. }
  113. return KMSubscribeWaterMarkWindowController.init()
  114. } else {
  115. let subscribeWaterMarkWindowController: KMSubscribeWaterMarkWindowController = KMSubscribeWaterMarkWindowController.init(windowNibName: "KMSubscribeWaterMarkWindowController")
  116. subscribeWaterMarkWindowController.isContinue = isContinue
  117. subscribeWaterMarkWindowController.isAI = isAI
  118. subscribeWaterMarkWindowController.isLimit = limit
  119. window.beginSheet(subscribeWaterMarkWindowController.window!)
  120. subscribeWaterMarkWindowController.window?.center()
  121. subscribeWaterMarkWindowController.type = type
  122. subscribeWaterMarkWindowController.reloadData()
  123. subscribeWaterMarkWindowController.closeAction = { controller in
  124. completion(false, false, true)
  125. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  126. controller.window?.close()
  127. subscribeWaterMarkController = nil
  128. subscribeWaterMarkMainWindow = nil
  129. }
  130. subscribeWaterMarkWindowController.watermarkExportAction = { controller in
  131. completion(false, true, false)
  132. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  133. controller.window?.close()
  134. subscribeWaterMarkController = nil
  135. subscribeWaterMarkMainWindow = nil
  136. }
  137. subscribeWaterMarkWindowController.subscribeAction = { controller in
  138. if let callback = subscribeDidClick {
  139. callback()
  140. }
  141. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  142. controller.window?.close()
  143. subscribeWaterMarkController = nil
  144. if KMLightMemberManager.manager.isLogin() ||
  145. type == .save ||
  146. ((type.isConvertType() || type == .merge) && limit) {
  147. KMComparativeTableViewController.show(window: subscribeWaterMarkMainWindow ?? NSWindow(), .equity, inputType: type)
  148. } else {
  149. KMLoginWindowController.show(window: subscribeWaterMarkMainWindow ?? NSWindow())
  150. }
  151. subscribeWaterMarkMainWindow = nil
  152. }
  153. if isContinue {
  154. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "")
  155. } else {
  156. if type == .merge {
  157. if (limit) {
  158. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Exceed Times Limit", comment: "")
  159. subscribeWaterMarkWindowController.waterMarkView.isSecondEnable = false
  160. subscribeWaterMarkWindowController.waterMarkView.subscribeLabel.stringValue = NSLocalizedString("Upgrade Now", comment: "")
  161. } else {
  162. subscribeWaterMarkWindowController.waterMarkView.isSecondEnable = true
  163. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Delete Files from List", comment: "")
  164. }
  165. } else if type.isConvertType() {
  166. if (limit) {
  167. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Exceed Times Limit", comment: "")
  168. subscribeWaterMarkWindowController.waterMarkView.isSecondEnable = false
  169. subscribeWaterMarkWindowController.waterMarkView.subscribeLabel.stringValue = NSLocalizedString("Upgrade Now", comment: "")
  170. } else {
  171. subscribeWaterMarkWindowController.waterMarkView.isSecondEnable = true
  172. // if KMLightMemberManager.manager.isLogin() {
  173. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Convert First 10 Pages", comment: "")
  174. // } else {
  175. // subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Later", comment: "")
  176. // }
  177. }
  178. } else if (type == .save) {
  179. subscribeWaterMarkWindowController.waterMarkView.subscribeLabel.stringValue = NSLocalizedString("Upgrade Now", comment: "")
  180. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "")
  181. } else {
  182. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Save with Watermark", comment: "")
  183. }
  184. }
  185. subscribeWaterMarkController = subscribeWaterMarkWindowController
  186. subscribeWaterMarkMainWindow = window
  187. return subscribeWaterMarkWindowController
  188. }
  189. }
  190. func setup() {
  191. self.window?.contentView?.backgroundColor(NSColor(hex: "#FFFFFF"))
  192. self.waterMarkView.waterExportButton.title = ""
  193. self.waterMarkView.subscribeLabel.stringValue = ""
  194. self.waterMarkView.closeAction = { [weak self] view in
  195. guard let callBack = self?.closeAction else { return }
  196. callBack((self!))
  197. }
  198. self.waterMarkView.waterMarkExportAction = { [weak self] view in
  199. self?.trackEvent(eventName: "PUW_Sub_SaveWatermark")
  200. guard let callBack = self?.watermarkExportAction else { return }
  201. callBack((self!))
  202. }
  203. self.waterMarkView.subscribeAction = { [weak self] view in
  204. guard let callBack = self?.subscribeAction else { return }
  205. callBack((self!))
  206. }
  207. }
  208. func closeWindow() {
  209. if subscribeWaterMarkMainWindow != nil {
  210. subscribeWaterMarkMainWindow?.endSheet((subscribeWaterMarkController?.window)!)
  211. }
  212. if subscribeWaterMarkController != nil {
  213. subscribeWaterMarkController?.window?.close()
  214. }
  215. subscribeWaterMarkController = nil
  216. subscribeWaterMarkMainWindow = nil
  217. }
  218. func reloadData() {
  219. if KMSubscribeWaterMarkWindowController.canShowLoginBenefits() {
  220. self.waterViewHeightConstrain.constant = 462
  221. } else {
  222. self.waterViewHeightConstrain.constant = 563
  223. }
  224. self.waterMarkView.type = tempType
  225. self.waterMarkView.updateConstraints()
  226. }
  227. static func isSampleController() -> KMSubscribeWaterMarkWindowController {
  228. for window in NSApp.windows {
  229. let controller = window.windowController
  230. if controller is KMSubscribeWaterMarkWindowController {
  231. return controller as! KMSubscribeWaterMarkWindowController
  232. }
  233. }
  234. return KMSubscribeWaterMarkWindowController()
  235. }
  236. static func canShowLoginBenefits() -> Bool {
  237. return KMLightMemberManager.manager.isLogin() || tempType == .save || ((tempType.isConvertType() || tempType == .merge) && tempLimit)
  238. }
  239. }
  240. // MARK: - Analytics (埋点)
  241. extension KMSubscribeWaterMarkWindowController {
  242. func trackEvent(eventName: String) -> Void {
  243. KMAnalytics.trackEvent(eventName: eventName, parameters: [
  244. KMAnalytics.Parameter.categoryKey : KMAnalytics.Category.puw,
  245. KMAnalytics.Parameter.labelKey : KMAnalytics.Label.sub_PUW], platform: .AppCenter, appTarget: .all)
  246. }
  247. func trackEvent(type: KMSubscribeWaterMarkType) -> Void {
  248. KMTools.trackEvent(type: type)
  249. }
  250. }