From cde0266469f1ec4d5338b9e1731cbe2ed502736f Mon Sep 17 00:00:00 2001 From: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Date: Sun, 23 Jun 2024 14:31:53 -1000 Subject: [PATCH 1/2] Does not show Duty Cycle warning when in licensed mode --- Meshtastic/Views/Settings/Settings.swift | 34 +++++++++++++----------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/Meshtastic/Views/Settings/Settings.swift b/Meshtastic/Views/Settings/Settings.swift index 394bc9416..4752bae61 100644 --- a/Meshtastic/Views/Settings/Settings.swift +++ b/Meshtastic/Views/Settings/Settings.swift @@ -52,6 +52,8 @@ struct Settings: View { case appData } var body: some View { + let node = nodes.first(where: { $0.num == preferredNodeNum }) + NavigationSplitView { List { NavigationLink { @@ -98,7 +100,6 @@ struct Settings: View { .tag(SettingsSidebar.routeRecorder) } - let node = nodes.first(where: { $0.num == preferredNodeNum }) let hasAdmin = node?.myInfo?.adminIndex ?? 0 > 0 ? true : false if !(node?.deviceConfig?.isManaged ?? false) { @@ -163,21 +164,24 @@ struct Settings: View { Section("radio.configuration") { if node != nil && node?.loRaConfig != nil { let rc = RegionCodes(rawValue: Int(node?.loRaConfig?.regionCode ?? 0)) - if rc?.dutyCycle ?? 0 > 0 && rc?.dutyCycle ?? 0 < 100 { - - Label { - Text("Hourly Duty Cycle") - } icon: { - Image(systemName: "clock.arrow.circlepath") - .symbolRenderingMode(.hierarchical) - .foregroundColor(.red) + + if (node?.user?.isLicensed == false) { + if rc?.dutyCycle ?? 0 > 0 && rc?.dutyCycle ?? 0 < 100 { + + Label { + Text("Hourly Duty Cycle") + } icon: { + Image(systemName: "clock.arrow.circlepath") + .symbolRenderingMode(.hierarchical) + .foregroundColor(.red) + } + Text("Your region has a \(rc?.dutyCycle ?? 0)% hourly duty cycle, your radio will stop sending packets when it reaches the hourly limit.") + .foregroundColor(.orange) + .font(.caption) + Text("Limit all periodic broadcast intervals especially telemetry and position. If you need to increase hops, do it on nodes at the edges, not the ones in the middle. MQTT is not advised when you are duty cycle restricted because the gateway node is then doing all the work.") + .font(.caption2) + .foregroundColor(.gray) } - Text("Your region has a \(rc?.dutyCycle ?? 0)% hourly duty cycle, your radio will stop sending packets when it reaches the hourly limit.") - .foregroundColor(.orange) - .font(.caption) - Text("Limit all periodic broadcast intervals especially telemetry and position. If you need to increase hops, do it on nodes at the edges, not the ones in the middle. MQTT is not advised when you are duty cycle restricted because the gateway node is then doing all the work.") - .font(.caption2) - .foregroundColor(.gray) } } NavigationLink { From ebd3d680bb76f02e7adfb30a5dcc3ad81f065f2c Mon Sep 17 00:00:00 2001 From: Blake McAnally Date: Fri, 28 Jun 2024 16:54:27 -0500 Subject: [PATCH 2/2] extract section to computed property and tweak the if statements --- Meshtastic/Views/Settings/Settings.swift | 125 ++++++++++++----------- 1 file changed, 66 insertions(+), 59 deletions(-) diff --git a/Meshtastic/Views/Settings/Settings.swift b/Meshtastic/Views/Settings/Settings.swift index 4752bae61..487a35850 100644 --- a/Meshtastic/Views/Settings/Settings.swift +++ b/Meshtastic/Views/Settings/Settings.swift @@ -20,6 +20,7 @@ struct Settings: View { @State private var selectedNode: Int = 0 @State private var preferredNodeNum: Int = 0 @State private var selection: SettingsSidebar = .about + enum SettingsSidebar { case appSettings case routes @@ -51,10 +52,72 @@ struct Settings: View { case appLog case appData } - var body: some View { - let node = nodes.first(where: { $0.num == preferredNodeNum }) + var radioConfigurationSection: some View { + Section("radio.configuration") { + let node = nodes.first(where: { $0.num == preferredNodeNum }) + if let node, + let loRaConfig = node.loRaConfig, + let rc = RegionCodes(rawValue: Int(loRaConfig.regionCode)), + let user = node.user, + !user.isLicensed, + rc.dutyCycle > 0 && rc.dutyCycle < 100 { + Label { + Text("Hourly Duty Cycle") + } icon: { + Image(systemName: "clock.arrow.circlepath") + .symbolRenderingMode(.hierarchical) + .foregroundColor(.red) + } + Text("Your region has a \(rc.dutyCycle)% hourly duty cycle, your radio will stop sending packets when it reaches the hourly limit.") + .foregroundColor(.orange) + .font(.caption) + Text("Limit all periodic broadcast intervals especially telemetry and position. If you need to increase hops, do it on nodes at the edges, not the ones in the middle. MQTT is not advised when you are duty cycle restricted because the gateway node is then doing all the work.") + .font(.caption2) + .foregroundColor(.gray) + } + + NavigationLink { + LoRaConfig(node: nodes.first(where: { $0.num == selectedNode })) + } label: { + Label { + Text("lora") + } icon: { + Image(systemName: "dot.radiowaves.left.and.right") + .rotationEffect(.degrees(-90)) + } + } + .tag(SettingsSidebar.loraConfig) + + NavigationLink { + Channels(node: node) + } label: { + Label { + Text("channels") + } icon: { + Image(systemName: "fibrechannel") + } + } + .tag(SettingsSidebar.channelConfig) + .disabled(selectedNode > 0 && selectedNode != preferredNodeNum) + + NavigationLink { + ShareChannels(node: node) + } label: { + Label { + Text("share.channels") + } icon: { + Image(systemName: "qrcode") + } + } + .tag(SettingsSidebar.shareChannels) + .disabled(selectedNode > 0 && selectedNode != preferredNodeNum) + } + } + + var body: some View { NavigationSplitView { + let node = nodes.first(where: { $0.num == preferredNodeNum }) List { NavigationLink { AboutMeshtastic() @@ -161,63 +224,7 @@ struct Settings: View { } } } - Section("radio.configuration") { - if node != nil && node?.loRaConfig != nil { - let rc = RegionCodes(rawValue: Int(node?.loRaConfig?.regionCode ?? 0)) - - if (node?.user?.isLicensed == false) { - if rc?.dutyCycle ?? 0 > 0 && rc?.dutyCycle ?? 0 < 100 { - - Label { - Text("Hourly Duty Cycle") - } icon: { - Image(systemName: "clock.arrow.circlepath") - .symbolRenderingMode(.hierarchical) - .foregroundColor(.red) - } - Text("Your region has a \(rc?.dutyCycle ?? 0)% hourly duty cycle, your radio will stop sending packets when it reaches the hourly limit.") - .foregroundColor(.orange) - .font(.caption) - Text("Limit all periodic broadcast intervals especially telemetry and position. If you need to increase hops, do it on nodes at the edges, not the ones in the middle. MQTT is not advised when you are duty cycle restricted because the gateway node is then doing all the work.") - .font(.caption2) - .foregroundColor(.gray) - } - } - } - NavigationLink { - LoRaConfig(node: nodes.first(where: { $0.num == selectedNode })) - } label: { - Label { - Text("lora") - } icon: { - Image(systemName: "dot.radiowaves.left.and.right") - .rotationEffect(.degrees(-90)) - } - } - .tag(SettingsSidebar.loraConfig) - NavigationLink { - Channels(node: nodes.first(where: { $0.num == preferredNodeNum })) - } label: { - Label { - Text("channels") - } icon: { - Image(systemName: "fibrechannel") - } - } - .tag(SettingsSidebar.channelConfig) - .disabled(selectedNode > 0 && selectedNode != preferredNodeNum) - NavigationLink { - ShareChannels(node: nodes.first(where: { $0.num == preferredNodeNum })) - } label: { - Label { - Text("share.channels") - } icon: { - Image(systemName: "qrcode") - } - } - .tag(SettingsSidebar.shareChannels) - .disabled(selectedNode > 0 && selectedNode != preferredNodeNum) - } + radioConfigurationSection Section("device.configuration") { NavigationLink { UserConfig(node: nodes.first(where: { $0.num == selectedNode }))