KMSubscribeWaterMarkWindowController.swift 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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. typealias KMSubscribeWaterMarkWindowControllerCloseAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  11. typealias KMSubscribeWaterMarkWindowControllerWatermarkExportAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  12. typealias KMSubscribeWaterMarkWindowControllerSubscribeAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  13. typealias KMSubscribeWaterMarkWindowControllerRestoreAction = (_ controller: KMSubscribeWaterMarkWindowController) -> Void
  14. class KMSubscribeWaterMarkWindowController: NSWindowController {
  15. @IBOutlet weak var waterMarkView: KMSubscribeWaterMarkView!
  16. @IBOutlet weak var waterViewHeightConstrain: NSLayoutConstraint!
  17. var closeAction: KMSubscribeWaterMarkWindowControllerCloseAction?
  18. var subscribeAction: KMSubscribeWaterMarkWindowControllerSubscribeAction?
  19. var watermarkExportAction: KMSubscribeWaterMarkWindowControllerWatermarkExportAction?
  20. var restoreAction: KMSubscribeWaterMarkWindowControllerRestoreAction?
  21. var isContinue: Bool?
  22. var isAI: Bool?
  23. deinit {
  24. KMPrint("KMSubscribeWaterMarkWindowController 释放")
  25. }
  26. override func windowDidLoad() {
  27. super.windowDidLoad()
  28. self.setup()
  29. self.reloadData()
  30. // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
  31. }
  32. override func awakeFromNib() {
  33. super.awakeFromNib()
  34. if let data = self.isAI, data {
  35. self.waterMarkView.waterExportButton.isHidden = true
  36. self.waterMarkView.subTrailingConst.constant = 60
  37. self.waterMarkView.subWidthConst.constant = 280
  38. self.waterMarkView.preferentialImageTrailingConst.constant = 92
  39. } else {
  40. self.waterMarkView.waterExportButton.isHidden = false
  41. self.waterMarkView.subTrailingConst.constant = 0
  42. self.waterMarkView.subWidthConst.constant = 192
  43. self.waterMarkView.preferentialImageTrailingConst.constant = 32
  44. }
  45. }
  46. //MARK: 打开文件
  47. static func show(window: NSWindow, isContinue: Bool = false, isAI: Bool = false, completion: @escaping (_ isSubscribeSuccess: Bool, _ isWaterMarkExport: Bool, _ isClose: Bool) -> Void) -> KMSubscribeWaterMarkWindowController {
  48. let subscribeWaterMarkWindowController: KMSubscribeWaterMarkWindowController = KMSubscribeWaterMarkWindowController.init(windowNibName: "KMSubscribeWaterMarkWindowController")
  49. subscribeWaterMarkWindowController.isContinue = isContinue
  50. subscribeWaterMarkWindowController.isAI = isAI
  51. window.beginSheet(subscribeWaterMarkWindowController.window!)
  52. subscribeWaterMarkWindowController.window?.center()
  53. if isContinue {
  54. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("Continue", comment: "")
  55. } else {
  56. subscribeWaterMarkWindowController.waterMarkView.waterExportButton.title = NSLocalizedString("带水印保存", comment: "")
  57. }
  58. subscribeWaterMarkWindowController.closeAction = { controller in
  59. completion(false, false, true)
  60. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  61. controller.window?.close()
  62. subscribeWaterMarkController = nil
  63. subscribeWaterMarkMainWindow = nil
  64. }
  65. subscribeWaterMarkWindowController.watermarkExportAction = { controller in
  66. completion(false, true, false)
  67. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  68. controller.window?.close()
  69. subscribeWaterMarkController = nil
  70. subscribeWaterMarkMainWindow = nil
  71. }
  72. subscribeWaterMarkWindowController.subscribeAction = { controller in
  73. KMPrint("购买")
  74. controller.waterMarkView.beginLoading(backgroundColor: NSColor.black.withAlphaComponent(0.2))
  75. KMPurchaseManager.manager.purchaseProduct(productIdentifier: PRODUCT_1) { isSuccess, error in
  76. if isSuccess {
  77. KMPrint("购买成功")
  78. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  79. controller.window?.close()
  80. subscribeWaterMarkController = nil
  81. subscribeWaterMarkMainWindow = nil
  82. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) {
  83. if NSApp.mainWindow != nil {
  84. let controller = KMSubscribeSuccessWindowController.show(window: NSApp.mainWindow!)
  85. controller.closeAction = { controller in
  86. controller.closeWindow()
  87. completion(true, false, false)
  88. }
  89. }
  90. }
  91. } else {
  92. KMPrint("购买失败")
  93. controller.purchasefailed()
  94. completion(false, false, false)
  95. }
  96. controller.waterMarkView.endLoading()
  97. }
  98. }
  99. subscribeWaterMarkWindowController.restoreAction = { controller in
  100. KMPrint("restore")
  101. controller.waterMarkView.beginLoading(backgroundColor: NSColor.black.withAlphaComponent(0.2))
  102. KMPurchaseManager.manager.restorePurchases { isSuccess in
  103. if isSuccess {
  104. KMPrint("restore成功")
  105. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  106. controller.window?.close()
  107. subscribeWaterMarkController = nil
  108. subscribeWaterMarkMainWindow = nil
  109. if NSApp.mainWindow != nil {
  110. let controller = KMSubscribeSuccessWindowController.show(window: NSApp.mainWindow!)
  111. controller.closeAction = { controller in
  112. controller.closeWindow()
  113. completion(true, false, false)
  114. }
  115. }
  116. } else {
  117. KMPrint("restore失败")
  118. controller.purchasefailed()
  119. completion(false, false, false)
  120. }
  121. controller.waterMarkView.endLoading()
  122. }
  123. }
  124. subscribeWaterMarkController = subscribeWaterMarkWindowController
  125. subscribeWaterMarkMainWindow = window
  126. return subscribeWaterMarkWindowController
  127. }
  128. func setup() {
  129. self.window?.contentView?.backgroundColor(NSColor(hex: "#FFFFFF"))
  130. self.waterMarkView.waterExportButton.title = ""
  131. self.waterMarkView.closeAction = { [weak self] view in
  132. guard let callBack = self?.closeAction else { return }
  133. callBack((self!))
  134. }
  135. self.waterMarkView.waterMarkExportAction = { [weak self] view in
  136. guard let callBack = self?.watermarkExportAction else { return }
  137. callBack((self!))
  138. }
  139. self.waterMarkView.subscribeAction = { [weak self] view in
  140. guard let callBack = self?.subscribeAction else { return }
  141. callBack((self!))
  142. }
  143. self.waterMarkView.restoreAction = { [weak self] view in
  144. guard let callBack = self?.restoreAction else { return }
  145. callBack((self!))
  146. }
  147. }
  148. func closeWindow() {
  149. if subscribeWaterMarkMainWindow != nil {
  150. subscribeWaterMarkMainWindow?.endSheet((subscribeWaterMarkController?.window)!)
  151. }
  152. if subscribeWaterMarkController != nil {
  153. subscribeWaterMarkController?.window?.close()
  154. }
  155. subscribeWaterMarkController = nil
  156. subscribeWaterMarkMainWindow = nil
  157. }
  158. func reloadData() {
  159. #if VERSION_FREE
  160. self.waterViewHeightConstrain.constant = 511
  161. #endif
  162. #if VERSION_DMG
  163. self.waterViewHeightConstrain.constant = 511 - 80
  164. #endif
  165. }
  166. static func isSampleController() -> KMSubscribeWaterMarkWindowController {
  167. for window in NSApp.windows {
  168. let controller = window.windowController
  169. if controller is KMSubscribeWaterMarkWindowController {
  170. return controller as! KMSubscribeWaterMarkWindowController
  171. }
  172. }
  173. return KMSubscribeWaterMarkWindowController()
  174. }
  175. func purchasefailed() {
  176. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1, execute: {
  177. let alert = NSAlert()
  178. alert.messageText = NSLocalizedString("购买失败", comment: "")
  179. alert.informativeText = NSLocalizedString("", comment: "")
  180. // alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
  181. alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
  182. var window = NSApp.mainWindow
  183. if NSApp.mainWindow?.sheets.first != nil {
  184. window = NSApp.mainWindow?.sheets.first
  185. }
  186. if window != nil {
  187. alert.beginSheetModal(for: window!) { result in
  188. if (result == .alertFirstButtonReturn) {
  189. } else if result == .alertSecondButtonReturn {
  190. return
  191. }
  192. }
  193. }
  194. })
  195. }
  196. }