From 7ea68d8e228bfc9488968eb2eaf4f420e87b4387 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Fri, 2 Aug 2024 12:32:22 -0700 Subject: [PATCH] Add actions logic to node details --- .../Actions/ExchangePositionsButton.swift | 25 ++++++++++++++-- .../Views/Nodes/Helpers/NodeDetail.swift | 29 ++++++++----------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/Meshtastic/Views/Nodes/Helpers/Actions/ExchangePositionsButton.swift b/Meshtastic/Views/Nodes/Helpers/Actions/ExchangePositionsButton.swift index ed5fce47..eccb6b97 100644 --- a/Meshtastic/Views/Nodes/Helpers/Actions/ExchangePositionsButton.swift +++ b/Meshtastic/Views/Nodes/Helpers/Actions/ExchangePositionsButton.swift @@ -6,16 +6,28 @@ struct ExchangePositionsButton: View { var node: NodeInfoEntity - @State - private var isPresentingPositionSentAlert: Bool = false + @State private var isPresentingPositionSentAlert: Bool = false + @State private var isPresentingPositionFailedAlert: Bool = false var body: some View { Button { - isPresentingPositionSentAlert = bleManager.sendPosition( + let positionSent = bleManager.sendPosition( channel: node.channel, destNum: node.num, wantResponse: true ) + if positionSent { + isPresentingPositionSentAlert = true + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { + isPresentingPositionSentAlert = false + } + } else { + isPresentingPositionFailedAlert = true + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { + isPresentingPositionFailedAlert = false + } + } + } label: { Label { Text("Exchange Positions") @@ -30,6 +42,13 @@ struct ExchangePositionsButton: View { Button("OK") { }.keyboardShortcut(.defaultAction) } message: { Text("Your position has been sent with a request for a response with their position.") + }.alert( + "Position Exchange Failed", + isPresented: $isPresentingPositionFailedAlert + ) { + Button("OK") { }.keyboardShortcut(.defaultAction) + } message: { + Text("Failed to get a valid position to exchange.") } } } diff --git a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift index fc9b44c1..9bc5781a 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift @@ -281,12 +281,6 @@ struct NodeDetail: View { } Section("Actions") { - FavoriteNodeButton( - bleManager: bleManager, - context: context, - node: node - ) - if let user = node.user { NodeAlertsButton( context: context, @@ -295,19 +289,21 @@ struct NodeDetail: View { ) } - if let connectedPeripheral = bleManager.connectedPeripheral, - node.num != connectedPeripheral.num { - ExchangePositionsButton( + if let connectedNode { + FavoriteNodeButton( bleManager: bleManager, + context: context, node: node ) - - TraceRouteButton( - bleManager: bleManager, - node: node - ) - - if let connectedNode { + if connectedNode.num != node.num { + ExchangePositionsButton( + bleManager: bleManager, + node: node + ) + TraceRouteButton( + bleManager: bleManager, + node: node + ) if node.isStoreForwardRouter { ClientHistoryButton( bleManager: bleManager, @@ -315,7 +311,6 @@ struct NodeDetail: View { node: node ) } - DeleteNodeButton( bleManager: bleManager, context: context,