Meshtastic-Apple/Meshtastic/Views/Settings/Config/Module/RangeTestConfig.swift

144 lines
3.5 KiB
Swift
Raw Normal View History

2022-06-14 16:45:43 -07:00
//
// TelemetryConfig.swift
// Meshtastic Apple
//
// Copyright (c) Garth Vander Houwen 6/13/22.
//
import SwiftUI
struct RangeTestConfig: View {
@Environment(\.managedObjectContext) var context
@EnvironmentObject var bleManager: BLEManager
2022-06-28 06:56:50 -07:00
var node: NodeInfoEntity
@State private var isPresentingSaveConfirm: Bool = false
@State var initialLoad: Bool = true
@State var hasChanges = false
2022-06-14 16:45:43 -07:00
@State var enabled = false
@State var sender = false
@State var save = false
var body: some View {
VStack {
Form {
Section(header: Text("Options")) {
Toggle(isOn: $enabled) {
Label("Enabled", systemImage: "figure.walk")
2022-06-14 16:45:43 -07:00
}
.toggleStyle(SwitchToggleStyle(tint: .accentColor))
2022-06-14 16:45:43 -07:00
Toggle(isOn: $sender) {
Label("Sender", systemImage: "paperplane")
}
.toggleStyle(SwitchToggleStyle(tint: .accentColor))
2022-06-14 16:45:43 -07:00
Text("This device will send out range test messages.")
.font(.caption)
Toggle(isOn: $save) {
Label("Save", systemImage: "square.and.arrow.down.fill")
}
.toggleStyle(SwitchToggleStyle(tint: .accentColor))
2022-06-14 16:45:43 -07:00
Text("Saves a CSV with the range test message details, only available on ESP32 devices with a web server.")
.font(.caption)
}
2022-06-28 06:56:50 -07:00
2022-06-14 16:45:43 -07:00
}
2022-06-28 06:56:50 -07:00
Button {
isPresentingSaveConfirm = true
} label: {
Label("Save", systemImage: "square.and.arrow.down")
}
.disabled(bleManager.connectedPeripheral == nil || !hasChanges)
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
.confirmationDialog(
"Are you sure?",
isPresented: $isPresentingSaveConfirm
) {
Button("Save Range Test Module Config to \(bleManager.connectedPeripheral != nil ? bleManager.connectedPeripheral.longName : "Unknown")?") {
var rtc = ModuleConfig.RangeTestConfig()
rtc.enabled = enabled
rtc.save = save
rtc.sender = sender ? 1 : 0
if bleManager.saveRangeTestModuleConfig(config: rtc, destNum: bleManager.connectedPeripheral.num, wantResponse: false) {
// Should show a saved successfully alert once I know that to be true
// for now just disable the button after a successful save
hasChanges = false
} else {
}
}
}
2022-06-14 16:45:43 -07:00
.navigationTitle("Range Test Config")
.navigationBarItems(trailing:
ZStack {
ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.shortName : "?????")
2022-06-14 16:45:43 -07:00
})
.onAppear {
2022-06-28 06:56:50 -07:00
if self.initialLoad{
self.bleManager.context = context
2022-06-28 20:20:02 -07:00
// self.enabled = node.rangeTestConfig?.enabled ?? false
// self.save = node.rangeTestConfig?.save ?? false
//
// if node.rangeTestConfig?.sender != nil {
//
// self.sender = node.rangeTestConfig!.sender == 1 ? true : false
//
// } else {
// self.sender = false
// }
// self.sender = node.rangeTestConfig?.sender != nil
2022-06-28 06:56:50 -07:00
self.hasChanges = false
self.initialLoad = false
}
}
.onChange(of: enabled) { newEnabled in
2022-06-28 20:20:02 -07:00
//if newEnabled != node.rangeTestConfig!.enabled {
2022-06-28 06:56:50 -07:00
hasChanges = true
2022-06-28 20:20:02 -07:00
//}
2022-06-28 06:56:50 -07:00
}
.onChange(of: save) { newSave in
2022-06-28 20:20:02 -07:00
//if newSave != node.rangeTestConfig!.save {
2022-06-28 06:56:50 -07:00
hasChanges = true
2022-06-28 20:20:02 -07:00
//}
2022-06-28 06:56:50 -07:00
}
.onChange(of: sender) { newSender in
hasChanges = true
2022-06-14 16:45:43 -07:00
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
}