KMSubscribeWaterMarkWindowController.swift 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  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. KMPrint("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. completion(false, false, true)
  37. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  38. controller.window?.close()
  39. subscribeWaterMarkController = nil
  40. subscribeWaterMarkMainWindow = nil
  41. }
  42. subscribeWaterMarkWindowController.watermarkExportAction = { controller in
  43. completion(false, true, false)
  44. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  45. controller.window?.close()
  46. subscribeWaterMarkController = nil
  47. subscribeWaterMarkMainWindow = nil
  48. }
  49. subscribeWaterMarkWindowController.subscribeAction = { controller in
  50. KMPrint("购买")
  51. controller.waterMarkView.beginLoading(backgroundColor: NSColor.black.withAlphaComponent(0.2))
  52. KMPurchaseManager.manager.purchaseProduct(productIdentifier: PRODUCT_1) { isSuccess, error in
  53. if isSuccess {
  54. KMPrint("购买成功")
  55. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  56. controller.window?.close()
  57. subscribeWaterMarkController = nil
  58. subscribeWaterMarkMainWindow = nil
  59. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) {
  60. if NSApp.mainWindow != nil {
  61. let controller = KMSubscribeSuccessWindowController.show(window: NSApp.mainWindow!)
  62. controller.closeAction = { controller in
  63. controller.closeWindow()
  64. completion(true, false, false)
  65. }
  66. }
  67. }
  68. } else {
  69. KMPrint("购买失败")
  70. controller.purchasefailed()
  71. completion(false, false, false)
  72. }
  73. controller.waterMarkView.endLoading()
  74. }
  75. }
  76. subscribeWaterMarkWindowController.restoreAction = { controller in
  77. KMPrint("restore")
  78. controller.waterMarkView.beginLoading(backgroundColor: NSColor.black.withAlphaComponent(0.2))
  79. KMPurchaseManager.manager.restorePurchases { isSuccess in
  80. if isSuccess {
  81. KMPrint("restore成功")
  82. subscribeWaterMarkMainWindow?.endSheet(controller.window!)
  83. controller.window?.close()
  84. subscribeWaterMarkController = nil
  85. subscribeWaterMarkMainWindow = nil
  86. if NSApp.mainWindow != nil {
  87. let controller = KMSubscribeSuccessWindowController.show(window: NSApp.mainWindow!)
  88. controller.closeAction = { controller in
  89. controller.closeWindow()
  90. completion(true, false, false)
  91. }
  92. }
  93. } else {
  94. KMPrint("restore失败")
  95. controller.purchasefailed()
  96. completion(false, false, false)
  97. }
  98. controller.waterMarkView.endLoading()
  99. }
  100. }
  101. subscribeWaterMarkController = subscribeWaterMarkWindowController
  102. subscribeWaterMarkMainWindow = window
  103. return subscribeWaterMarkWindowController
  104. }
  105. func setup() {
  106. self.window?.contentView?.backgroundColor(NSColor(hex: "#FFFFFF"))
  107. self.waterMarkView.closeAction = { [weak self] view in
  108. guard let callBack = self?.closeAction else { return }
  109. callBack((self!))
  110. }
  111. self.waterMarkView.waterMarkExportAction = { [weak self] view in
  112. guard let callBack = self?.watermarkExportAction else { return }
  113. callBack((self!))
  114. }
  115. self.waterMarkView.subscribeAction = { [weak self] view in
  116. guard let callBack = self?.subscribeAction else { return }
  117. callBack((self!))
  118. }
  119. self.waterMarkView.restoreAction = { [weak self] view in
  120. guard let callBack = self?.restoreAction else { return }
  121. callBack((self!))
  122. }
  123. }
  124. func closeWindow() {
  125. if subscribeWaterMarkMainWindow != nil {
  126. subscribeWaterMarkMainWindow?.endSheet((subscribeWaterMarkController?.window)!)
  127. }
  128. if subscribeWaterMarkController != nil {
  129. subscribeWaterMarkController?.window?.close()
  130. }
  131. subscribeWaterMarkController = nil
  132. subscribeWaterMarkMainWindow = nil
  133. }
  134. func reloadData() {
  135. #if VERSION_FREE
  136. self.waterViewHeightConstrain.constant = 511
  137. #endif
  138. #if VERSION_DMG
  139. self.waterViewHeightConstrain.constant = 511 - 80
  140. #endif
  141. }
  142. static func isSampleController() -> KMSubscribeWaterMarkWindowController {
  143. for window in NSApp.windows {
  144. let controller = window.windowController
  145. if controller is KMSubscribeWaterMarkWindowController {
  146. return controller as! KMSubscribeWaterMarkWindowController
  147. }
  148. }
  149. return KMSubscribeWaterMarkWindowController()
  150. }
  151. func purchasefailed() {
  152. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1, execute: {
  153. let alert = NSAlert()
  154. alert.messageText = NSLocalizedString("购买失败", comment: "")
  155. alert.informativeText = NSLocalizedString("", comment: "")
  156. // alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
  157. alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
  158. var window = NSApp.mainWindow
  159. if NSApp.mainWindow?.sheets.first != nil {
  160. window = NSApp.mainWindow?.sheets.first
  161. }
  162. if window != nil {
  163. alert.beginSheetModal(for: window!) { result in
  164. if (result == .alertFirstButtonReturn) {
  165. } else if result == .alertSecondButtonReturn {
  166. return
  167. }
  168. }
  169. }
  170. })
  171. }
  172. }