From f21a85d8e1bf51a4fe9c2086e57aa113cbe1e972 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Mon, 11 Jul 2022 16:18:16 -0700 Subject: [PATCH] Check for nil nodes and config --- .../Views/Settings/Config/DeviceConfig.swift | 14 ++++-- .../Views/Settings/Config/DisplayConfig.swift | 14 +++--- .../Views/Settings/Config/LoRaConfig.swift | 9 ++-- .../Config/Module/CannedMessagesConfig.swift | 49 ++++++++++++++----- .../Module/ExternalNotificationConfig.swift | 30 +++++++++--- .../Config/Module/RangeTestConfig.swift | 15 ++++-- .../Settings/Config/Module/SerialConfig.swift | 35 ++++++++++--- .../Config/Module/TelemetryConfig.swift | 14 +++--- .../Settings/Config/PositionConfig.swift | 15 ++++-- 9 files changed, 145 insertions(+), 50 deletions(-) diff --git a/Meshtastic/Views/Settings/Config/DeviceConfig.swift b/Meshtastic/Views/Settings/Config/DeviceConfig.swift index 24a71383..08f7c457 100644 --- a/Meshtastic/Views/Settings/Config/DeviceConfig.swift +++ b/Meshtastic/Views/Settings/Config/DeviceConfig.swift @@ -185,15 +185,23 @@ struct DeviceConfig: View { } .onChange(of: deviceRole) { newRole in - if newRole != node!.deviceConfig!.role { hasChanges = true } + if node != nil && node!.deviceConfig != nil { + + if newRole != node!.deviceConfig!.role { hasChanges = true } + } } .onChange(of: serialEnabled) { newSerial in + if node != nil && node!.deviceConfig != nil { - if newSerial != node!.deviceConfig!.serialEnabled { hasChanges = true } + if newSerial != node!.deviceConfig!.serialEnabled { hasChanges = true } + } } .onChange(of: debugLogEnabled) { newDebugLog in - if newDebugLog != node!.deviceConfig!.debugLogEnabled { hasChanges = true } + if node != nil && node!.deviceConfig != nil { + + if newDebugLog != node!.deviceConfig!.debugLogEnabled { hasChanges = true } + } } .navigationViewStyle(StackNavigationViewStyle()) } diff --git a/Meshtastic/Views/Settings/Config/DisplayConfig.swift b/Meshtastic/Views/Settings/Config/DisplayConfig.swift index e15ebc8a..6d4da661 100644 --- a/Meshtastic/Views/Settings/Config/DisplayConfig.swift +++ b/Meshtastic/Views/Settings/Config/DisplayConfig.swift @@ -240,23 +240,23 @@ struct DisplayConfig: View { } .onChange(of: screenOnSeconds) { newScreenSecs in - if newScreenSecs != node!.displayConfig!.screenOnSeconds { + if node != nil && node!.displayConfig != nil { - hasChanges = true + if newScreenSecs != node!.displayConfig!.screenOnSeconds { hasChanges = true } } } .onChange(of: screenCarouselInterval) { newCarouselSecs in - if newCarouselSecs != node!.displayConfig!.screenCarouselInterval { + if node != nil && node!.displayConfig != nil { - hasChanges = true + if newCarouselSecs != node!.displayConfig!.screenCarouselInterval { hasChanges = true } } } .onChange(of: gpsFormat) { newGpsFormat in - if newGpsFormat != node!.displayConfig!.gpsFormat { - - hasChanges = true + if node != nil && node!.displayConfig != nil { + + if newGpsFormat != node!.displayConfig!.gpsFormat { hasChanges = true } } } .navigationViewStyle(StackNavigationViewStyle()) diff --git a/Meshtastic/Views/Settings/Config/LoRaConfig.swift b/Meshtastic/Views/Settings/Config/LoRaConfig.swift index 58ec7f02..b3d7bb17 100644 --- a/Meshtastic/Views/Settings/Config/LoRaConfig.swift +++ b/Meshtastic/Views/Settings/Config/LoRaConfig.swift @@ -299,19 +299,22 @@ struct LoRaConfig: View { } .onChange(of: region) { newRegion in - if node!.loRaConfig != nil { + if node != nil && node!.loRaConfig != nil { + if newRegion != node!.loRaConfig!.regionCode { hasChanges = true } } } .onChange(of: modemPreset) { newModemPreset in - if node!.loRaConfig != nil { + if node != nil && node!.loRaConfig != nil { + if newModemPreset != node!.loRaConfig!.modemPreset { hasChanges = true } } } .onChange(of: hopLimit) { newHopLimit in - if node!.loRaConfig != nil { + if node != nil && node!.loRaConfig != nil { + if newHopLimit != node!.loRaConfig!.hopLimit { hasChanges = true } } } diff --git a/Meshtastic/Views/Settings/Config/Module/CannedMessagesConfig.swift b/Meshtastic/Views/Settings/Config/Module/CannedMessagesConfig.swift index af0e07b7..2ec4d5d1 100644 --- a/Meshtastic/Views/Settings/Config/Module/CannedMessagesConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/CannedMessagesConfig.swift @@ -390,50 +390,77 @@ struct CannedMessagesConfig: View { } .onChange(of: enabled) { newEnabled in - if node!.cannedMessageConfig != nil { + if node != nil && node!.cannedMessageConfig != nil { if newEnabled != node!.cannedMessageConfig!.enabled { hasChanges = true } } } .onChange(of: sendBell) { newBell in - if newBell != node!.cannedMessageConfig!.sendBell { hasChanges = true } + if node != nil && node!.cannedMessageConfig != nil { + + if newBell != node!.cannedMessageConfig!.sendBell { hasChanges = true } + } } .onChange(of: rotary1Enabled) { newRot1 in - if newRot1 != node!.cannedMessageConfig!.rotary1Enabled { hasChanges = true } + if node != nil && node!.cannedMessageConfig != nil { + + if newRot1 != node!.cannedMessageConfig!.rotary1Enabled { hasChanges = true } + } } .onChange(of: updown1Enabled) { newUpDown in - if newUpDown != node!.cannedMessageConfig!.updown1Enabled { hasChanges = true } + if node != nil && node!.cannedMessageConfig != nil { + + if newUpDown != node!.cannedMessageConfig!.updown1Enabled { hasChanges = true } + } } .onChange(of: inputbrokerPinA) { newPinA in - if newPinA != node!.cannedMessageConfig!.inputbrokerPinA { hasChanges = true } + if node != nil && node!.cannedMessageConfig != nil { + + if newPinA != node!.cannedMessageConfig!.inputbrokerPinA { hasChanges = true } + } } .onChange(of: inputbrokerPinB) { newPinB in + if node != nil && node!.cannedMessageConfig != nil { - if newPinB != node!.cannedMessageConfig!.inputbrokerPinB { hasChanges = true } + if newPinB != node!.cannedMessageConfig!.inputbrokerPinB { hasChanges = true } + } } .onChange(of: inputbrokerPinPress) { newPinPress in + if node != nil && node!.cannedMessageConfig != nil { - if newPinPress != node!.cannedMessageConfig!.inputbrokerPinPress { hasChanges = true } + if newPinPress != node!.cannedMessageConfig!.inputbrokerPinPress { hasChanges = true } + } } .onChange(of: inputbrokerEventCw) { newKeyA in + if node != nil && node!.cannedMessageConfig != nil { - if newKeyA != node!.cannedMessageConfig!.inputbrokerEventCw { hasChanges = true } + if newKeyA != node!.cannedMessageConfig!.inputbrokerEventCw { hasChanges = true } + } } .onChange(of: inputbrokerEventCcw) { newKeyB in - if newKeyB != node!.cannedMessageConfig!.inputbrokerEventCcw { hasChanges = true } + if node != nil && node!.cannedMessageConfig != nil { + + if newKeyB != node!.cannedMessageConfig!.inputbrokerEventCcw { hasChanges = true } + } } .onChange(of: inputbrokerEventPress) { newKeyPress in - if newKeyPress != node!.cannedMessageConfig!.inputbrokerEventPress { hasChanges = true } + if node != nil && node!.cannedMessageConfig != nil { + + if newKeyPress != node!.cannedMessageConfig!.inputbrokerEventPress { hasChanges = true } + } } .onChange(of: messagesPart1) { newMessagesChanges in - hasMessagesChanges = true + if node != nil && node!.cannedMessageConfig != nil { + + hasMessagesChanges = true + } } .navigationViewStyle(StackNavigationViewStyle()) } diff --git a/Meshtastic/Views/Settings/Config/Module/ExternalNotificationConfig.swift b/Meshtastic/Views/Settings/Config/Module/ExternalNotificationConfig.swift index 2c5462f5..503e90cd 100644 --- a/Meshtastic/Views/Settings/Config/Module/ExternalNotificationConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/ExternalNotificationConfig.swift @@ -198,27 +198,45 @@ struct ExternalNotificationConfig: View { } .onChange(of: enabled) { newEnabled in - if newEnabled != node!.externalNotificationConfig!.enabled { hasChanges = true } + if node != nil && node!.externalNotificationConfig != nil { + + if newEnabled != node!.externalNotificationConfig!.enabled { hasChanges = true } + } } .onChange(of: alertBell) { newAlertBell in - if newAlertBell != node!.externalNotificationConfig!.alertBell { hasChanges = true } + if node != nil && node!.externalNotificationConfig != nil { + + if newAlertBell != node!.externalNotificationConfig!.alertBell { hasChanges = true } + } } .onChange(of: alertMessage) { newAlertMessage in - if newAlertMessage != node!.externalNotificationConfig!.alertMessage { hasChanges = true } + if node != nil && node!.externalNotificationConfig != nil { + + if newAlertMessage != node!.externalNotificationConfig!.alertMessage { hasChanges = true } + } } .onChange(of: active) { newActuve in - if newActuve != node!.externalNotificationConfig!.active { hasChanges = true } + if node != nil && node!.externalNotificationConfig != nil { + + if newActuve != node!.externalNotificationConfig!.active { hasChanges = true } + } } .onChange(of: output) { newOutput in - if newOutput != node!.externalNotificationConfig!.output { hasChanges = true } + if node != nil && node!.externalNotificationConfig != nil { + + if newOutput != node!.externalNotificationConfig!.output { hasChanges = true } + } } .onChange(of: outputMilliseconds) { newOutputMs in - if newOutputMs != node!.externalNotificationConfig!.outputMilliseconds { hasChanges = true } + if node != nil && node!.externalNotificationConfig != nil { + + if newOutputMs != node!.externalNotificationConfig!.outputMilliseconds { hasChanges = true } + } } .navigationViewStyle(StackNavigationViewStyle()) } diff --git a/Meshtastic/Views/Settings/Config/Module/RangeTestConfig.swift b/Meshtastic/Views/Settings/Config/Module/RangeTestConfig.swift index ccd29da8..21763cc5 100644 --- a/Meshtastic/Views/Settings/Config/Module/RangeTestConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/RangeTestConfig.swift @@ -148,15 +148,24 @@ struct RangeTestConfig: View { } .onChange(of: enabled) { newEnabled in - if newEnabled != node!.rangeTestConfig!.enabled { hasChanges = true } + if node != nil && node!.rangeTestConfig != nil { + + if newEnabled != node!.rangeTestConfig!.enabled { hasChanges = true } + } } .onChange(of: save) { newSave in - if newSave != node!.rangeTestConfig!.save { hasChanges = true } + if node != nil && node!.rangeTestConfig != nil { + + if newSave != node!.rangeTestConfig!.save { hasChanges = true } + } } .onChange(of: sender) { newSender in - if newSender != node!.rangeTestConfig!.sender { hasChanges = true } + if node != nil && node!.rangeTestConfig != nil { + + if newSender != node!.rangeTestConfig!.sender { hasChanges = true } + } } .navigationViewStyle(StackNavigationViewStyle()) } diff --git a/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift b/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift index 4612a0cd..dad8e7e0 100644 --- a/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift @@ -344,31 +344,52 @@ struct SerialConfig: View { } .onChange(of: enabled) { newEnabled in - if newEnabled != node!.serialConfig!.enabled { hasChanges = true } + if node != nil && node!.serialConfig != nil { + + if newEnabled != node!.serialConfig!.enabled { hasChanges = true } + } } .onChange(of: echo) { newEcho in - if newEcho != node!.serialConfig!.echo { hasChanges = true } + if node != nil && node!.serialConfig != nil { + + if newEcho != node!.serialConfig!.echo { hasChanges = true } + } } .onChange(of: rxd) { newRxd in - if newRxd != node!.serialConfig!.rxd { hasChanges = true } + if node != nil && node!.serialConfig != nil { + + if newRxd != node!.serialConfig!.rxd { hasChanges = true } + } } .onChange(of: txd) { newTxd in - if newTxd != node!.serialConfig!.txd { hasChanges = true } + if node != nil && node!.serialConfig != nil { + + if newTxd != node!.serialConfig!.txd { hasChanges = true } + } } .onChange(of: baudRate) { newBaud in - if newBaud != node!.serialConfig!.baudRate { hasChanges = true } + if node != nil && node!.serialConfig != nil { + + if newBaud != node!.serialConfig!.baudRate { hasChanges = true } + } } .onChange(of: timeout) { newTimeout in - if newTimeout != node!.serialConfig!.timeout { hasChanges = true } + if node != nil && node!.serialConfig != nil { + + if newTimeout != node!.serialConfig!.timeout { hasChanges = true } + } } .onChange(of: mode) { newMode in - if newMode != node!.serialConfig!.mode { hasChanges = true } + if node != nil && node!.serialConfig != nil { + + if newMode != node!.serialConfig!.mode { hasChanges = true } + } } .navigationViewStyle(StackNavigationViewStyle()) } diff --git a/Meshtastic/Views/Settings/Config/Module/TelemetryConfig.swift b/Meshtastic/Views/Settings/Config/Module/TelemetryConfig.swift index 492b433b..94dc8fb5 100644 --- a/Meshtastic/Views/Settings/Config/Module/TelemetryConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/TelemetryConfig.swift @@ -353,28 +353,28 @@ struct TelemetryConfig: View { } .onChange(of: deviceUpdateInterval) { newDeviceInterval in - if node!.telemetryConfig != nil { + if node != nil && node!.telemetryConfig != nil { if newDeviceInterval != node!.telemetryConfig!.deviceUpdateInterval { hasChanges = true } } } .onChange(of: environmentUpdateInterval) { newEnvInterval in - if node!.telemetryConfig != nil { + if node != nil && node!.telemetryConfig != nil { if newEnvInterval != node!.telemetryConfig!.environmentUpdateInterval { hasChanges = true } } } .onChange(of: environmentMeasurementEnabled) { newEnvEnabled in - if node!.telemetryConfig != nil { + if node != nil && node!.telemetryConfig != nil { if newEnvEnabled != node!.telemetryConfig!.environmentMeasurementEnabled { hasChanges = true } } } .onChange(of: environmentSensorType) { newEnvSensorType in - if node!.telemetryConfig != nil { + if node != nil && node!.telemetryConfig != nil { if newEnvSensorType != node!.telemetryConfig!.environmentSensorType { hasChanges = true } } @@ -388,21 +388,21 @@ struct TelemetryConfig: View { } .onChange(of: environmentDisplayFahrenheit) { newEnvDisplayF in - if node!.telemetryConfig != nil { + if node != nil && node!.telemetryConfig != nil { if newEnvDisplayF != node!.telemetryConfig!.environmentDisplayFahrenheit { hasChanges = true } } } .onChange(of: environmentRecoveryInterval) { newEnvRecoveryInterval in - if node!.telemetryConfig != nil { + if node != nil && node!.telemetryConfig != nil { if newEnvRecoveryInterval != node!.telemetryConfig!.environmentRecoveryInterval { hasChanges = true } } } .onChange(of: environmentReadErrorCountThreshold) { newEnvReadErrorCountThreshold in - if node!.telemetryConfig != nil { + if node != nil && node!.telemetryConfig != nil { if newEnvReadErrorCountThreshold != node!.telemetryConfig!.environmentReadErrorCountThreshold { hasChanges = true } } diff --git a/Meshtastic/Views/Settings/Config/PositionConfig.swift b/Meshtastic/Views/Settings/Config/PositionConfig.swift index 3d1b96c7..12a035d3 100644 --- a/Meshtastic/Views/Settings/Config/PositionConfig.swift +++ b/Meshtastic/Views/Settings/Config/PositionConfig.swift @@ -321,15 +321,24 @@ struct PositionConfig: View { } .onChange(of: smartPositionEnabled) { newSmartPosition in - if newSmartPosition != node!.positionConfig!.smartPositionEnabled { hasChanges = true } + if node != nil && node!.positionConfig != nil { + + if newSmartPosition != node!.positionConfig!.smartPositionEnabled { hasChanges = true } + } } .onChange(of: deviceGpsEnabled) { newDeviceGps in - if newDeviceGps != node!.positionConfig!.deviceGpsEnabled { hasChanges = true } + if node != nil && node!.positionConfig != nil { + + if newDeviceGps != node!.positionConfig!.deviceGpsEnabled { hasChanges = true } + } } .onChange(of: fixedPosition) { newFixed in - if newFixed != node!.positionConfig!.fixedPosition { hasChanges = true } + if node != nil && node!.positionConfig != nil { + + if newFixed != node!.positionConfig!.fixedPosition { hasChanges = true } + } } .navigationViewStyle(StackNavigationViewStyle()) }