mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
initial swift data conversion
This commit is contained in:
parent
183924d4dc
commit
b2c72ae166
130 changed files with 2939 additions and 2269 deletions
|
|
@ -6,68 +6,75 @@
|
|||
//
|
||||
|
||||
import Foundation
|
||||
import CoreData
|
||||
import SwiftData
|
||||
|
||||
extension NodeInfoEntity {
|
||||
|
||||
var latestPosition: PositionEntity? {
|
||||
return self.positions?.lastObject as? PositionEntity
|
||||
return self.positions.sorted(by: { ($0.time ?? .distantPast) < ($1.time ?? .distantPast) }).last
|
||||
}
|
||||
|
||||
var latestDeviceMetrics: TelemetryEntity? {
|
||||
return self.telemetries?.filtered(using: NSPredicate(format: "metricsType == 0")).lastObject as? TelemetryEntity
|
||||
return self.telemetries.filter { $0.metricsType == 0 }.sorted(by: { ($0.time ?? .distantPast) < ($1.time ?? .distantPast) }).last
|
||||
}
|
||||
|
||||
var latestEnvironmentMetrics: TelemetryEntity? {
|
||||
return self.telemetries?.filtered(using: NSPredicate(format: "metricsType == 1")).lastObject as? TelemetryEntity
|
||||
return self.telemetries.filter { $0.metricsType == 1 }.sorted(by: { ($0.time ?? .distantPast) < ($1.time ?? .distantPast) }).last
|
||||
}
|
||||
|
||||
var latestPowerMetrics: TelemetryEntity? {
|
||||
return self.telemetries?.filtered(using: NSPredicate(format: "metricsType == 2")).lastObject as? TelemetryEntity
|
||||
return self.telemetries.filter { $0.metricsType == 2 }.sorted(by: { ($0.time ?? .distantPast) < ($1.time ?? .distantPast) }).last
|
||||
}
|
||||
|
||||
var hasPositions: Bool {
|
||||
return self.positions?.count ?? 0 > 0
|
||||
return self.positions.count > 0
|
||||
}
|
||||
|
||||
var hasDeviceMetrics: Bool {
|
||||
let deviceMetrics = telemetries?.filter { ($0 as AnyObject).metricsType == 0 }
|
||||
return deviceMetrics?.count ?? 0 > 0
|
||||
let deviceMetrics = telemetries.filter { $0.metricsType == 0 }
|
||||
return deviceMetrics.count > 0
|
||||
}
|
||||
|
||||
var hasEnvironmentMetrics: Bool {
|
||||
let environmentMetrics = telemetries?.filter { ($0 as AnyObject).metricsType == 1 }
|
||||
return environmentMetrics?.count ?? 0 > 0
|
||||
let environmentMetrics = telemetries.filter { $0.metricsType == 1 }
|
||||
return environmentMetrics.count > 0
|
||||
}
|
||||
|
||||
func hasDataForLatestEnvironmentMetrics(attributes: [String]) -> Bool {
|
||||
guard let latest = self.latestEnvironmentMetrics else { return false }
|
||||
for attribute in attributes {
|
||||
guard self.latestEnvironmentMetrics?.entity.attributesByName.keys.contains(attribute) ?? false else {
|
||||
return false
|
||||
}
|
||||
if self.latestEnvironmentMetrics?.value(forKey: attribute) != nil {
|
||||
return true
|
||||
let mirror = Mirror(reflecting: latest)
|
||||
if let child = mirror.children.first(where: { $0.label == attribute }) {
|
||||
if child.value is Optional<Any> {
|
||||
let m = Mirror(reflecting: child.value)
|
||||
if m.displayStyle == .optional && m.children.count > 0 {
|
||||
return true
|
||||
}
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@MainActor
|
||||
var hasDetectionSensorMetrics: Bool {
|
||||
return user?.sensorMessageList.count ?? 0 > 0
|
||||
}
|
||||
|
||||
var hasPowerMetrics: Bool {
|
||||
let powerMetrics = telemetries?.filter { ($0 as AnyObject).metricsType == 2 }
|
||||
return powerMetrics?.count ?? 0 > 0
|
||||
let powerMetrics = telemetries.filter { $0.metricsType == 2 }
|
||||
return powerMetrics.count > 0
|
||||
}
|
||||
|
||||
var hasTraceRoutes: Bool {
|
||||
let routes = traceRoutes?.filter { ($0 as AnyObject).response }
|
||||
return routes?.count ?? 0 > 0
|
||||
let routes = traceRoutes.filter { $0.response }
|
||||
return routes.count > 0
|
||||
}
|
||||
|
||||
var hasPax: Bool {
|
||||
return pax?.count ?? 0 > 0
|
||||
return pax.count > 0
|
||||
}
|
||||
|
||||
var isStoreForwardRouter: Bool {
|
||||
|
|
@ -86,18 +93,18 @@ extension NodeInfoEntity {
|
|||
if UserDefaults.enableAdministration {
|
||||
return true
|
||||
} else {
|
||||
let adminChannel = myInfo?.channels?.filter { ($0 as AnyObject).name?.lowercased() == "admin" }
|
||||
let adminChannel = myInfo?.channels.filter { $0.name?.lowercased() == "admin" }
|
||||
return adminChannel?.count ?? 0 > 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public func createNodeInfo(num: Int64, context: NSManagedObjectContext) -> NodeInfoEntity {
|
||||
func createNodeInfo(num: Int64, context: ModelContext) -> NodeInfoEntity {
|
||||
|
||||
let newNode = NodeInfoEntity(context: context)
|
||||
let newNode = NodeInfoEntity()
|
||||
newNode.id = Int64(num)
|
||||
newNode.num = Int64(num)
|
||||
let newUser = UserEntity(context: context)
|
||||
let newUser = UserEntity()
|
||||
newUser.num = Int64(num)
|
||||
let userId = num.toHex()
|
||||
newUser.userId = "!\(userId)"
|
||||
|
|
@ -106,5 +113,7 @@ public func createNodeInfo(num: Int64, context: NSManagedObjectContext) -> NodeI
|
|||
newUser.shortName = last4
|
||||
newUser.hwModel = "UNSET"
|
||||
newNode.user = newUser
|
||||
context.insert(newNode)
|
||||
context.insert(newUser)
|
||||
return newNode
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue