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