116 lines
3.3 KiB
Swift
116 lines
3.3 KiB
Swift
//
|
|
// 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 {
|
|
let firstAppStartExecuted = UserDefaults.standard.bool(forKey: UserDefaults.FirstAppStartExecuted)
|
|
return !firstAppStartExecuted
|
|
}
|
|
|
|
// MARK: - Permissions
|
|
|
|
@objc
|
|
var locationAuthorizationStatus: CLAuthorizationStatus {
|
|
CLLocationManager().authorizationStatus
|
|
}
|
|
|
|
// 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)
|
|
}
|
|
}
|