Files
2025-03-06 10:59:36 +01:00

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)
}
}