AccountProfileController.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. //
  2. // AccountProfileController.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by User-Tangchao on 2024/10/29.
  6. //
  7. import Cocoa
  8. class AccountProfileController: NSViewController {
  9. @IBOutlet weak var headerBox: NSBox!
  10. @IBOutlet weak var mainBox: NSBox!
  11. @IBOutlet weak var iv: NSImageView!
  12. @IBOutlet weak var nameLabel: NSTextField!
  13. @IBOutlet weak var refreshButton: NSButton!
  14. @IBOutlet weak var tipLabel: NSTextField!
  15. @IBOutlet weak var logoutButton: NSButton!
  16. @IBOutlet weak var hLineView: NSView!
  17. @IBOutlet weak var bottomLineView: NSView!
  18. var rightDatas: [String] = []
  19. var userInfoModel: AccountInfoModel?
  20. var model: AccountRightModel?
  21. var itemClick: KMCommonClickBlock?
  22. private var benefitsC_: AccountBenefitsController?
  23. private var rightC_: AccountRightController?
  24. private var winC: AccountLogoutWindowController?
  25. private var unSubwinC_: AccountUnsubscribeWindowController?
  26. private var pwdChangedwinC_: AccountPwdChangedWindowController?
  27. private var loadingView_: AccountLoadingView = {
  28. let view = AccountLoadingView()
  29. return view
  30. }()
  31. convenience init() {
  32. self.init(nibName: "AccountProfileController", bundle: MainBundle)
  33. }
  34. override func viewDidLoad() {
  35. super.viewDidLoad()
  36. // Do view setup here.
  37. self.headerBox.borderWidth = 0
  38. self.mainBox.borderWidth = 0
  39. self.iv.image = NSImage(named: "KMImageNameAccountIcon")
  40. self.nameLabel.font = .systemFont(ofSize: 18)
  41. self.nameLabel.textColor = KMAppearance.titleColor()
  42. self.refreshButton.image = NSImage(named: "KMImageNameAccountRefresh")
  43. self.refreshButton.target = self
  44. self.refreshButton.action = #selector(refreshAction)
  45. self.tipLabel.textColor = KMAppearance.themeColor()
  46. self.logoutButton.image = NSImage(named: "KMImageNameAccountLogout")
  47. self.hLineView.wantsLayer = true
  48. self.hLineView.layer?.backgroundColor = NSColor(hex: "#E5E5E5").cgColor
  49. self.bottomLineView.wantsLayer = true
  50. self.bottomLineView.layer?.backgroundColor = NSColor(hex: "#F4F4F4").cgColor
  51. self.logoutButton.target = self
  52. self.logoutButton.action = #selector(logoutAction)
  53. if let name = userInfoModel?.email, name.isEmpty == false {
  54. self.nameLabel.stringValue = String(format: NSLocalizedString("Hi,%@", comment: ""), name)
  55. } else {
  56. if let data = KMDataManager.ud_string(forKey: kAccountEmailKey) {
  57. self.nameLabel.stringValue = String(format: NSLocalizedString("Hi,%@", comment: ""), data)
  58. }
  59. }
  60. let status = self.model?.trialData?.status ?? 0
  61. if status == 1 {
  62. self.tipLabel.isHidden = false
  63. self.tipLabel.stringValue = String(format: NSLocalizedString("You have tried it for %d days.", comment: ""), self.model?.trialData?.triedDay ?? 0)
  64. } else {
  65. self.tipLabel.isHidden = false
  66. self.tipLabel.stringValue = NSLocalizedString("Your trial has ended.", comment: "")
  67. }
  68. let isVip = model?.isVip ?? 0
  69. self.tipLabel.isHidden = isVip == 1
  70. if isVip == 1 {
  71. self.showRight()
  72. } else {
  73. self.showBenefit()
  74. }
  75. }
  76. func showBenefit() {
  77. let vc = AccountBenefitsController()
  78. vc.rightDatas = self.rightDatas
  79. vc.datas = self.model?.moreBenefits ?? []
  80. self.benefitsC_ = vc
  81. self.mainBox.contentView = vc.view
  82. }
  83. func showRight() {
  84. let vc = AccountRightController()
  85. self.rightC_ = vc
  86. vc.rightDatas = self.model?.rightsInterestsData ?? []
  87. vc.expiredDatas = self.model?.expiredBenefits ?? []
  88. self.mainBox.contentView = vc.view
  89. vc.itemClick = { [weak self] idx, _ in
  90. if idx == 1 { // 更多权益
  91. self?.itemClick?(idx)
  92. } else if idx == 2 { // 取消订阅
  93. self?.unSubcribeAction()
  94. }
  95. }
  96. }
  97. @objc func refreshAction() {
  98. if let token = KMDataManager.ud_string(forKey: kAccountTokenKey), token.isEmpty == false {
  99. let header = ["Token" : token]
  100. self.showLoading()
  101. KMHTTP.OEM_POST(urlString: kURLAPI_oemGetPermissions, parameter: nil, headers: header) { success, dataModel, err in
  102. self.hideLoading()
  103. if success == false {
  104. // self.showBenefit()
  105. return
  106. }
  107. let model = AccountRightModel(dict: dataModel?.data as? [String : Any] ?? [:])
  108. self.model = model
  109. let isVip = model.isVip
  110. AccountManager.manager.isLogin = true
  111. AccountManager.manager.isVip = model.isVip == 1
  112. AccountManager.manager.hasAiPermissions = model.hasAiPermissions == 1
  113. AccountManager.manager.aiBuyUrl = model.aiBuyUrl
  114. NotificationCenter.default.post(name: .loginStatusChanged, object: nil)
  115. if isVip == 1 {
  116. self.showRight()
  117. } else {
  118. self.showBenefit()
  119. }
  120. if let data = model.memberInfo?.email, data.isEmpty == false {
  121. self.activateDevice(email: data)
  122. }
  123. }
  124. }
  125. }
  126. @objc func logoutAction() {
  127. if let _ = self.winC {
  128. NSSound.beep()
  129. return
  130. }
  131. let winC = AccountLogoutWindowController()
  132. self.winC = winC
  133. self.view.window?.addChildWindow(winC.window!, ordered: .above)
  134. let winFrame = self.view.window?.sheetParent?.frame ?? .zero
  135. var frame = self.winC?.window?.frame ?? .zero
  136. frame.origin.x = winFrame.origin.x + (winFrame.size.width-frame.size.width)*0.5
  137. frame.origin.y = winFrame.origin.y + (winFrame.size.height-frame.size.height)*0.5
  138. self.winC?.window?.setFrame(frame, display: true)
  139. winC.itemClick = { [weak self] idx, _ in
  140. for win in self?.view.window?.childWindows ?? [] {
  141. if win.isEqual(to: self?.winC?.window) {
  142. self?.view.window?.removeChildWindow(win)
  143. break
  144. }
  145. }
  146. self?.winC?.window?.orderOut(nil)
  147. self?.winC = nil
  148. if idx == 2 {
  149. if let token = KMDataManager.ud_string(forKey: kAccountTokenKey), token.isEmpty == false {
  150. let header = ["Token" : token]
  151. KMHTTP.OEM_POST(urlString: kURLAPI_oemLogout, parameter: nil, headers: header) { success, dataDict, err in
  152. if success == false {
  153. return
  154. }
  155. // 登出
  156. VerificationManager.default().unactivateDeviceWithcomplention { status, infoDict, err in
  157. VerificationManager.default().verification {status1 , infoDict1, err1 in
  158. }
  159. self?.view.window?.windowController?.km_quick_endSheet()
  160. KMDataManager.ud_set("", forKey: kAccountTokenKey)
  161. AccountManager.manager.isLogin = false
  162. AccountManager.manager.isVip = false
  163. AccountManager.manager.hasAiPermissions = false
  164. AccountManager.manager.aiBuyUrl = nil
  165. NotificationCenter.default.post(name: .loginStatusChanged, object: nil)
  166. }
  167. }
  168. } else {
  169. // self.gotoSignin()
  170. }
  171. return
  172. }
  173. }
  174. }
  175. func unSubcribeAction() {
  176. if let _ = self.unSubwinC_ {
  177. NSSound.beep()
  178. return
  179. }
  180. let winC = AccountUnsubscribeWindowController()
  181. self.unSubwinC_ = winC
  182. self.view.window?.addChildWindow(winC.window!, ordered: .above)
  183. let winFrame = self.view.window?.sheetParent?.frame ?? .zero
  184. var frame = self.unSubwinC_?.window?.frame ?? .zero
  185. frame.origin.x = winFrame.origin.x + (winFrame.size.width-frame.size.width)*0.5
  186. frame.origin.y = winFrame.origin.y + (winFrame.size.height-frame.size.height)*0.5
  187. self.unSubwinC_?.window?.setFrame(frame, display: true)
  188. winC.itemClick = { [weak self] idx, _ in
  189. for win in self?.view.window?.childWindows ?? [] {
  190. if win.isEqual(to: self?.unSubwinC_?.window) {
  191. self?.view.window?.removeChildWindow(win)
  192. break
  193. }
  194. }
  195. self?.unSubwinC_?.window?.orderOut(nil)
  196. self?.unSubwinC_ = nil
  197. if idx == 1 {
  198. KMTools.openURL(urlString: kCancelSubscriptionUrlString)
  199. return
  200. }
  201. }
  202. }
  203. func pwdChangedAction() {
  204. if let _ = self.pwdChangedwinC_ {
  205. NSSound.beep()
  206. return
  207. }
  208. let winC = AccountPwdChangedWindowController()
  209. self.pwdChangedwinC_ = winC
  210. self.view.window?.addChildWindow(winC.window!, ordered: .above)
  211. let winFrame = self.view.window?.sheetParent?.frame ?? .zero
  212. var frame = self.pwdChangedwinC_?.window?.frame ?? .zero
  213. frame.origin.x = winFrame.origin.x + (winFrame.size.width-frame.size.width)*0.5
  214. frame.origin.y = winFrame.origin.y + (winFrame.size.height-frame.size.height)*0.5
  215. self.pwdChangedwinC_?.window?.setFrame(frame, display: true)
  216. winC.itemClick = { [weak self] idx, _ in
  217. for win in self?.view.window?.childWindows ?? [] {
  218. if win.isEqual(to: self?.unSubwinC_?.window) {
  219. self?.view.window?.removeChildWindow(win)
  220. break
  221. }
  222. }
  223. self?.pwdChangedwinC_?.window?.orderOut(nil)
  224. self?.pwdChangedwinC_ = nil
  225. self?.view.window?.windowController?.km_quick_endSheet()
  226. }
  227. }
  228. func showLoading() {
  229. if let _ = self.loadingView_.superview {
  230. self.hideLoading()
  231. }
  232. let view = self.loadingView_
  233. self.view.addSubview(view)
  234. let viewFrame = self.view.frame
  235. var frame = view.frame
  236. frame.origin.x = (viewFrame.size.width-frame.size.width)*0.5
  237. frame.origin.y = (viewFrame.size.height-frame.size.height)*0.5
  238. view.frame = frame
  239. view.startAnimation()
  240. }
  241. func hideLoading() {
  242. self.loadingView_.stopAnimation()
  243. self.loadingView_.removeFromSuperview()
  244. }
  245. func activateDevice(email: String) {
  246. // if IAPProductsManager.default().isAvailableAllFunction() {
  247. // return
  248. // }
  249. VerificationManager.default().activateDevice(withInfo: ["email" : email]) { status, info, err in
  250. VerificationManager.default().verification { status, info, err in
  251. }
  252. }
  253. }
  254. }