2021-09-20 22:29:10 -07:00
/*
See LICENSE folder for this sample ’ s licensing information .
*/
2021-09-14 21:38:12 -07:00
import SwiftUI
import CoreLocation
2021-09-19 01:10:49 -07:00
struct NodeInfoModel : Identifiable , Codable {
2021-09-14 21:38:12 -07:00
2021-09-22 13:00:46 -07:00
var id : UInt32
2021-09-14 21:38:12 -07:00
var num : UInt32
2021-09-23 20:10:53 -07:00
var myInfo : MyInfoModel ?
2021-09-14 21:38:12 -07:00
var user : User
2021-09-19 01:10:49 -07:00
struct User : Identifiable , Codable {
2021-09-14 21:38:12 -07:00
var id : String
var longName : String
var shortName : String
var hwModel : String
2021-09-20 22:29:10 -07:00
init ( id : String , longName : String , shortName : String , hwModel : String ) {
self . id = id
self . longName = longName
self . shortName = shortName
self . hwModel = hwModel
}
2021-09-14 21:38:12 -07:00
}
var position : Position
2021-09-19 01:10:49 -07:00
struct Position : Codable {
2021-09-14 21:38:12 -07:00
var latitudeI : Int32 ?
2021-09-18 15:33:35 -07:00
var latitude : Double ? {
if let unwrappedLat = latitudeI {
let d = Double ( unwrappedLat )
2021-09-22 13:00:46 -07:00
if d = = 0 {
return nil
}
2021-09-19 01:10:49 -07:00
return d / 1e7
2021-09-18 15:33:35 -07:00
}
else {
return nil
}
}
2021-09-14 21:38:12 -07:00
var longitudeI : Int32 ?
2021-09-18 15:33:35 -07:00
var longitude : Double ? {
if let unwrappedLong = longitudeI {
let d = Double ( unwrappedLong )
2021-09-22 13:00:46 -07:00
if d = = 0 {
return nil
}
2021-09-19 01:10:49 -07:00
return d / 1e7
2021-09-18 15:33:35 -07:00
}
else {
return nil
}
}
var coordinate : CLLocationCoordinate2D ? {
2021-09-28 00:00:09 -07:00
if latitude != nil && longitude != nil {
2021-09-18 15:33:35 -07:00
let coord = CLLocationCoordinate2D ( latitude : latitude ! , longitude : longitude ! )
return coord
}
else {
return nil
}
}
2021-09-14 21:38:12 -07:00
var altitude : Int32 ?
var batteryLevel : Int32 ?
2021-09-21 20:49:12 -07:00
var time : UInt32 ?
2021-09-20 22:29:10 -07:00
2021-09-21 20:49:12 -07:00
init ( latitudeI : Int32 ? , longitudeI : Int32 ? , altitude : Int32 ? , batteryLevel : Int32 ? , time : UInt32 ? ) {
2021-09-20 22:29:10 -07:00
self . latitudeI = latitudeI
self . longitudeI = longitudeI
self . altitude = altitude
self . batteryLevel = batteryLevel
self . time = time
}
2021-09-14 21:38:12 -07:00
}
2021-09-21 20:49:12 -07:00
var lastHeard : UInt32
var snr : Float ?
2021-09-20 22:29:10 -07:00
2021-09-22 13:00:46 -07:00
init ( num : UInt32 , user : User , position : Position , lastHeard : UInt32 , snr : Float ? ) {
self . id = num
2021-09-20 22:29:10 -07:00
self . num = num
self . user = user
self . position = position
self . lastHeard = lastHeard
self . snr = snr
}
}
extension NodeInfoModel {
2021-09-21 20:49:12 -07:00
2021-09-20 22:29:10 -07:00
static var data : [ NodeInfoModel ] {
[
NodeInfoModel ( num : 2792101487 , user : User ( id : " !a66c166f " , longName : " RAK Solar 2 " , shortName : " RS2 " , hwModel : " RAK4631 " ) , position : Position ( latitudeI : nil , longitudeI : nil , altitude : nil , batteryLevel : 68 , time : nil ) , lastHeard : 1631593661 , snr : nil ) ,
2021-09-21 20:49:12 -07:00
NodeInfoModel ( num : 1000569662 , user : User ( id : " !3ba37b3e " , longName : " RAK Solar 1 " , shortName : " RS1 " , hwModel : " RAK4631 " ) , position : Position ( latitudeI : 476021390 , longitudeI : - 1221532609 , altitude : 71 , batteryLevel : 70 , time : 1632202227 ) , lastHeard : 1632202227 , snr : 5.25 )
2021-09-20 22:29:10 -07:00
]
}
}
extension NodeInfoModel {
struct Data {
var num : UInt32 = 0
var user : User
var postion : Position
2021-09-21 20:49:12 -07:00
var lastHeard : UInt32
var snr : Float ?
2021-09-20 22:29:10 -07:00
}
var data : Data {
return Data ( num : num , user : user , postion : position , lastHeard : lastHeard , snr : snr )
}
mutating func update ( from data : Data ) {
num = data . num
user = data . user
position = data . postion
lastHeard = data . lastHeard
snr = data . snr
}
2021-09-14 21:38:12 -07:00
}