Updates to settings views

This commit is contained in:
Garth Vander Houwen 2023-01-24 20:33:48 -08:00
parent 3d21d714d9
commit 6b4240d7fb
5 changed files with 73 additions and 22 deletions

View file

@ -779,9 +779,10 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
var success = false
let fromNodeNum = connectedPeripheral.num
if fromNodeNum <= 0 || (LocationHelper.currentLocation.latitude == LocationHelper.DefaultLocation.latitude && LocationHelper.currentLocation.longitude == LocationHelper.DefaultLocation.longitude) {
if fromNodeNum <= 0 || LocationHelper.currentLocation.distance(from: LocationHelper.DefaultLocation) == 0.0 {
return false
}
var positionPacket = Position()
positionPacket.latitudeI = Int32(LocationHelper.currentLocation.latitude * 1e7)
positionPacket.longitudeI = Int32(LocationHelper.currentLocation.longitude * 1e7)
@ -826,7 +827,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
if userSettings!.provideLocation {
let success = sendPosition(destNum: connectedPeripheral.num, wantResponse: false)
if !success {
print("Failed to send positon to device")
print("Failed to send position to device")
}
}
}
@ -1247,7 +1248,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
return 0
}
public func saveWiFiConfig(config: Config.NetworkConfig, fromUser: UserEntity, toUser: UserEntity) -> Int64 {
public func saveNetworkConfig(config: Config.NetworkConfig, fromUser: UserEntity, toUser: UserEntity) -> Int64 {
var adminPacket = AdminMessage()
adminPacket.setConfig.network = config

View file

@ -38,7 +38,7 @@ func generateMessageMarkdown (message: String) -> String {
func localConfig (config: Config, context:NSManagedObjectContext, nodeNum: Int64, nodeLongName: String) {
// We don't care about any of the Power settings, config is available for everyting else
// We don't care about any of the Power settings, config is available for everything else
if config.payloadVariant == Config.OneOf_PayloadVariant.bluetooth(config.bluetooth) {
upsertBluetoothConfigPacket(config: config, nodeNum: nodeNum, context: context)
} else if config.payloadVariant == Config.OneOf_PayloadVariant.device(config.device) {
@ -519,7 +519,7 @@ func deviceMetadataPacket (metadata: DeviceMetadata, fromNum: Int64, context: NS
do {
let fetchedNode = try context.fetch(fetchedNodeRequest) as! [NodeInfoEntity]
if fetchedNode.count == 1 {
if fetchedNode.count > 0 {
let newMetadata = DeviceMetadataEntity(context: context)
newMetadata.firmwareVersion = metadata.firmwareVersion
newMetadata.deviceStateVersion = Int32(metadata.deviceStateVersion)
@ -529,7 +529,6 @@ func deviceMetadataPacket (metadata: DeviceMetadata, fromNum: Int64, context: NS
newMetadata.hasEthernet = metadata.hasEthernet_p
newMetadata.role = Int32(metadata.role.rawValue)
newMetadata.positionFlags = Int32(metadata.positionFlags)
fetchedNode[0].metadata = newMetadata
do {
@ -806,6 +805,12 @@ func adminAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
} else if config.payloadVariant == Config.OneOf_PayloadVariant.lora(config.lora) {
upsertLoRaConfigPacket(config: config, nodeNum: Int64(packet.from), context: context)
} else if config.payloadVariant == Config.OneOf_PayloadVariant.network(config.network) {
upsertNetworkConfigPacket(config: config, nodeNum: Int64(packet.from), context: context)
} else if config.payloadVariant == Config.OneOf_PayloadVariant.position(config.position) {
upsertPositionConfigPacket(config: config, nodeNum: Int64(packet.from), context: context)
}
}
} else {

View file

@ -120,7 +120,6 @@ struct LoRaConfig: View {
print("empty lora config")
let adminMessageId = bleManager.requestLoRaConfig(fromUser: connectedNode!.user!, toUser: node!.user!, adminIndex: connectedNode?.myInfo?.adminIndex ?? 0)
}
print(node?.loRaConfig?.regionCode)
}
.onChange(of: region) { newRegion in
if node != nil && node!.loRaConfig != nil {

View file

@ -118,7 +118,7 @@ struct NetworkConfig: View {
network.ethEnabled = self.ethEnabled
//network.addressMode = Config.NetworkConfig.AddressMode.dhcp
let adminMessageId = bleManager.saveWiFiConfig(config: network, fromUser: node!.user!, toUser: node!.user!)
let adminMessageId = bleManager.saveNetworkConfig(config: network, fromUser: node!.user!, toUser: node!.user!)
if adminMessageId > 0 {
// Should show a saved successfully alert once I know that to be true
// for now just disable the button after a successful save

View file

@ -18,6 +18,30 @@ struct Settings: View {
@State private var connectedNodeNum: Int = 0
@State private var initialLoad: Bool = true
@State private var selection: SettingsSidebar = .about
enum SettingsSidebar {
case appSettings
case shareChannels
case userConfig
case loraConfig
case channelConfig
case bluetoothConfig
case deviceConfig
case displayConfig
case networkConfig
case positionConfig
case cannedMessagesConfig
case externalNotificationConfig
case mqttConfig
case rangeTestConfig
case serialConfig
case telemetryConfig
case meshLog
case adminMessageLog
case about
}
var body: some View {
NavigationSplitView {
List {
@ -28,6 +52,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("app.settings")
}
.tag(SettingsSidebar.appSettings)
let node = nodes.first(where: { $0.num == connectedNodeNum })
if node?.myInfo?.adminIndex ?? 0 > 0 {
Section("Configure") {
@ -51,19 +76,19 @@ struct Settings: View {
.pickerStyle(.menu)
.labelsHidden()
.onChange(of: selectedNode) { newValue in
if selectedNode > 0 {
let node = nodes.first(where: { $0.num == newValue })
let connectedNode = nodes.first(where: { $0.num == connectedNodeNum })
connectedNodeNum = Int(bleManager.connectedPeripheral != nil ? bleManager.connectedPeripheral.num : 0)
if node?.metadata == nil && node!.num != connectedNodeNum {
let adminMessageId = bleManager.requestDeviceMetadata(fromUser: connectedNode!.user!, toUser: node!.user!, adminIndex: connectedNode!.myInfo!.adminIndex, context: context)
if adminMessageId > 0 {
print("Saved node metadata")
}
}
}
// if selectedNode > 0 {
// let node = nodes.first(where: { $0.num == newValue })
// let connectedNode = nodes.first(where: { $0.num == connectedNodeNum })
// connectedNodeNum = Int(bleManager.connectedPeripheral != nil ? bleManager.connectedPeripheral.num : 0)
//
// if node?.metadata == nil && node!.num != connectedNodeNum {
// let adminMessageId = bleManager.requestDeviceMetadata(fromUser: connectedNode!.user!, toUser: node!.user!, adminIndex: connectedNode!.myInfo!.adminIndex, context: context)
//
// if adminMessageId > 0 {
// print("Saved node metadata")
// }
// }
// }
}
}
}
@ -77,7 +102,9 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("share.channels")
}
.tag(SettingsSidebar.shareChannels)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
UserConfig(node: nodes.first(where: { $0.num == selectedNode }), connectedNode: nodes.first(where: { $0.num == connectedNodeNum }))
} label: {
@ -86,6 +113,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("user")
}
.tag(SettingsSidebar.userConfig)
.disabled(selectedNode == 0)
NavigationLink() {
@ -95,7 +123,9 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("lora")
}
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
.tag(SettingsSidebar.loraConfig)
.disabled(selectedNode == 0)
//.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink() {
Channels(node: nodes.first(where: { $0.num == connectedNodeNum }))
@ -104,6 +134,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("channels")
}
.tag(SettingsSidebar.channelConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink() {
@ -113,6 +144,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("bluetooth")
}
.tag(SettingsSidebar.bluetoothConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
@ -122,6 +154,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("device")
}
.tag(SettingsSidebar.deviceConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
@ -131,6 +164,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("display")
}
.tag(SettingsSidebar.displayConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
@ -141,6 +175,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("network")
}
.tag(SettingsSidebar.networkConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
@ -151,6 +186,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("position")
}
.tag(SettingsSidebar.positionConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
}
@ -165,6 +201,7 @@ struct Settings: View {
Text("canned.messages")
}
.tag(SettingsSidebar.cannedMessagesConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
@ -174,6 +211,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("external.notification")
}
.tag(SettingsSidebar.externalNotificationConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
@ -183,6 +221,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("mqtt")
}
.tag(SettingsSidebar.mqttConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
@ -192,6 +231,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("range.test")
}
.tag(SettingsSidebar.rangeTestConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
@ -201,6 +241,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("serial")
}
.tag(SettingsSidebar.serialConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
NavigationLink {
@ -210,6 +251,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("telemetry")
}
.tag(SettingsSidebar.telemetryConfig)
.disabled(selectedNode > 0 && selectedNode != connectedNodeNum)
}
Section(header: Text("logging")) {
@ -220,6 +262,8 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("mesh.log")
}
.tag(SettingsSidebar.meshLog)
NavigationLink {
let connectedNode = nodes.first(where: { $0.num == connectedNodeNum })
AdminMessageList(user: connectedNode?.user)
@ -228,6 +272,7 @@ struct Settings: View {
.symbolRenderingMode(.hierarchical)
Text("admin.log")
}
.tag(SettingsSidebar.adminMessageLog)
}
Section(header: Text("about")) {
NavigationLink {
@ -238,6 +283,7 @@ struct Settings: View {
Text("about.meshtastic")
}
.tag(SettingsSidebar.about)
}
}
.onAppear {