123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- import Cocoa
- let USER_LOGINSTATE_NOTIFICATION = "kUserLoginStateNotification"
- let USER_INFO_CHANGE_NOTIFICATION = "kUserInfoChangeNotification"
- let ADVANCED_NOTIFICATION = "kAdvancedContentViewShowNotification"
- @objc enum KMLightMemberUserState: Int, CaseIterable {
- case unknown = 0
- case login = 1
- case logOut = 2
- case cancellation = 3
- }
- @objcMembers class KMLightMemberManager: NSObject {
- static let manager = KMLightMemberManager()
- var config: KMLightMemberConfig = KMLightMemberConfig()
- var info: KMLightMemberUserInfo = KMLightMemberUserInfo()
- var token: KMLightMemberToken = KMLightMemberToken()
-
- var userState: KMLightMemberUserState = .unknown
- var purchaseState: KMPurchaseManagerState {
- get {
- return KMPurchaseManager.manager.state
- }
- }
-
-
- var canShowAdvancedView: Bool = true {
- didSet {
- NotificationCenter.default.post(name: NSNotification.Name(rawValue: ADVANCED_NOTIFICATION), object: nil)
- }
- }
- override init() {
- super.init()
- self.reloadUserInfo()
- }
-
- func logOut() {
- DispatchQueue.main.async {
- self.userState = .logOut
- KMLightMemberCache.cache.clean()
- self.reloadUserInfo()
- NotificationCenter.default.post(name: NSNotification.Name(rawValue: USER_LOGINSTATE_NOTIFICATION), object: nil, userInfo: nil)
- }
- }
-
- func logIn() {
- self.userState = .login
- self.reloadUserInfo()
- NotificationCenter.default.post(name: NSNotification.Name(rawValue: USER_LOGINSTATE_NOTIFICATION), object: nil, userInfo: nil)
- }
-
- func cancellation() {
- self.userState = .cancellation
- self.reloadUserInfo()
- NotificationCenter.default.post(name: NSNotification.Name(rawValue: USER_LOGINSTATE_NOTIFICATION), object: nil, userInfo: nil)
- }
- }
- extension KMLightMemberManager {
-
- func reloadUserInfo() {
-
- let userInfo = KMLightMemberCache.cache.readData(type: .info)
- if userInfo.count != 0 {
- KMLightMemberUserInfo.parseData(data: userInfo, needSave: false) { [weak self] data in
- self?.info = data
- }
- } else {
- self.info = KMLightMemberUserInfo()
- }
-
- let token = KMLightMemberCache.cache.readData(type: .token)
- if token.count != 0 {
- KMLightMemberToken.parseData(data: token) { [weak self] data in
- self?.token = data
- }
- } else {
- self.token = KMLightMemberToken()
- }
- NotificationCenter.default.post(name: NSNotification.Name(rawValue: USER_INFO_CHANGE_NOTIFICATION), object: nil, userInfo: nil)
- }
-
-
- func updateNetworkingUserInfo(completion: @escaping (_ isDidLogout: Bool) -> Void) {
- KMRequestServerManager.manager.getUserInfo { [weak self] success, data, error, isLocal in
- if success {
- self?.reloadUserInfo()
- completion(false)
- } else {
- if error?.code == 304 {
- KMLightMemberManager.manager.logOut()
- completion(true)
- }
- completion(false)
- }
- }
- }
-
-
- func isTokenValid() async -> Bool {
- var result = false
-
- if self.isLogin() {
- do {
- let (success, error) = try await KMRequestServerManager.manager.getUserInfo2()
- if success {
- result = true
- } else {
- if error.code == 304 {
- KMLightMemberManager.manager.logOut()
- result = false
- } else {
- result = true
- }
- }
- return result
- } catch {
- return result
- }
- }
- return result
- }
- }
- extension KMLightMemberManager {
-
- func isLogin() -> Bool {
- var result: Bool = false
- if token.access_token != "" {
- result = true
- }
- return result
- }
-
-
- func isLogOff() -> Bool {
- var result: Bool = false
- return result
- }
-
-
- func canUseAdvanced(needNetworking: Bool = false) async -> Bool {
- var result: Bool = false
-
- var tokenValid = true
- if needNetworking {
- tokenValid = await self.isTokenValid()
- }
- KMPrint(tokenValid)
- if tokenValid && info.isInFreeUseTime || (self.purchaseState == .subscription || self.purchaseState == .trial) {
- result = true
- }
- return result
- }
-
-
-
- func canPayFunction() -> Bool {
- var result: Bool = false
-
- if (self.purchaseState == .subscription || self.purchaseState == .trial) {
- result = true
- }
- return result
- }
-
-
- func existOrderInfo() -> Bool {
- return self.info.existOrderInfo ?? false
- }
- }
- extension KMLightMemberManager {
-
- func checkPopupRegister() -> Bool {
- var needPop = false
- self.resetRegisterPopupStatus()
-
- var info: [String : Any] = [:]
- if (UserDefaults.standard.value(forKey: "CheckPopupRegistration") == nil) {
-
- } else {
- info = (UserDefaults.standard.value(forKey: "CheckPopupRegistration") as! [String : Any])
- }
-
- let isPopupShownToday = info["isPopupShownToday"] as? Bool ?? false
- var lastPopupDate = info["lastPopupDate"] as? Date
-
-
- if (!isPopupShownToday) {
-
- let currentDate = Date()
-
- if lastPopupDate == nil || (lastPopupDate != nil &&
- !Calendar.current.isDate(lastPopupDate!, inSameDayAs: currentDate)) {
-
- lastPopupDate = currentDate
- info.updateValue(lastPopupDate!, forKey: "lastPopupDate")
- info.updateValue(true, forKey: "isPopupShownToday")
- UserDefaults.standard.set(info, forKey: "CheckPopupRegistration")
- UserDefaults.standard.synchronize()
- needPop = true
- }
- }
- return needPop
- }
-
- func updatePopupShownToday(isPop: Bool) {
- var info: [String : Any] = [:]
- if (UserDefaults.standard.value(forKey: "CheckPopupRegistration") == nil) {
-
- } else {
- info = (UserDefaults.standard.value(forKey: "CheckPopupRegistration") as! [String : Any])
- }
- info.updateValue(isPop, forKey: "isPopupShownToday")
- UserDefaults.standard.set(info, forKey: "CheckPopupRegistration")
- UserDefaults.standard.synchronize()
- }
-
- func resetRegisterPopupStatus() {
- var info: [String : Any] = [:]
- if (UserDefaults.standard.value(forKey: "CheckPopupRegistration") == nil) {
-
- } else {
- info = (UserDefaults.standard.value(forKey: "CheckPopupRegistration") as! [String : Any])
- }
-
- var isPopupShownToday = info["isPopupShownToday"]
- let lastPopupDate = info["lastPopupDate"] as? Date
-
-
- let currentDate = Date()
-
- let calendar = Calendar.current
-
- let midnight = calendar.startOfDay(for: currentDate)
-
- if let lastPopupDate = lastPopupDate, lastPopupDate < midnight {
-
- isPopupShownToday = false
-
- info.updateValue(isPopupShownToday!, forKey: "isPopupShownToday")
- UserDefaults.standard.set(info, forKey: "CheckPopupRegistration")
- UserDefaults.standard.synchronize()
- }
- }
- }
|