KMSubscribeWaterMarkWindowController.swift 8.5 KB

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