diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift
index 3c9f51d6..784fb2f3 100644
--- a/Meshtastic/Helpers/MeshPackets.swift
+++ b/Meshtastic/Helpers/MeshPackets.swift
@@ -1301,18 +1301,30 @@ func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, context: NSM
if fetchedUsers.first(where: { $0.num == packet.from }) != nil {
newMessage.fromUser = fetchedUsers.first(where: { $0.num == packet.from })
}
- let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
+ let types: NSTextCheckingResult.CheckingType = [.address, .link, .phoneNumber]
+ let detector = try! NSDataDetector(types: types.rawValue)
let matches = detector.matches(in: messageText, options: [], range: NSRange(location: 0, length: messageText.utf16.count))
if matches.count > 0 {
- var messageWithLink = ""
+ var messageWithLink = messageText
for match in matches {
guard let range = Range(match.range, in: messageText) else { continue }
- let url = messageText[range]
- messageWithLink = messageText.replacingOccurrences(of: url, with: "[\(String(match.url?.host ?? "Link"))](\(url))")
+ if match.resultType == .address {
+ let address = messageText[range]
+ let urlEncodedAddress = address.addingPercentEncoding(withAllowedCharacters: .alphanumerics)
+ messageWithLink = messageWithLink.replacingOccurrences(of: address, with: "[\(address)](http://maps.apple.com/?address=\(urlEncodedAddress ?? ""))")
+ } else if match.resultType == .phoneNumber {
+ let phone = messageText[range]
+ messageWithLink = messageWithLink.replacingOccurrences(of: phone, with: "[\(phone)](tel:\(phone))")
+ } else if match.resultType == .link {
+ let url = messageText[range]
+ messageWithLink = messageWithLink.replacingOccurrences(of: url, with: "[\(String(match.url?.host ?? "Link"))](\(url))")
+ }
}
- newMessage.messagePayload = messageWithLink
+ newMessage.messagePayload = messageText
+ newMessage.messagePayloadMarkdown = messageWithLink
} else {
newMessage.messagePayload = messageText
+ newMessage.messagePayloadMarkdown = messageText
}
newMessage.fromUser?.objectWillChange.send()
newMessage.toUser?.objectWillChange.send()
diff --git a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV4.xcdatamodel/contents b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV4.xcdatamodel/contents
index 7bb559e9..11a72c34 100644
--- a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV4.xcdatamodel/contents
+++ b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV4.xcdatamodel/contents
@@ -96,6 +96,7 @@
+
diff --git a/Meshtastic/Views/Messages/ChannelMessageList.swift b/Meshtastic/Views/Messages/ChannelMessageList.swift
index 0773f431..dba468b2 100644
--- a/Meshtastic/Views/Messages/ChannelMessageList.swift
+++ b/Meshtastic/Views/Messages/ChannelMessageList.swift
@@ -60,7 +60,7 @@ struct ChannelMessageList: View {
.offset(y: -5)
}
VStack(alignment: currentUser ? .trailing : .leading) {
- let markdownText: LocalizedStringKey = LocalizedStringKey.init(message.messagePayload ?? "EMPTY MESSAGE")
+ let markdownText: LocalizedStringKey = LocalizedStringKey.init(message.messagePayloadMarkdown ?? (message.messagePayload ?? "EMPTY MESSAGE"))
let skyBlue = Color(red: 0.4627, green: 0.8392, blue: 1.0)
Text(markdownText)
.tint(skyBlue)
diff --git a/Meshtastic/Views/Messages/UserMessageList.swift b/Meshtastic/Views/Messages/UserMessageList.swift
index f80f61b6..deca1d4a 100644
--- a/Meshtastic/Views/Messages/UserMessageList.swift
+++ b/Meshtastic/Views/Messages/UserMessageList.swift
@@ -61,8 +61,8 @@ struct UserMessageList: View {
.offset(y: -5)
}
VStack(alignment: currentUser ? .trailing : .leading) {
- let markdownText: LocalizedStringKey = LocalizedStringKey.init(message.messagePayload ?? "EMPTY MESSAGE")
- let skyBlue = Color(red: 0.4627, green: 0.8392, blue: 1.0)
+ let markdownText: LocalizedStringKey = LocalizedStringKey.init(message.messagePayloadMarkdown ?? (message.messagePayload ?? "EMPTY MESSAGE"))
+ let skyBlue = Color(red: 0.4627, green: 0.8392, blue: 1.0)
Text(markdownText)
.tint(skyBlue)
.padding(10)