diff --git a/Localizable.xcstrings b/Localizable.xcstrings index 3bc72cef..fd5400d2 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -7365,6 +7365,9 @@ } } } + }, + "First heard" : { + }, "Five Minutes" : { diff --git a/Meshtastic/Persistence/UpdateCoreData.swift b/Meshtastic/Persistence/UpdateCoreData.swift index 381db194..06d08a9b 100644 --- a/Meshtastic/Persistence/UpdateCoreData.swift +++ b/Meshtastic/Persistence/UpdateCoreData.swift @@ -145,8 +145,10 @@ func upsertNodeInfoPacket (packet: MeshPacket, context: NSManagedObjectContext) let newNode = NodeInfoEntity(context: context) newNode.id = Int64(packet.from) newNode.num = Int64(packet.from) - newNode.firstHeard = Date(timeIntervalSince1970: TimeInterval(Int64(packet.rxTime))) - newNode.lastHeard = Date(timeIntervalSince1970: TimeInterval(Int64(packet.rxTime))) + if packet.rxTime != 0 { + newNode.firstHeard = Date(timeIntervalSince1970: TimeInterval(Int64(packet.rxTime))) + newNode.lastHeard = Date(timeIntervalSince1970: TimeInterval(Int64(packet.rxTime))) + } newNode.snr = packet.rxSnr newNode.rssi = packet.rxRssi newNode.viaMqtt = packet.viaMqtt diff --git a/Meshtastic/Views/Helpers/LastHeardText.swift b/Meshtastic/Views/Helpers/LastHeardText.swift index 8766f800..f34a0ec1 100644 --- a/Meshtastic/Views/Helpers/LastHeardText.swift +++ b/Meshtastic/Views/Helpers/LastHeardText.swift @@ -15,8 +15,8 @@ struct LastHeardText: View { }() var body: some View { - if let lastHeard, lastHeard.timeIntervalSince1970 > 0 { - Text(lastHeard.formatted()) + if let lastHeard, lastHeard.timeIntervalSince1970 > 0, let text = Self.formatter.string(for: lastHeard) { + Text(text) } else { Text("unknown") } diff --git a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift index 8779695c..aaad49c6 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift @@ -129,6 +129,21 @@ struct NodeDetail: View { } } + if let firstHeard = node.firstHeard { + HStack { + Label { + Text("First heard") + } icon: { + Image(systemName: "clock") + .symbolRenderingMode(.multicolor) + } + Spacer() + + LastHeardText(lastHeard: firstHeard) + .textSelection(.enabled) + } + } + if let lastHeard = node.lastHeard { HStack { Label {