Files
eqn.ios/Sources/Earthquake Network/Models/Settings/EQNSettingUserReportNotification.swift

76 lines
2.6 KiB
Swift

//
// EQNSettingUserReportNotification.swift
// Earthquake Network
//
// Created by Andrea Busi on 10/06/24.
// Copyright © 2024 Earthquake Network. All rights reserved.
//
import Foundation
@objc
class EQNSettingUserReportNotification: NSObject {
@objc(sharedInstance)
static let shared = EQNSettingUserReportNotification()
@objc var isAbilitato: Bool
@objc var distanzaMassima: String
private static let DefaultDistanzaMassima = EQNData.DefaultSettingUserReportNotificationRadius.value
// MARK: - Init
override init() {
Self.migrate_v5_8()
let defaults = UserDefaults.standard
self.isAbilitato = defaults.bool(forKey: UserDefaults.NotificheSegnalazioniUtenteAbilitato)
self.distanzaMassima = defaults.object(forKey: UserDefaults.NotificheSegnalazioniUtenteDistanzaPosizione, or: Self.DefaultDistanzaMassima)
}
// MARK: - Public
func saveUserInfo() {
let defaults = UserDefaults.standard
defaults.set(isAbilitato, forKey: UserDefaults.NotificheSegnalazioniUtenteAbilitato)
defaults.set(distanzaMassima, forKey: UserDefaults.NotificheSegnalazioniUtenteDistanzaPosizione)
}
@objc class func saveDefaultValues() {
shared.isAbilitato = true
shared.distanzaMassima = DefaultDistanzaMassima
shared.saveUserInfo()
}
// MARK: - Private
private class func migrate_v5_8() {
// migriamo i valori della distanza massima che sono diminuti nella v5.8
// In precedenzai valori ammessi erano: 50, 100, 200, 300, 400, 500, 600, 800, 1000, 2000, 4000, qualsiasi distanza
// ora invece sono solamente 100, 250, 500, 1000
let defaults = UserDefaults.standard
let alreadyMigrated = defaults.bool(forKey: UserDefaults.SettingsUserReportNotificationMigrationV5_8)
if alreadyMigrated {
return
}
guard let savedDistance = defaults.object(forKey: UserDefaults.NotificheSegnalazioniUtenteDistanzaPosizione) as? String else {
defaults.set(true, forKey: UserDefaults.SettingsUserReportNotificationMigrationV5_8)
return
}
let maxDistance = switch savedDistance {
case "50", "100": "100"
case "200", "300": "250"
case "400", "500", "600": "500"
default:
// 800, 1000, 2000, 4000, qualsiasi distanza
"1000"
}
defaults.set(maxDistance, forKey: UserDefaults.NotificheSegnalazioniUtenteDistanzaPosizione)
defaults.set(true, forKey: UserDefaults.SettingsUserReportNotificationMigrationV5_8)
}
}