initial swift data conversion

This commit is contained in:
Garth Vander Houwen 2026-04-16 12:10:00 -07:00
parent 183924d4dc
commit b2c72ae166
130 changed files with 2939 additions and 2269 deletions

View file

@ -6,6 +6,7 @@
//
import SwiftUI
import SwiftData
import MapKit
import CoreLocation
import OSLog
@ -40,15 +41,16 @@ struct MeshMapContent: MapContent {
@AppStorage("mapOverlaysEnabled") private var showMapOverlays = false
@Binding var enabledOverlayConfigs: Set<UUID>
@FetchRequest(fetchRequest: PositionEntity.allPositionsFetchRequest(), animation: .easeIn)
var positions: FetchedResults<PositionEntity>
@FetchRequest(fetchRequest: WaypointEntity.allWaypointssFetchRequest(), animation: .none)
var waypoints: FetchedResults<WaypointEntity>
@FetchRequest(sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)],
predicate: NSPredicate(format: "enabled == true", ""), animation: .none)
private var routes: FetchedResults<RouteEntity>
@Query(filter: #Predicate<PositionEntity> { $0.nodePosition != nil && $0.latest == true },
sort: \PositionEntity.time, order: .reverse)
var positions: [PositionEntity]
@Query(sort: \WaypointEntity.name, order: .reverse)
var waypoints: [WaypointEntity]
@Query(filter: #Predicate<RouteEntity> { $0.enabled == true },
sort: \RouteEntity.name)
private var routes: [RouteEntity]
@MapContentBuilder
var positionAnnotations: some MapContent {
@ -57,10 +59,10 @@ struct MeshMapContent: MapContent {
if (!showFavorites || (position.nodePosition?.favorite == true)) && !(position.nodePosition?.ignored == true) {
let coordinateForNodePin: CLLocationCoordinate2D = if position.isPreciseLocation {
// Precise location: place node pin at actual location.
position.coordinate
position.nodeCoordinate ?? LocationsHandler.DefaultLocation
} else {
// Imprecise location: fuzz slightly so overlapping nodes are visible and clickable at highest zoom levels.
position.fuzzedCoordinate
position.fuzzedNodeCoordinate ?? LocationsHandler.DefaultLocation
}
if 12...15 ~= position.precisionBits || position.precisionBits == 32 {
@ -131,7 +133,8 @@ struct MeshMapContent: MapContent {
@MapContentBuilder
var routeAnnotations: some MapContent {
ForEach(routes) { route in
if let routeLocations = route.locations, let locations = Array(routeLocations) as? [LocationEntity] {
if !route.locations.isEmpty {
let locations = route.locations
let routeCoords = locations.compactMap {(loc) -> CLLocationCoordinate2D in
return loc.locationCoordinate ?? LocationsHandler.DefaultLocation
}
@ -167,7 +170,7 @@ struct MeshMapContent: MapContent {
var waypointAnnotations: some MapContent {
if waypoints.count > 0, showWaypoints, let waypoints = Array(waypoints) as? [WaypointEntity] {
ForEach(waypoints, id: \.self) { waypoint in
Annotation(waypoint.name ?? "?", coordinate: waypoint.coordinate) {
Annotation(waypoint.name ?? "?", coordinate: waypoint.mapCoordinate) {
LazyVStack {
ZStack {
CircleText(text: String(UnicodeScalar(Int(waypoint.icon)) ?? "📍"), color: Color.orange, circleSize: 40)

View file

@ -6,11 +6,11 @@
//
import SwiftUI
import MapKit
import CoreData
import SwiftData
struct NodeMapContent: MapContent {
@ObservedObject var node: NodeInfoEntity
@Bindable var node: NodeInfoEntity
/// Map State User Defaults
@AppStorage("meshMapShowNodeHistory") private var showNodeHistory = false
@AppStorage("meshMapShowRouteLines") private var showRouteLines = false
@ -22,7 +22,7 @@ struct NodeMapContent: MapContent {
@MapContentBuilder
var nodeMap: some MapContent {
let positionArray = node.positions?.array as? [PositionEntity] ?? []
let positionArray = node.positions
/// Node Color from node.num
let nodeColor = UIColor(hex: UInt32(node.num))
@ -43,7 +43,7 @@ struct NodeMapContent: MapContent {
let pp = PositionPrecision(rawValue: Int(position.precisionBits))
let radius: CLLocationDistance = pp?.precisionMeters ?? 0
if radius > 0.0 {
MapCircle(center: position.coordinate, radius: radius)
MapCircle(center: position.nodeCoordinate ?? LocationsHandler.DefaultLocation, radius: radius)
.foregroundStyle(Color(nodeColor).opacity(0.25))
.stroke(.white, lineWidth: 2)
}
@ -51,7 +51,7 @@ struct NodeMapContent: MapContent {
/// Lastest Position Pin
if position.latest {
/// Node Annotations
Annotation(position.latest ? node.user?.shortName ?? "?": "", coordinate: position.coordinate) {
Annotation(position.latest ? node.user?.shortName ?? "?": "", coordinate: position.nodeCoordinate ?? LocationsHandler.DefaultLocation) {
LazyVStack {
ZStack {
if pf.contains(.Heading) {
@ -100,7 +100,7 @@ struct NodeMapContent: MapContent {
// Having showNodeHistory enabled can be quite slow if there are thousands of history points.
if position.latest == false && node.favorite {
let headingDegrees = Angle.degrees(Double(position.heading))
Annotation("", coordinate: position.coordinate) {
Annotation("", coordinate: position.nodeCoordinate ?? LocationsHandler.DefaultLocation) {
if pf.contains(.Heading) {
Image(uiImage: prerenderedHistoryPointArrowImage)
.renderingMode(.original)
@ -154,7 +154,7 @@ struct NodeMapContent: MapContent {
@MapContentBuilder
var body: some MapContent {
if node.positions?.count ?? 0 > 0 {
if node.positions.count > 0 {
nodeMap
}
}