diff --git a/Meshtastic/Extensions/CoreData/MyInfoEntityExtension.swift b/Meshtastic/Extensions/CoreData/MyInfoEntityExtension.swift
index a9e22a39..888df18e 100644
--- a/Meshtastic/Extensions/CoreData/MyInfoEntityExtension.swift
+++ b/Meshtastic/Extensions/CoreData/MyInfoEntityExtension.swift
@@ -17,4 +17,8 @@ extension MyInfoEntity {
let unreadMessages = messageList.filter{ ($0 as AnyObject).read == false && ($0 as AnyObject).isEmoji == false }
return unreadMessages.count
}
+ var hasAdmin: Bool {
+ let adminChannel = channels?.filter{ ($0 as AnyObject).name?.lowercased() == "admin" }
+ return adminChannel?.count ?? 0 > 0
+ }
}
diff --git a/Meshtastic/Extensions/CoreData/NodeInfoEntityExtension.swift b/Meshtastic/Extensions/CoreData/NodeInfoEntityExtension.swift
index b0a0905d..2f42ad06 100644
--- a/Meshtastic/Extensions/CoreData/NodeInfoEntityExtension.swift
+++ b/Meshtastic/Extensions/CoreData/NodeInfoEntityExtension.swift
@@ -47,7 +47,6 @@ extension NodeInfoEntity {
}
return false
}
-
}
public func createNodeInfo(num: Int64, context: NSManagedObjectContext) -> NodeInfoEntity {
diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift
index b4a8243a..b3d4712d 100644
--- a/Meshtastic/Helpers/MeshPackets.swift
+++ b/Meshtastic/Helpers/MeshPackets.swift
@@ -207,6 +207,7 @@ func deviceMetadataPacket (metadata: DeviceMetadata, fromNum: Int64, context: NS
return
}
let newMetadata = DeviceMetadataEntity(context: context)
+ newMetadata.time = Date()
newMetadata.deviceStateVersion = Int32(metadata.deviceStateVersion)
newMetadata.canShutdown = metadata.canShutdown
newMetadata.hasWifi = metadata.hasWifi_p
diff --git a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV 35.xcdatamodel/contents b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV 35.xcdatamodel/contents
index 1abcf420..b6ad5f12 100644
--- a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV 35.xcdatamodel/contents
+++ b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV 35.xcdatamodel/contents
@@ -83,6 +83,7 @@
+
diff --git a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift
index faa633a3..1e8a5796 100644
--- a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift
+++ b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift
@@ -26,6 +26,27 @@ struct NodeDetail: View {
VStack {
ScrollView {
NodeInfoItem(node: node)
+ if node.metadata != nil {
+ HStack(alignment: .center) {
+ Text("firmware.version").font(.title2)+Text(": \(node.metadata?.firmwareVersion ?? "unknown".localized)")
+ .font(.title3).foregroundColor(Color.gray)
+ if connectedNode != nil && connectedNode?.myInfo?.hasAdmin ?? false && node.metadata?.time != nil && !Calendar.current.isDateInToday(node.metadata!.time!) {
+ Button {
+ let adminMessageId = bleManager.requestDeviceMetadata(fromUser: connectedNode!.user!, toUser: node.user!, adminIndex: connectedNode!.myInfo!.adminIndex, context: context)
+ if adminMessageId > 0 {
+ print("Sent node metadata request from node details")
+ }
+ } label: {
+ Image(systemName: "arrow.clockwise")
+ .font(.title3)
+ }
+ .buttonStyle(.bordered)
+ .buttonBorderShape(.capsule)
+ .controlSize(.small)
+ }
+ }
+ Divider()
+ }
VStack {
NavigationLink {
DeviceMetricsLog(node: node)
diff --git a/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift b/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift
index c3c877f2..0b381b9c 100644
--- a/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift
+++ b/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift
@@ -79,12 +79,5 @@ struct NodeInfoItem: View {
}
}
Divider()
- if node.metadata != nil {
- HStack(alignment: .center) {
- Text("firmware.version").font(.title2)+Text(": \(node.metadata?.firmwareVersion ?? "unknown".localized)")
- .font(.title3).foregroundColor(Color.gray)
- }
- Divider()
- }
}
}
diff --git a/Meshtastic/Views/Settings/RouteRecorder.swift b/Meshtastic/Views/Settings/RouteRecorder.swift
index 5bdf6f52..63ca1697 100644
--- a/Meshtastic/Views/Settings/RouteRecorder.swift
+++ b/Meshtastic/Views/Settings/RouteRecorder.swift
@@ -175,7 +175,8 @@ struct RouteRecorder: View {
locationsHandler.recordingStarted = Date()
let newRoute = RouteEntity(context: context)
newRoute.date = Date()
- newRoute.name = "\(newRoute.date?.relativeTimeOfDay() ?? "morning".localized) hike"
+ let at = ActivityType(rawValue: activity)
+ newRoute.name = "\(newRoute.date?.relativeTimeOfDay() ?? "morning".localized) \(at?.fileNameString ?? "hike")"
newRoute.id = Int32.random(in: Int32(Int8.max) ... Int32.max)
newRoute.color = Int64(UIColor.random.hex)
newRoute.enabled = false