KMLightMemberManager.swift 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. //
  2. // KMLightMemberManager.swift
  3. // PDF Master
  4. //
  5. // Created by lizhe on 2023/2/22.
  6. //
  7. import Cocoa
  8. let USER_LOGINSTATE_NOTIFICATION = "kUserLoginStateNotification" //用户登录状态改变通知
  9. let USER_INFO_CHANGE_NOTIFICATION = "kUserInfoChangeNotification" //用户信息改变通知
  10. let ADVANCED_NOTIFICATION = "kAdvancedContentViewShowNotification" //用户高级引导显示
  11. enum KMLightMemberUserState: String, CaseIterable {
  12. case unknown = "unknown"
  13. case login = "login" //登录
  14. case logOut = "logOut" //登出
  15. case cancellation = "cancellation" //注销
  16. }
  17. @objcMembers class KMLightMemberManager: NSObject {
  18. static let manager = KMLightMemberManager()
  19. var config: KMLightMemberConfig = KMLightMemberConfig()
  20. var info: KMLightMemberUserInfo = KMLightMemberUserInfo()
  21. var token: KMLightMemberToken = KMLightMemberToken()
  22. var userState: KMLightMemberUserState = .unknown //用户状态
  23. var subscriptionState: KMSubscriptionState { //订阅状态
  24. get {
  25. return KMSubscriptionManager.manager.state
  26. }
  27. }
  28. //定时器
  29. // var timer: Timer = Timer()
  30. /**
  31. 是否显示高级功能视图
  32. */
  33. var canShowAdvancedView: Bool = true {
  34. didSet {
  35. NotificationCenter.default.post(name: NSNotification.Name(rawValue: ADVANCED_NOTIFICATION), object: nil)
  36. }
  37. }
  38. // {
  39. // get {
  40. // if UserDefaults.standard.object(forKey: "kAdvancedContentViewShow") != nil {
  41. // return false
  42. // } else {
  43. // return true
  44. // }
  45. // }
  46. //
  47. // set {
  48. // UserDefaults.standard.set("kAdvancedContentViewShow", forKey: "kAdvancedContentViewShow")
  49. // UserDefaults.standard.synchronize()
  50. // NotificationCenter.default.post(name: NSNotification.Name(rawValue: ADVANCED_NOTIFICATION), object: nil)
  51. // }
  52. // }
  53. override init() {
  54. super.init()
  55. self.reloadUserInfo()
  56. }
  57. func logOut() {
  58. self.userState = .logOut
  59. KMLightMemberCache.cache.clean()
  60. self.reloadUserInfo()
  61. NotificationCenter.default.post(name: NSNotification.Name(rawValue: USER_LOGINSTATE_NOTIFICATION), object: nil, userInfo: nil)
  62. }
  63. func logIn() {
  64. self.userState = .login
  65. self.reloadUserInfo()
  66. NotificationCenter.default.post(name: NSNotification.Name(rawValue: USER_LOGINSTATE_NOTIFICATION), object: nil, userInfo: nil)
  67. }
  68. func cancellation() {
  69. self.userState = .cancellation
  70. self.reloadUserInfo()
  71. NotificationCenter.default.post(name: NSNotification.Name(rawValue: USER_LOGINSTATE_NOTIFICATION), object: nil, userInfo: nil)
  72. }
  73. }
  74. //MARK: - 数据
  75. extension KMLightMemberManager {
  76. /**
  77. 刷新本地用户数据
  78. */
  79. func reloadUserInfo() {
  80. //获取用户信息
  81. let userInfo = KMLightMemberCache.cache.readData(type: .info)
  82. if userInfo.count != 0 {
  83. KMLightMemberUserInfo.parseData(data: userInfo, needSave: false) { [unowned self] data in
  84. self.info = data
  85. }
  86. } else {
  87. self.info = KMLightMemberUserInfo()
  88. }
  89. let token = KMLightMemberCache.cache.readData(type: .token)
  90. if token.count != 0 {
  91. KMLightMemberToken.parseData(data: token) { [unowned self] data in
  92. self.token = data
  93. }
  94. } else {
  95. self.token = KMLightMemberToken()
  96. }
  97. NotificationCenter.default.post(name: NSNotification.Name(rawValue: USER_INFO_CHANGE_NOTIFICATION), object: nil, userInfo: nil)
  98. }
  99. /**
  100. 刷新本地用户数据
  101. */
  102. func updateNetworkingUserInfo(completion: @escaping (_ isDidLogout: Bool) -> Void) {
  103. KMRequestServerManager.manager.getUserInfo { [unowned self] success, data, error, isLocal in
  104. if success {
  105. self.reloadUserInfo()
  106. completion(false)
  107. } else {
  108. if error?.code == 304 {
  109. KMLightMemberManager.manager.logOut()
  110. completion(true)
  111. }
  112. completion(false)
  113. }
  114. }
  115. }
  116. /**
  117. token是否生效
  118. */
  119. func isTokenValid() async -> Bool {
  120. var result = false
  121. if self.isLogin() {
  122. do {
  123. let (success, error) = try await KMRequestServerManager.manager.getUserInfo2()
  124. // Thread.sleep(forTimeInterval: 20.0)
  125. if success {
  126. result = true
  127. } else {
  128. if error.code == 304 {
  129. KMLightMemberManager.manager.logOut()
  130. result = false
  131. } else {
  132. result = true
  133. }
  134. }
  135. return result
  136. } catch {
  137. return result
  138. }
  139. }
  140. return result
  141. }
  142. }
  143. //MARK: - 快捷方法
  144. extension KMLightMemberManager {
  145. //是否已经登录
  146. func isLogin() -> Bool {
  147. var result: Bool = false
  148. if token.access_token != "" {
  149. result = true
  150. }
  151. return result
  152. }
  153. //是否已经注销
  154. func isLogOff() -> Bool {
  155. var result: Bool = false
  156. return result
  157. }
  158. //是否能使用高级功能
  159. func canUseAdvanced() async -> Bool {
  160. var result: Bool = false
  161. let tokenValid = await self.isTokenValid()
  162. print(tokenValid)
  163. if tokenValid && info.isInFreeUseTime {
  164. result = true
  165. }
  166. return result
  167. }
  168. }