Meshtastic-Apple/MeshtasticClient/Model/NodeInfoModel.swift
2021-09-28 00:00:09 -07:00

123 lines
3.5 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
See LICENSE folder for this samples licensing information.
*/
import SwiftUI
import CoreLocation
struct NodeInfoModel: Identifiable, Codable {
var id: UInt32
var num: UInt32
var myInfo: MyInfoModel?
var user: User
struct User: Identifiable, Codable {
var id: String
var longName: String
var shortName: String
var hwModel: String
init(id: String, longName: String, shortName: String, hwModel: String) {
self.id = id
self.longName = longName
self.shortName = shortName
self.hwModel = hwModel
}
}
var position: Position
struct Position: Codable {
var latitudeI: Int32?
var latitude: Double? {
if let unwrappedLat = latitudeI {
let d = Double(unwrappedLat)
if d == 0 {
return nil
}
return d / 1e7
}
else {
return nil
}
}
var longitudeI: Int32?
var longitude: Double? {
if let unwrappedLong = longitudeI {
let d = Double(unwrappedLong)
if d == 0 {
return nil
}
return d / 1e7
}
else {
return nil
}
}
var coordinate: CLLocationCoordinate2D? {
if latitude != nil && longitude != nil {
let coord = CLLocationCoordinate2D(latitude: latitude!, longitude: longitude!)
return coord
}
else {
return nil
}
}
var altitude: Int32?
var batteryLevel: Int32?
var time: UInt32?
init(latitudeI: Int32?, longitudeI: Int32?, altitude: Int32?, batteryLevel: Int32?, time: UInt32? ) {
self.latitudeI = latitudeI
self.longitudeI = longitudeI
self.altitude = altitude
self.batteryLevel = batteryLevel
self.time = time
}
}
var lastHeard: UInt32
var snr: Float?
init(num: UInt32, user: User, position: Position, lastHeard: UInt32, snr: Float?) {
self.id = num
self.num = num
self.user = user
self.position = position
self.lastHeard = lastHeard
self.snr = snr
}
}
extension NodeInfoModel {
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),
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)
]
}
}
extension NodeInfoModel {
struct Data {
var num: UInt32 = 0
var user: User
var postion: Position
var lastHeard: UInt32
var snr: Float?
}
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
}
}