Meshtastic-Apple/Meshtastic/Persistence/QueryCoreData.swift

102 lines
3 KiB
Swift
Raw Permalink Normal View History

2023-01-16 17:40:28 -08:00
//
// QueryCoreData.swift
// Meshtastic
//
// Created(c) Garth Vander Houwen 1/16/23.
//
import CoreData
public func getNodeInfo(id: Int64, context: NSManagedObjectContext) -> NodeInfoEntity? {
2023-03-06 10:33:18 -08:00
2023-01-31 10:50:17 -08:00
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(id))
2023-03-06 10:33:18 -08:00
2023-01-31 10:50:17 -08:00
do {
2023-03-06 15:30:10 -08:00
guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else {
return nil
}
if fetchedNode.count == 1 {
return fetchedNode[0]
2023-01-31 10:50:17 -08:00
}
} catch {
return nil
2023-01-31 10:50:17 -08:00
}
return nil
2023-01-31 10:50:17 -08:00
}
2023-10-01 12:25:38 -07:00
public func getStoreAndForwardMessageIds(seconds: Int, context: NSManagedObjectContext) -> [UInt32] {
2023-10-01 12:25:38 -07:00
let time = seconds * -1
let fetchMessagesRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "MessageEntity")
let timeRange = Calendar.current.date(byAdding: .minute, value: time, to: Date())
let milleseconds = Int32(timeRange?.timeIntervalSince1970 ?? 0)
fetchMessagesRequest.predicate = NSPredicate(format: "receivedTimestamp >= %d", milleseconds)
do {
guard let fetchedMessages = try context.fetch(fetchMessagesRequest) as? [MessageEntity] else {
return []
}
if fetchedMessages.count == 1 {
return fetchedMessages.map { UInt32($0.messageId) }
}
} catch {
return []
}
return []
}
2023-12-08 11:41:29 -08:00
public func getTraceRoute(id: Int64, context: NSManagedObjectContext) -> TraceRouteEntity? {
let fetchTraceRouteRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "TraceRouteEntity")
fetchTraceRouteRequest.predicate = NSPredicate(format: "id == %lld", Int64(id))
do {
guard let fetchedTraceRoute = try context.fetch(fetchTraceRouteRequest) as? [TraceRouteEntity] else {
return nil
}
if fetchedTraceRoute.count == 1 {
return fetchedTraceRoute[0]
}
} catch {
return nil
}
return nil
}
2023-10-01 12:25:38 -07:00
2023-01-31 10:50:17 -08:00
public func getUser(id: Int64, context: NSManagedObjectContext) -> UserEntity {
2023-03-06 10:33:18 -08:00
2023-01-31 10:50:17 -08:00
let fetchUserRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "UserEntity")
fetchUserRequest.predicate = NSPredicate(format: "num == %lld", Int64(id))
2023-03-06 10:33:18 -08:00
2023-01-31 10:50:17 -08:00
do {
2023-03-06 15:30:10 -08:00
guard let fetchedUser = try context.fetch(fetchUserRequest) as? [UserEntity] else {
return UserEntity(context: context)
}
2023-01-31 10:50:17 -08:00
if fetchedUser.count == 1 {
return fetchedUser[0]
}
} catch {
return UserEntity(context: context)
}
return UserEntity(context: context)
}
2023-01-16 17:40:28 -08:00
public func getWaypoint(id: Int64, context: NSManagedObjectContext) -> WaypointEntity {
2023-03-06 10:33:18 -08:00
2023-01-16 17:40:28 -08:00
let fetchWaypointRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "WaypointEntity")
fetchWaypointRequest.predicate = NSPredicate(format: "id == %lld", Int64(id))
2023-03-06 10:33:18 -08:00
2023-01-16 17:40:28 -08:00
do {
2023-03-06 15:30:10 -08:00
guard let fetchedWaypoint = try context.fetch(fetchWaypointRequest) as? [WaypointEntity] else {
return WaypointEntity(context: context)
}
2023-01-16 17:40:28 -08:00
if fetchedWaypoint.count == 1 {
return fetchedWaypoint[0]
}
} catch {
2023-01-16 23:16:57 -08:00
return WaypointEntity(context: context)
2023-01-16 17:40:28 -08:00
}
2023-01-16 23:16:57 -08:00
return WaypointEntity(context: context)
2023-01-16 17:40:28 -08:00
}