From ff32894d5a45805b901444d3204c9cee27d394a7 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Wed, 5 Jan 2022 00:06:31 -0800 Subject: [PATCH] Tapbacks with firmware version checking --- Meshtastic Client.xcodeproj/project.pbxproj | 4 +- .../Views/Messages/UserMessageList.swift | 245 ++++++++++-------- 2 files changed, 137 insertions(+), 112 deletions(-) diff --git a/Meshtastic Client.xcodeproj/project.pbxproj b/Meshtastic Client.xcodeproj/project.pbxproj index 7ed59af4..47ddc10e 100644 --- a/Meshtastic Client.xcodeproj/project.pbxproj +++ b/Meshtastic Client.xcodeproj/project.pbxproj @@ -718,7 +718,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGN_ENTITLEMENTS = MeshtasticClient/MeshtasticClient.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 5; + CURRENT_PROJECT_VERSION = 7; DEVELOPMENT_ASSET_PATHS = "\"MeshtasticClient/Preview Content\""; DEVELOPMENT_TEAM = GCH7VS5Y9R; ENABLE_PREVIEWS = YES; @@ -746,7 +746,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES; CODE_SIGN_ENTITLEMENTS = MeshtasticClient/MeshtasticClient.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 5; + CURRENT_PROJECT_VERSION = 7; DEVELOPMENT_ASSET_PATHS = "\"MeshtasticClient/Preview Content\""; DEVELOPMENT_TEAM = GCH7VS5Y9R; ENABLE_PREVIEWS = YES; diff --git a/MeshtasticClient/Views/Messages/UserMessageList.swift b/MeshtasticClient/Views/Messages/UserMessageList.swift index 38571400..2e104e65 100644 --- a/MeshtasticClient/Views/Messages/UserMessageList.swift +++ b/MeshtasticClient/Views/Messages/UserMessageList.swift @@ -32,7 +32,11 @@ struct UserMessageList: View { @State var messageCount = 0 var body: some View { - + + let firmwareVersion = bleManager.connectedPeripheral != nil ? bleManager.connectedPeripheral.firmwareVersion : "0.0.0" + let minimumVersion = "1.2.50" + let hasTapbackSupport = minimumVersion.compare(firmwareVersion, options: .numeric) == .orderedAscending || minimumVersion.compare(firmwareVersion, options: .numeric) == .orderedSame + VStack { let allMessages = user.value(forKey: "allMessages") as! [MessageEntity] @@ -69,107 +73,115 @@ struct UserMessageList: View { .background(currentUser ? Color.blue : Color(.darkGray)) .cornerRadius(15) .contextMenu { - Menu("Tapback response") { - Button(action: { + + if hasTapbackSupport { + + Menu("Tapback response") { - if bleManager.sendMessage(message: "❤️", toUserNum: user.num, isTapback: true, replyID: message.messageId) { - - print("Sent ❤️ Tapback") - - } else { print("❤️ Tapback Failed") } - }) { - Text("Heart") - let image = "❤️".image() - Image(uiImage: image!) + + Button(action: { + + if bleManager.sendMessage(message: "❤️", toUserNum: user.num, isTapback: true, replyID: message.messageId) { + + print("Sent ❤️ Tapback") + + } else { print("❤️ Tapback Failed") } + + }) { + Text("Heart") + let image = "❤️".image() + Image(uiImage: image!) + } + Button(action: { + + if bleManager.sendMessage(message: "👍", toUserNum: user.num, isTapback: true, replyID: message.messageId) { + + print("Sent 👍 Tapback") + + } else { print("👍 Tapback Failed")} + + }) { + Text("Thumbs Up") + let image = "👍".image() + Image(uiImage: image!) + } + Button(action: { + + if bleManager.sendMessage(message: "👎", toUserNum: user.num, isTapback: true, replyID: message.messageId) { + + print("Sent 👎 Tapback") + + } else { print("👎 Tapback Failed") } + + }) { + Text("Thumbs Down") + let image = "👎".image() + Image(uiImage: image!) + } + Button(action: { + + if bleManager.sendMessage(message: "🤣", toUserNum: user.num, isTapback: true, replyID: message.messageId) { + + print("Sent 🤣 Tapback") + + + } else { print("🤣 Tapback Failed") } + + }) { + Text("HaHa") + let image = "🤣".image() + Image(uiImage: image!) + } + Button(action: { + + if bleManager.sendMessage(message: "‼️", toUserNum: user.num, isTapback: true, replyID: message.messageId) { + + print("Sent ‼️ Tapback") + + } else { print("‼️ Tapback Failed") } + + }) { + Text("Exclamation Mark") + let image = "‼️".image() + Image(uiImage: image!) + } + Button(action: { + + if bleManager.sendMessage(message: "❓", toUserNum: user.num, isTapback: true, replyID: message.messageId) { + + print("Sent ❓ Tapback") + + } else { print("❓ Tapback Failed") } + + }) { + Text("Question Mark") + let image = "❓".image() + Image(uiImage: image!) + } + Button(action: { + + if bleManager.sendMessage(message: "💩", toUserNum: user.num, isTapback: true, replyID: message.messageId) { + + print("Sent 💩 Tapback") + + } else { print("💩 Tapback Failed") } + + }) { + Text("Poop") + let image = "💩".image() + Image(uiImage: image!) + } } Button(action: { - - if bleManager.sendMessage(message: "👍", toUserNum: user.num, isTapback: true, replyID: message.messageId) { - - print("Sent 👍 Tapback") - - } else { print("👍 Tapback Failed")} - + self.replyMessageId = message.messageId + self.focusedField = .messageText + + print("I want to reply to \(message.messageId)") }) { - Text("Thumbs Up") - let image = "👍".image() - Image(uiImage: image!) + Text("Reply") + Image(systemName: "arrowshape.turn.up.left.2.fill") } - Button(action: { - - if bleManager.sendMessage(message: "👎", toUserNum: user.num, isTapback: true, replyID: message.messageId) { - - print("Sent 👎 Tapback") - - } else { print("👎 Tapback Failed") } - - }) { - Text("Thumbs Down") - let image = "👎".image() - Image(uiImage: image!) - } - Button(action: { - - if bleManager.sendMessage(message: "🤣", toUserNum: user.num, isTapback: true, replyID: message.messageId) { - - print("Sent 🤣 Tapback") - - } else { print("🤣 Tapback Failed") } - - }) { - Text("HaHa") - let image = "🤣".image() - Image(uiImage: image!) - } - Button(action: { - - if bleManager.sendMessage(message: "‼️", toUserNum: user.num, isTapback: true, replyID: message.messageId) { - - print("Sent ‼️ Tapback") - - } else { print("‼️ Tapback Failed") } - - }) { - Text("Exclamation Mark") - let image = "‼️".image() - Image(uiImage: image!) - } - Button(action: { - - if bleManager.sendMessage(message: "❓", toUserNum: user.num, isTapback: true, replyID: message.messageId) { - - print("Sent ❓ Tapback") - - } else { print("❓ Tapback Failed") } - - }) { - Text("Question Mark") - let image = "❓".image() - Image(uiImage: image!) - } - Button(action: { - - if bleManager.sendMessage(message: "💩", toUserNum: user.num, isTapback: true, replyID: message.messageId) { - - print("Sent 💩 Tapback") - - } else { print("💩 Tapback Failed") } - - }) { - Text("Poop") - let image = "💩".image() - Image(uiImage: image!) - } - } - Button(action: { - self.replyMessageId = message.messageId - self.focusedField = .messageText - - print("I want to reply to \(message.messageId)") - }) { - Text("Reply") - Image(systemName: "arrowshape.turn.up.left.2.fill") } Button(action: { UIPasteboard.general.string = message.messagePayload @@ -188,27 +200,40 @@ struct UserMessageList: View { } } - VStack (alignment: .trailing) { - + if hasTapbackSupport { + let tapbacks = message.value(forKey: "tapbacks") as! [MessageEntity] - HStack { + + + if tapbacks.count > 0 { - ForEach( tapbacks ) { (tapback: MessageEntity) in - - VStack { + VStack (alignment: .trailing) { + + HStack { - let image = tapback.messagePayload!.image(fontSize: 20) - Image(uiImage: image!).font(.caption) - Text("\(tapback.fromUser?.shortName ?? "???")") - .font(.caption2) - .foregroundColor(.gray) - .fixedSize() - .padding(.bottom, 1) + ForEach( tapbacks ) { (tapback: MessageEntity) in + + VStack { + + let image = tapback.messagePayload!.image(fontSize: 20) + Image(uiImage: image!).font(.caption) + Text("\(tapback.fromUser?.shortName ?? "???")") + .font(.caption2) + .foregroundColor(.gray) + .fixedSize() + .padding(.bottom, 1) + } + } } + .padding(10) + .overlay( + RoundedRectangle(cornerRadius: 18) + .stroke(Color.gray, lineWidth: 1) + ) } } } - + HStack { let time = Int32(message.messageTimestamp)