// // EQNUserData.swift // Earthquake Network // // Created by Andrea Busi on 04/11/22. // Copyright © 2022 Earthquake Network. All rights reserved. // import Foundation import CoreLocation @objc class EQNUserData: NSObject { @objc(sharedData) static let shared = EQNUserData() // MARK: - Public @objc var isFirstStart: Bool { firebaseToken == nil } // MARK: - Firebase Token @objc var firebaseToken: String? { UserDefaults.standard.object(forKey: UserDefaults.UserDataFirebaseToken) as? String } @objc func saveFirebaseToken(_ token: String?) { if let token = token { UserDefaults.standard.set(token, forKey: UserDefaults.UserDataFirebaseToken) } else { UserDefaults.standard.removeObject(forKey: UserDefaults.UserDataFirebaseToken) } } // MARK: - User id @objc var userId: String? { let userId = UserDefaults.standard.object(forKey: UserDefaults.UserDataUserId) // nel corso delle versioni l'id è stato salvato in diversi modi // per evitare problemi, cerchiamo di convertirlo in modi diveri if let userId = userId as? String { return userId } else if let userId = userId as? Int { return "\(userId)" } else if let userId = userId as? NSNumber { return userId.stringValue } return nil } @objc func saveUserId(_ userId: String) { UserDefaults.standard.set(userId, forKey: UserDefaults.UserDataUserId) } // MARK: - Last location @objc var lastLocation: CLLocation? { guard let encodedLocation = UserDefaults.appGroup?.object(forKey: UserDefaults.UserDataLastLocation) as? Data else { return nil } let location = try? NSKeyedUnarchiver.unarchivedObject(ofClass: CLLocation.self, from: encodedLocation) return location } @objc func saveLastLocation(_ location: CLLocation) { guard let encodedLocation = try? NSKeyedArchiver.archivedData(withRootObject: location, requiringSecureCoding: false) else { return } UserDefaults.appGroup?.set(encodedLocation, forKey: UserDefaults.UserDataLastLocation) } // MARK: - Seismic Networks @objc func seismicNetworksSelected() -> [String] { if let savedNetworks = UserDefaults.standard.object(forKey: UserDefaults.UserDataSelectedSeismicNetworks) as? [String] { return savedNetworks } return [] } func saveSelectedSeismicNetworks(_ networks: [String]) { UserDefaults.standard.set(networks, forKey: UserDefaults.UserDataSelectedSeismicNetworks) } // MARK: - Public @objc func removeAllData() { UserDefaults.standard.removeObject(forKey: UserDefaults.UserDataFirebaseToken) UserDefaults.standard.removeObject(forKey: UserDefaults.UserDataUserId) UserDefaults.appGroup?.removeObject(forKey: UserDefaults.UserDataLastLocation) } }