Files
eqn.ios/Sources/Earthquake Network/Models/EQNData.swift
T
Andrea Busi c7bf8ecc94 refactor: Recreate filters in Seismic section
- Add new fitlters
- Recreate controllers and support classes in Swift

Resolves: https://gitlab.steamware.net/eqn/eqn.ios/-/issues/14
2020-09-20 21:48:42 +02:00

197 lines
9.3 KiB
Swift

//
// EQNData.swift
// Earthquake Network
//
// Created by Busi Andrea on 26/08/2020.
// Copyright © 2020 Earthquake Network. All rights reserved.
//
import Foundation
@objc class EQNData: NSObject {
@objc public static let DefaultRaggioSisma = EQNGenericValue(value:"100000", display:"Qualsiasi distanza")
@objc public static let DefaultMagitudoDebole = EQNGenericValue(value:"2.0", display:"Magnitudo >= 2.0")
@objc public static let DefaultMagitudoForte = EQNGenericValue(value:"5.5", display:"Magnitudo >= 5.5")
@objc public static let DefaultSeismicToNotify = EQNGenericValue(value: "0", display: "Qualsiasi intensità")
@objc public static let DefaultDoNotDisturbStartTime = 8
@objc public static let DefaultDoNotDisturbEndTime = 22
@objc public static let DefaultPeriodoTemporale = EQNGenericValue(value: "1440", display: "Un giorno")
// MARK: - Public
@objc class func raggioSismi() -> [EQNGenericValue] {
[
EQNGenericValue(value:"50", display:"50 km"),
EQNGenericValue(value:"100", display:"100 km"),
EQNGenericValue(value:"200", display:"200 km"),
EQNGenericValue(value:"300", display:"300 km"),
EQNGenericValue(value:"400", display:"400 km"),
EQNGenericValue(value:"500", display:"500 km"),
EQNGenericValue(value:"600", display:"600 km"),
EQNGenericValue(value:"800", display:"800 km"),
EQNGenericValue(value:"1000", display:"1000 km"),
EQNGenericValue(value:"2000", display:"2000 km"),
EQNGenericValue(value:"4000", display:"4000 km"),
EQNGenericValue(value:"100000", display:"Qualsiasi distanza"),
]
}
/// Returns the EQNGenericValue for the given value, or the default one
/// - Parameter value: Sisma value to search
/// - Returns: Found value or default
@objc class func raggioSisma(for value: String?) -> EQNGenericValue {
if let value = value, let genericValue = Self.raggioSismi().first(where: { $0.value == value }) {
return genericValue
}
return Self.DefaultRaggioSisma
}
@objc class func magitudoDeboli() -> [EQNGenericValue] {
[
EQNGenericValue(value:"0.0", display:"Magnitudo >= 0.0"),
EQNGenericValue(value:"0.5", display:"Magnitudo >= 0.5"),
EQNGenericValue(value:"1.0", display:"Magnitudo >= 1.0"),
EQNGenericValue(value:"1.5", display:"Magnitudo >= 1.5"),
EQNGenericValue(value:"2.0", display:"Magnitudo >= 2.0"),
EQNGenericValue(value:"2.5", display:"Magnitudo >= 2.5"),
EQNGenericValue(value:"3.0", display:"Magnitudo >= 3.0"),
EQNGenericValue(value:"3.5", display:"Magnitudo >= 3.5"),
EQNGenericValue(value:"4.0", display:"Magnitudo >= 4.0"),
EQNGenericValue(value:"4.5", display:"Magnitudo >= 4.5"),
EQNGenericValue(value:"5.0", display:"Magnitudo >= 5.0"),
EQNGenericValue(value:"5.5", display:"Magnitudo >= 5.5")
]
}
/// Returns the EQNGenericValue for the given value, or the default one
/// - Parameter value: Magnitudo value to search
/// - Returns: Found value or default
@objc class func magitudoDebole(for value: String?) -> EQNGenericValue {
if let value = value, let genericValue = Self.magitudoDeboli().first(where: { $0.value == value }) {
return genericValue
}
return Self.DefaultMagitudoDebole
}
@objc class func magitudoForti() -> [EQNGenericValue] {
[
EQNGenericValue(value:"5.5", display:"Magnitudo >= 5.5"),
EQNGenericValue(value:"6.0", display:"Magnitudo >= 6.0"),
EQNGenericValue(value:"6.5", display:"Magnitudo >= 6.5"),
EQNGenericValue(value:"7.0", display:"Magnitudo >= 7.0"),
EQNGenericValue(value:"7.5", display:"Magnitudo >= 7.5")
]
}
/// Returns the EQNGenericValue for the given value, or the default one
/// - Parameter value: Magnitudo value to search
/// - Returns: Found value or default
@objc class func magitudoForte(for value: String?) -> EQNGenericValue {
if let value = value, let genericValue = Self.magitudoForti().first(where: { $0.value == value }) {
return genericValue
}
return Self.DefaultMagitudoForte
}
@objc class func seismicNetworks() -> [EQNSeismicNetwork] {
[
EQNSeismicNetwork(acronym: "USGS", country: NSLocalizedString("Globale", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "INGV", country: NSLocalizedString("Italia", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "IGN", country: NSLocalizedString("Spagna", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "CSI", country: NSLocalizedString("Cina", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "JMA", country: NSLocalizedString("Giappone", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "Ineter", country: NSLocalizedString("Nicaragua", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "SSN", country: NSLocalizedString("Messico", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "SGC", country: NSLocalizedString("Colombia", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "RSN", country: NSLocalizedString("Costa Rica", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "CSN", country: NSLocalizedString("Cile", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "FUNVISIS", country: NSLocalizedString("Venezuela", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "GeoNet", country: NSLocalizedString("Nuova Zelanda", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "INPRES", country: NSLocalizedString("Argentina", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "IGEPN", country: NSLocalizedString("Ecuador", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "IGP", country: NSLocalizedString("Perù", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "UASD", country: NSLocalizedString("Repubblica Dominicana", comment: ""), extended: ""),
EQNSeismicNetwork(acronym: "EMSC", country: NSLocalizedString("Globale", comment: ""), extended: "")
]
}
@objc class func seismicNetworkAcronyms() -> [String] {
Self.seismicNetworks().map { $0.acronym }
}
@objc class func seismicNetworkCountries() -> [String] {
Self.seismicNetworks().map { $0.country }
}
@objc class func seismic(for acronym: String?) -> EQNSeismicNetwork? {
guard let acronym = acronym else { return nil }
return Self.seismicNetworks().first(where: { $0.acronym == acronym })
}
@objc class func seismicToNotify() -> [EQNGenericValue] {
[
EQNGenericValue(value:"0", display:"Qualsiasi intensità"),
EQNGenericValue(value:"1", display:"Solo sismi forti")
]
}
@objc class func seismicToNotify(for value: String?) -> EQNGenericValue {
if let value = value, let genericValue = Self.seismicToNotify().first(where: { $0.value == value }) {
return genericValue
}
return Self.DefaultSeismicToNotify
}
@objc class func doNotDisturbStartDate(from date: Date?) -> Date {
if let date = date {
return date
}
// return default
let calendar = Calendar(identifier: .gregorian)
let units: Set<Calendar.Component> = [.year, .month, .day, .hour, .minute]
var components = calendar.dateComponents(units, from: Date())
components.hour = Self.DefaultDoNotDisturbStartTime
components.minute = 00
return calendar.date(from: components)!
}
@objc class func doNotDisturbEndDate(from date: Date?) -> Date {
if let date = date {
return date
}
// return default
let calendar = Calendar(identifier: .gregorian)
let units: Set<Calendar.Component> = [.year, .month, .day, .hour, .minute]
var components = calendar.dateComponents(units, from: Date())
components.hour = Self.DefaultDoNotDisturbEndTime
components.minute = 00
return calendar.date(from: components)!
}
@objc class func periodiTemporali() -> [EQNGenericValue] {
[
EQNGenericValue(value: "10", display: "10 minuti"),
EQNGenericValue(value: "60", display: "Un ora"),
EQNGenericValue(value: "120", display: "Due ore"),
EQNGenericValue(value: "360", display: "Sei ore"),
EQNGenericValue(value: "720", display: "Dodici ore"),
EQNGenericValue(value: "1440", display: "Un giorno")
]
}
/// Returns the EQNGenericValue for the given value, or the default one
/// - Parameter value: Temporal unit value to search
/// - Returns: Found value or default
@objc class func periodoTemporale(for value: String?) -> EQNGenericValue {
if let value = value, let genericValue = Self.periodiTemporali().first(where: { $0.value == value }) {
return genericValue
}
return Self.DefaultPeriodoTemporale
}
}