mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Merge branch '2.6.1' into missing-translation-keys
This commit is contained in:
commit
2dd3ec2174
28 changed files with 1069 additions and 1288 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -1785,7 +1785,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.0;
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
|
|
@ -1818,7 +1818,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.0;
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
|
|
@ -1849,7 +1849,7 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.0;
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
|
@ -1881,7 +1881,7 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.6.0;
|
||||
MARKETING_VERSION = 2.6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
|
|
|||
|
|
@ -21,15 +21,15 @@ enum MeshMapTypes: Int, CaseIterable, Identifiable {
|
|||
case .standard:
|
||||
return "Standard".localized
|
||||
case .mutedStandard:
|
||||
return "standard.muted".localized
|
||||
return "Standard Muted".localized
|
||||
case .hybrid:
|
||||
return "hybrid".localized
|
||||
return "Hybrid".localized
|
||||
case .hybridFlyover:
|
||||
return "hybrid.flyover".localized
|
||||
return "Hybrid Flyover".localized
|
||||
case .satellite:
|
||||
return "satellite".localized
|
||||
return "Satellite".localized
|
||||
case .satelliteFlyover:
|
||||
return "satellite.flyover".localized
|
||||
return "Satellite Flyover".localized
|
||||
}
|
||||
}
|
||||
func MKMapTypeValue() -> MKMapType {
|
||||
|
|
|
|||
|
|
@ -32,31 +32,31 @@ enum RoutingError: Int, CaseIterable, Identifiable {
|
|||
switch self {
|
||||
|
||||
case .none:
|
||||
return "routing.acknowledged".localized
|
||||
return "Acknowledged".localized
|
||||
case .noRoute:
|
||||
return "routing.noroute".localized
|
||||
return "No Route".localized
|
||||
case .gotNak:
|
||||
return "routing.gotnak".localized
|
||||
return "Received a negative acknowledgment".localized
|
||||
case .timeout:
|
||||
return "routing.timeout".localized
|
||||
return "Timeout".localized
|
||||
case .noInterface:
|
||||
return "routing.nointerface".localized
|
||||
return "No Interface".localized
|
||||
case .maxRetransmit:
|
||||
return "routing.maxretransmit".localized
|
||||
return "Max Retransmission Reached".localized
|
||||
case .noChannel:
|
||||
return "routing.nochannel".localized
|
||||
return "No Channel".localized
|
||||
case .tooLarge:
|
||||
return "routing.toolarge".localized
|
||||
return "The packet is too large".localized
|
||||
case .noResponse:
|
||||
return "routing.noresponse".localized
|
||||
return "No Response".localized
|
||||
case .dutyCycleLimit:
|
||||
return "routing.dutycyclelimit".localized
|
||||
return "Regional Duty Cycle Limit Reached".localized
|
||||
case .badRequest:
|
||||
return "routing.badRequest".localized
|
||||
return "Bad Request".localized
|
||||
case .notAuthorized:
|
||||
return "routing.notauthorized".localized
|
||||
return "Not Authorized".localized
|
||||
case .pkiFailed:
|
||||
return "routing.pkifailed".localized
|
||||
return "Encrypted Send Failed".localized
|
||||
case .pkiUnknownPubkey:
|
||||
return "Unknown public key".localized
|
||||
case .adminBadSessionKey:
|
||||
|
|
|
|||
|
|
@ -227,6 +227,7 @@ func upsertNodeInfoPacket (packet: MeshPacket, context: NSManagedObjectContext)
|
|||
let myInfoEntity = MyInfoEntity(context: context)
|
||||
myInfoEntity.myNodeNum = Int64(packet.from)
|
||||
myInfoEntity.rebootCount = 0
|
||||
newNode.myInfo = myInfoEntity
|
||||
do {
|
||||
try context.save()
|
||||
Logger.data.info("💾 [NodeInfo] Saved a NodeInfo for node number: \(packet.from.toHex(), privacy: .public)")
|
||||
|
|
@ -236,7 +237,6 @@ func upsertNodeInfoPacket (packet: MeshPacket, context: NSManagedObjectContext)
|
|||
let nsError = error as NSError
|
||||
Logger.data.error("💥 [MyInfoEntity] Error Inserting New Core Data: \(nsError, privacy: .public)")
|
||||
}
|
||||
newNode.myInfo = myInfoEntity
|
||||
|
||||
} else {
|
||||
// Update an existing node
|
||||
|
|
@ -1101,7 +1101,7 @@ func upsertExternalNotificationModuleConfigPacket(config: ModuleConfig.ExternalN
|
|||
|
||||
func upsertPaxCounterModuleConfigPacket(config: ModuleConfig.PaxcounterConfig, nodeNum: Int64, sessionPasskey: Data? = Data(), context: NSManagedObjectContext) {
|
||||
|
||||
let logString = String.localizedStringWithFormat("mesh.log.paxcounter.config %@".localized, String(nodeNum))
|
||||
let logString = String.localizedStringWithFormat("PAX Counter config received: %@".localized, String(nodeNum))
|
||||
Logger.data.info("🧑🤝🧑 \(logString, privacy: .public)")
|
||||
|
||||
let fetchNodeInfoRequest = NodeInfoEntity.fetchRequest()
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ struct ChannelList: View {
|
|||
context.refresh(myInfo, mergeChanges: true)
|
||||
channelSelection = nil
|
||||
} label: {
|
||||
Text("delete")
|
||||
Text("Delete")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ struct MessageContextMenuItems: View {
|
|||
Button(role: .destructive) {
|
||||
isShowingDeleteConfirmation = true
|
||||
} label: {
|
||||
Text("delete")
|
||||
Text("Delete")
|
||||
Image(systemName: "trash")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ struct Messages: View {
|
|||
|
||||
TipView(MessagesTip(), arrowEdge: .top)
|
||||
}
|
||||
.navigationTitle("messages")
|
||||
.navigationTitle("Messages")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.navigationBarItems(leading: MeshtasticLogo())
|
||||
} content: {
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ struct UserList: View {
|
|||
deleteUserMessages(user: userSelection!, context: context)
|
||||
context.refresh(node!.user!, mergeChanges: true)
|
||||
} label: {
|
||||
Text("delete")
|
||||
Text("Delete")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ struct DetectionSensorLog: View {
|
|||
exportString = detectionsToCsv(detections: chartData)
|
||||
isExporting = true
|
||||
} label: {
|
||||
Label("save", systemImage: "square.and.arrow.down")
|
||||
Label("Save", systemImage: "square.and.arrow.down")
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
.buttonBorderShape(.capsule)
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ struct DeviceMetricsLog: View {
|
|||
exportString = telemetryToCsvFile(telemetry: deviceMetrics, metricsType: 0)
|
||||
isExporting = true
|
||||
} label: {
|
||||
Label("save", systemImage: "square.and.arrow.down")
|
||||
Label("Save", systemImage: "square.and.arrow.down")
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
.buttonBorderShape(.capsule)
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ struct EnvironmentMetricsLog: View {
|
|||
exportString = telemetryToCsvFile(telemetry: environmentMetrics, metricsType: 1)
|
||||
isExporting = true
|
||||
} label: {
|
||||
Label("save", systemImage: "square.and.arrow.down")
|
||||
Label("Save", systemImage: "square.and.arrow.down")
|
||||
.imageScale(imageScale)
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ struct PositionPopover: View {
|
|||
/// Time
|
||||
Label {
|
||||
if idiom != .phone {
|
||||
Text("heard".localized + ":")
|
||||
Text("Heard".localized + ":")
|
||||
}
|
||||
Text(position.time?.lastHeard ?? "unknown")
|
||||
.foregroundColor(.primary)
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ struct WaypointForm: View {
|
|||
})
|
||||
}
|
||||
label: {
|
||||
Label("delete", systemImage: "trash")
|
||||
Label("Delete", systemImage: "trash")
|
||||
.foregroundColor(.red)
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ struct PaxCounterLog: View {
|
|||
exportString = paxToCsvFile(pax: pax)
|
||||
isExporting = true
|
||||
} label: {
|
||||
Label("save", systemImage: "square.and.arrow.down")
|
||||
Label("Save", systemImage: "square.and.arrow.down")
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
.buttonBorderShape(.capsule)
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ struct TraceRouteLog: View {
|
|||
Logger.data.error("\(error.localizedDescription, privacy: .public)")
|
||||
}
|
||||
} label: {
|
||||
Label("delete", systemImage: "trash")
|
||||
Label("Delete", systemImage: "trash")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ struct AppData: View {
|
|||
Logger.services.error("🗑️ Delete file error: \(error, privacy: .public)")
|
||||
}
|
||||
} label: {
|
||||
Label("delete", systemImage: "trash")
|
||||
Label("Delete", systemImage: "trash")
|
||||
}
|
||||
}
|
||||
} icon: {
|
||||
|
|
@ -61,7 +61,7 @@ struct AppData: View {
|
|||
Logger.services.error("🗑️ Delete file error: \(error, privacy: .public)")
|
||||
}
|
||||
} label: {
|
||||
Label("delete", systemImage: "trash")
|
||||
Label("Delete", systemImage: "trash")
|
||||
}
|
||||
}
|
||||
} icon: {
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ struct AppLog: View {
|
|||
.foregroundStyle(value.level.color)
|
||||
}
|
||||
.width(min: 85, max: 110)
|
||||
TableColumn("log.category", value: \.category)
|
||||
TableColumn("Category", value: \.category)
|
||||
.width(min: 80, max: 130)
|
||||
TableColumn("Message", value: \.composedMessage) { value in
|
||||
Text(value.composedMessage)
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@ struct Channels: View {
|
|||
hasChanges = false
|
||||
}
|
||||
} label: {
|
||||
Label("save", systemImage: "square.and.arrow.down")
|
||||
Label("Save", systemImage: "square.and.arrow.down")
|
||||
}
|
||||
.disabled(bleManager.connectedPeripheral == nil)// || !hasChanges)// !hasValidKey)
|
||||
.buttonStyle(.bordered)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ struct PaxCounterConfig: View {
|
|||
|
||||
var body: some View {
|
||||
Form {
|
||||
ConfigHeader(title: "config.module.paxcounter.title", config: \.powerConfig, node: node, onAppear: setPaxValues)
|
||||
ConfigHeader(title: "PAX Counter Config", config: \.powerConfig, node: node, onAppear: setPaxValues)
|
||||
|
||||
Section {
|
||||
Toggle(isOn: $enabled) {
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ struct RangeTestConfig: View {
|
|||
.font(.callout)
|
||||
|
||||
Toggle(isOn: $save) {
|
||||
Label("save", systemImage: "square.and.arrow.down.fill")
|
||||
Label("Save", systemImage: "square.and.arrow.down.fill")
|
||||
Text("Saves a CSV with the range test message details, currently only available on ESP32 devices with a web server.")
|
||||
}
|
||||
.toggleStyle(SwitchToggleStyle(tint: .accentColor))
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ struct SaveConfigButton: View {
|
|||
Button {
|
||||
isPresentingSaveConfirm = true
|
||||
} label: {
|
||||
Label("save", systemImage: "square.and.arrow.down")
|
||||
Label("Save", systemImage: "square.and.arrow.down")
|
||||
}
|
||||
.disabled(bleManager.connectedPeripheral == nil || !hasChanges)
|
||||
.buttonStyle(.bordered)
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ struct LogDetail: View {
|
|||
/// Category
|
||||
Label {
|
||||
HStack {
|
||||
Text("log.category".localized + ":")
|
||||
Text("Category".localized + ":")
|
||||
.font(idiom == .phone ? .caption : .title)
|
||||
.frame(width: idiom == .phone ? 115 : 190, alignment: .trailing)
|
||||
Text(log.category)
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ struct Routes: View {
|
|||
Logger.data.error("\(error.localizedDescription, privacy: .public)")
|
||||
}
|
||||
} label: {
|
||||
Label("delete", systemImage: "trash")
|
||||
Label("Delete", systemImage: "trash")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -215,7 +215,7 @@ struct Routes: View {
|
|||
.buttonBorderShape(.capsule)
|
||||
.controlSize(.large)
|
||||
|
||||
Button("save") {
|
||||
Button("Save") {
|
||||
selectedRoute?.name = name
|
||||
selectedRoute?.notes = notes
|
||||
selectedRoute?.enabled = enabled
|
||||
|
|
@ -279,7 +279,7 @@ struct Routes: View {
|
|||
exportString = routeToCsvFile(locations: selectedRoute!.locations!.array as? [LocationEntity] ?? [])
|
||||
isExporting = true
|
||||
} label: {
|
||||
Label("export", systemImage: "square.and.arrow.down")
|
||||
Label("Export", systemImage: "square.and.arrow.down")
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
.buttonBorderShape(.capsule)
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ struct SaveChannelQRCode: View {
|
|||
showError = true
|
||||
}
|
||||
} label: {
|
||||
Label("save", systemImage: "square.and.arrow.down")
|
||||
Label("Save", systemImage: "square.and.arrow.down")
|
||||
}
|
||||
.buttonStyle(.bordered)
|
||||
.buttonBorderShape(.capsule)
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ struct Settings: View {
|
|||
}
|
||||
|
||||
var deviceConfigurationSection: some View {
|
||||
Section("device.configuration") {
|
||||
Section("Device Configuration") {
|
||||
NavigationLink(value: SettingsNavigationState.user) {
|
||||
Label {
|
||||
Text("User")
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ struct UserConfig: View {
|
|||
Button {
|
||||
isPresentingSaveConfirm = true
|
||||
} label: {
|
||||
Label("save", systemImage: "square.and.arrow.down")
|
||||
Label("Save", systemImage: "square.and.arrow.down")
|
||||
}
|
||||
.disabled(bleManager.connectedPeripheral == nil || !hasChanges)
|
||||
.buttonStyle(.bordered)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 27fac39141d99fe727a0a1824c5397409b1aea75
|
||||
Subproject commit 068646653e8375fc145988026ad242a3cf70f7ab
|
||||
Loading…
Add table
Add a link
Reference in a new issue