// // EQNUserDefaultsCommand.swift // Earthquake Network // // Created by Busi Andrea on 26/09/2020. // Copyright © 2020 Earthquake Network. All rights reserved. // import Foundation import CoreLocation public class EQNUserDefaultsCommand: EQNCommandProtocol { // MARK: - Public func execute() { print("[EQNUserDefaultsCommand] Start execute") applyDefaultSettings() saveMissingValues() migrationV5_3() migrationV5_4() migrationV5_8() } // MARK: - Private private func applyDefaultSettings() { // seismic card settings if UserDefaults.standard.array(forKey: EQNUserDefaultKeySesmicInformations) == nil { let informations: [SeismicNetworkTableViewCell.InformationType] = [.buttons, .distance, .coordinate, .population] UserDefaults.standard.set(informations.map { $0.rawValue }, forKey: EQNUserDefaultKeySesmicInformations) } } private func saveMissingValues() { // `raggio sismi forti` was not saved before v2.3 if UserDefaults.standard.object(forKey: UserDefaults.AllertaSismicaRaggioSismiForti) == nil { UserDefaults.standard.set("600", forKey: UserDefaults.AllertaSismicaRaggioSismiForti) } } private func migrationV5_3() { let migrationPerformed = UserDefaults.standard.bool(forKey: UserDefaults.AppMigrationV5_3) if migrationPerformed { print("[EQNUserDefaultsCommand] Migration v5.3 already performed") return } // l'ultima posizione era salvata come array, la trasformiamo in valore singolo let lastLocations = EQNUtility.loadArray(of: CLLocation.self, fromUserDefaultsForKey: UserDefaults.UserDataLastLocation) as? [CLLocation] if let lastLocation = lastLocations?.last { UserDefaults.standard.removeObject(forKey: UserDefaults.UserDataLastLocation) EQNUserData.shared.saveLastLocation(lastLocation) } // resettiamo il Firebase token in modo da ri-eseguire la procedura di registrazione corretta EQNUserData.shared.saveFirebaseToken(nil) UserDefaults.standard.set(true, forKey: UserDefaults.AppMigrationV5_3) } private func migrationV5_4() { let migrationPerformed = UserDefaults.standard.bool(forKey: UserDefaults.AppMigrationV5_4) if migrationPerformed { print("[EQNUserDefaultsCommand] Migration v5.4 already performed") return } // migriamo l'ultima posizione negli user defaults condivisi let userDefaults = UserDefaults.standard let groupUserDefaults = UserDefaults.appGroup if let encodedLocation = userDefaults.object(forKey: UserDefaults.UserDataLastLocation) as? Data { groupUserDefaults?.set(encodedLocation, forKey: UserDefaults.UserDataLastLocation) } userDefaults.set(true, forKey: UserDefaults.AppMigrationV5_4) } private func migrationV5_8() { let migrationPerformed = UserDefaults.standard.bool(forKey: UserDefaults.AppMigrationV5_8) if migrationPerformed { print("[EQNUserDefaultsCommand] Migration v5.8 already performed") return } // delete old notification settings let userDefaults = UserDefaults.standard [ "NOTIFICHE_ATTIVA_RETI_SISMICHE_VICINE", "NOTIFICHE_ATTIVA_RETI_TERREMOTI_FORTI", "NOTIFICHE_ATTIVA_RETI_ENERGIA_FORTI", "NOTIFICHE_ATTIVA_RETI_LISTA_ENTI" ].forEach { key in userDefaults.removeObject(forKey: key) } // delete old filter values [ "EQN_ETA_MASSIMA", "EQN_SISMI_FORTI_ABILITATI", "EQN_SISMI_FORTI", "EQN_SISMI_QUALSIASI_MAGNITUDO", "EQN_SISMI_MODIFICA_IMPOSTAZIONI" ].forEach { key in userDefaults.removeObject(forKey: key) } // delete old "real time alert" settings [ "NOTIFICHE_ALLERA_SISMICA_IMPOSTA_VOLUME", "NOTIFICHE_ALLERA_SISMICA_TESTA_ALLARME", "NOTIFICHE_ALLERA_SISMICA_ABILITA_INTERVALLO", "NOTIFICHE_ALLERA_SISMICA_ORA_INIZIO", "NOTIFICHE_ALLERA_SISMICA_ORA_INIZIO" ].forEach { key in userDefaults.removeObject(forKey: key) } userDefaults.set(true, forKey: UserDefaults.AppMigrationV5_8) } }