Use iPhone 24 hour setting for date formatting

Clean up several inconsistent admin message methods
This commit is contained in:
Garth Vander Houwen 2022-12-30 22:30:15 -08:00
parent ae2f860c21
commit 82d7f55552
11 changed files with 66 additions and 127 deletions

View file

@ -23,7 +23,7 @@ func TelemetryToCsvFile(telemetry: [TelemetryEntity], metricsType: Int) -> Strin
csvString += ", "
csvString += String(dm.airUtilTx)
csvString += ", "
csvString += dm.time?.formattedDate(format: "yyyy-MM-dd HH:mm:ss") ?? NSLocalizedString("unknown.age", comment: "")
csvString += dm.time?.formattedDate(format: "yyyy-MM-dd j:mm:ss") ?? NSLocalizedString("unknown.age", comment: "")
}
}
} else if metricsType == 1 {
@ -44,7 +44,7 @@ func TelemetryToCsvFile(telemetry: [TelemetryEntity], metricsType: Int) -> Strin
csvString += ", "
csvString += String(dm.current)
csvString += ", "
csvString += dm.time?.formattedDate(format: "yyyy-MM-dd HH:mm:ss") ?? NSLocalizedString("unknown.age", comment: "")
csvString += dm.time?.formattedDate(format: "yyyy-MM-dd j:mm:ss") ?? NSLocalizedString("unknown.age", comment: "")
}
}
}
@ -73,7 +73,7 @@ func PositionToCsvFile(positions: [PositionEntity]) -> String {
csvString += ", "
csvString += String(pos.snr)
csvString += ", "
csvString += pos.time?.formattedDate(format: "yyyy-MM-dd HH:mm:ss") ?? NSLocalizedString("unknown.age", comment: "")
csvString += pos.time?.formattedDate(format: "yyyy-MM-dd j:mm:ss") ?? NSLocalizedString("unknown.age", comment: "")
}
return csvString
}

View file

@ -831,14 +831,14 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
return false
}
public func sendReboot(destNum: Int64) -> Bool {
public func sendReboot(fromUser: UserEntity, toUser: UserEntity) -> Bool {
var adminPacket = AdminMessage()
adminPacket.rebootSeconds = 10
var meshPacket: MeshPacket = MeshPacket()
meshPacket.to = UInt32(connectedPeripheral.num)
meshPacket.from = 0 //UInt32(connectedPeripheral.num)
meshPacket.from = UInt32(fromUser.num)
meshPacket.id = UInt32.random(in: UInt32(UInt8.max)..<UInt32.max)
meshPacket.priority = MeshPacket.Priority.reliable
meshPacket.wantAck = true
@ -848,69 +848,46 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
dataMessage.payload = try! adminPacket.serializedData()
dataMessage.portnum = PortNum.adminApp
meshPacket.decoded = dataMessage
var toRadio: ToRadio!
toRadio = ToRadio()
toRadio.packet = meshPacket
let binaryData: Data = try! toRadio.serializedData()
if connectedPeripheral!.peripheral.state == CBPeripheralState.connected {
do {
try context!.save()
connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse)
MeshLogger.log("💾 Saved a Reboot Admin Message for node: \(String(destNum))")
return true
} catch {
context!.rollback()
let nsError = error as NSError
print("💥 Error Inserting New Core Data MessageEntity: \(nsError)")
}
}
return false
}
public func sendFactoryReset(destNum: Int64) -> Bool {
var adminPacket = AdminMessage()
adminPacket.factoryReset = 1
var meshPacket: MeshPacket = MeshPacket()
meshPacket.to = UInt32(destNum)
meshPacket.from = 0 //UInt32(connectedPeripheral.num)
meshPacket.id = UInt32.random(in: UInt32(UInt8.max)..<UInt32.max)
meshPacket.priority = MeshPacket.Priority.reliable
meshPacket.wantAck = true
var dataMessage = DataMessage()
dataMessage.payload = try! adminPacket.serializedData()
dataMessage.portnum = PortNum.adminApp
meshPacket.decoded = dataMessage
var toRadio: ToRadio!
toRadio = ToRadio()
toRadio.packet = meshPacket
let binaryData: Data = try! toRadio.serializedData()
if connectedPeripheral!.peripheral.state == CBPeripheralState.connected {
connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse)
MeshLogger.log("💾 Sent a Factory Reset for node: \(String(destNum))")
let messageDescription = "Sent Reboot Admin Message to: \(toUser.longName ?? NSLocalizedString("unknown", comment: ""))"
if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) {
return true
}
return false
}
public func sendNodeDBReset(destNum: Int64) -> Bool {
public func sendFactoryReset(fromUser: UserEntity, toUser: UserEntity) -> Bool {
var adminPacket = AdminMessage()
adminPacket.factoryReset = 1
var meshPacket: MeshPacket = MeshPacket()
meshPacket.to = UInt32(toUser.num)
meshPacket.from = UInt32(fromUser.num)
meshPacket.id = UInt32.random(in: UInt32(UInt8.max)..<UInt32.max)
meshPacket.priority = MeshPacket.Priority.reliable
meshPacket.wantAck = true
var dataMessage = DataMessage()
dataMessage.payload = try! adminPacket.serializedData()
dataMessage.portnum = PortNum.adminApp
meshPacket.decoded = dataMessage
let messageDescription = "Sent Factory Reset Admin Message to: \(toUser.longName ?? NSLocalizedString("unknown", comment: ""))"
if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) {
return true
}
return false
}
public func sendNodeDBReset(fromUser: UserEntity, toUser: UserEntity) -> Bool {
var adminPacket = AdminMessage()
adminPacket.nodedbReset = 1
var meshPacket: MeshPacket = MeshPacket()
meshPacket.to = UInt32(destNum)
meshPacket.from = 0 //UInt32(connectedPeripheral.num)
meshPacket.to = UInt32(toUser.num)
meshPacket.from = UInt32(fromUser.num)
meshPacket.id = UInt32.random(in: UInt32(UInt8.max)..<UInt32.max)
meshPacket.priority = MeshPacket.Priority.reliable
meshPacket.wantAck = true
@ -920,16 +897,8 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
dataMessage.portnum = PortNum.adminApp
meshPacket.decoded = dataMessage
var toRadio: ToRadio!
toRadio = ToRadio()
toRadio.packet = meshPacket
let binaryData: Data = try! toRadio.serializedData()
if connectedPeripheral!.peripheral.state == CBPeripheralState.connected {
connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse)
MeshLogger.log("💾 Sent a NodeDB Reset for node: \(String(destNum))")
let messageDescription = "Sent NodeDB Reset Admin Message to: \(toUser.longName ?? NSLocalizedString("unknown", comment: ""))"
if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) {
return true
}
return false

View file

@ -764,11 +764,7 @@ func channelPacket (channel: Channel, fromNum: Int64, context: NSManagedObjectCo
func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObjectContext) -> NodeInfoEntity? {
if nodeInfo.hasUser {
MeshLogger.log("📟 Node info received for: \(nodeInfo.user.longName)")
} else {
MeshLogger.log("📟 Node info received for: \(nodeInfo.num)")
}
MeshLogger.log("📟 Node info received for: \(nodeInfo.num)")
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeInfo.num))
@ -897,12 +893,8 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
}
do {
try context.save()
if nodeInfo.hasUser {
MeshLogger.log("📟 Node info received for: \(nodeInfo.user.longName)")
} else {
MeshLogger.log("📟 Node info received for: \(nodeInfo.num)")
}
print("💾 NodeInfo saved for \(nodeInfo.num)")
return fetchedNode[0]
} catch {
context.rollback()

View file

@ -68,7 +68,7 @@ struct DeviceMetricsLog: View {
}
TableColumn("Time Stamp") { dm in
if dm.metricsType == 0 {
Text(dm.time?.formattedDate(format: "MM/dd/yy hh:mm") ?? "Unknown time")
Text(dm.time?.formattedDate(format: "MM/dd/yy j:mm") ?? "Unknown time")
}
}
}
@ -117,7 +117,7 @@ struct DeviceMetricsLog: View {
.font(.caption)
Text("\(String(format: "%.2f", dm.airUtilTx))%")
.font(.caption)
Text(dm.time?.formattedDate(format: "MM/dd/yy hh:mm") ?? "Unknown time")
Text(dm.time?.formattedDate(format: "MM/dd/yy j:mm") ?? "Unknown time")
.font(.caption)
}
}

View file

@ -57,7 +57,7 @@ struct EnvironmentMetricsLog: View {
}
TableColumn("Time Stamp") { em in
if em.metricsType == 1 {
Text(em.time?.formattedDate(format: "MM/dd/yy hh:mm") ?? "Unknown time")
Text(em.time?.formattedDate(format: "MM/dd/yy j:mm") ?? "Unknown time")
}
}
}
@ -104,7 +104,7 @@ struct EnvironmentMetricsLog: View {
.font(.caption)
Text("\(String(format: "%.2f", em.gasResistance))")
.font(.caption)
Text(em.time?.formattedDate(format: "MM/dd/yy hh:mm") ?? "Unknown time")
Text(em.time?.formattedDate(format: "MM/dd/yy j:mm") ?? "Unknown time")
.font(.caption)
}
}

View file

@ -192,28 +192,21 @@ struct NodeDetail: View {
HStack {
VStack(alignment: .center) {
CircleText(text: node.user?.shortName ?? "???", color: .accentColor)
}
Divider()
VStack {
if node.user != nil {
Image(node.user!.hwModel ?? "UNSET")
.resizable()
.frame(width: 75, height: 75)
.cornerRadius(5)
Text(String(node.user!.hwModel ?? "UNSET"))
.font(.callout).fixedSize()
}
}
.padding(5)
if node.snr > 0 {
Divider()
VStack(alignment: .center) {
@ -375,26 +368,23 @@ struct NodeDetail: View {
}) {
Label("Reboot", systemImage: "arrow.triangle.2.circlepath")
Label("reboot", systemImage: "arrow.triangle.2.circlepath")
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
.confirmationDialog(
"are.you.sure",
isPresented: $showingRebootConfirm
) {
Button("Reboot Node?", role: .destructive) {
if !bleManager.sendReboot(destNum: node.num) {
print("Reboot Failed")
.confirmationDialog("are.you.sure",
isPresented: $showingRebootConfirm
) {
Button("reboot.node", role: .destructive) {
if !bleManager.sendReboot(fromUser: node.user!, toUser: node.user!) {
print("Reboot Failed")
}
}
}
}
}
}
.padding(5)
}
@ -402,12 +392,10 @@ struct NodeDetail: View {
.offset( y:-40)
}
.edgesIgnoringSafeArea([.leading, .trailing])
.navigationBarTitle(String(node.user?.longName ?? NSLocalizedString("unknown", comment: "Unknown")), displayMode: .inline)
.navigationBarTitle(String(node.user?.longName ?? NSLocalizedString("unknown", comment: "")), displayMode: .inline)
.padding(.bottom, 10)
.navigationBarItems(trailing:
ZStack {
ConnectedDevice(
bluetoothOn: bleManager.isSwitchedOn,
deviceConnected: bleManager.connectedPeripheral != nil,
@ -421,15 +409,3 @@ struct NodeDetail: View {
}
}
}
struct NodeInfoEntityDetail_Previews: PreviewProvider {
static let bleManager = BLEManager()
static var previews: some View {
Group {
// NodeDetail(node: node)
}
}
}

View file

@ -50,7 +50,7 @@ struct PositionLog: View {
Text("\(String(format: "%.2f", position.snr)) dB")
}
TableColumn("Time Stamp") { position in
Text(position.time?.formattedDate(format: "MM/dd/yy hh:mm") ?? "Unknown time")
Text(position.time?.formattedDate(format: "MM/dd/yy j:mm") ?? "Unknown time")
}
}
@ -95,7 +95,7 @@ struct PositionLog: View {
.font(.caption2)
Text(String(mappin.altitude))
.font(.caption2)
Text(mappin.time?.formattedDate(format: "MM/dd/yy hh:mm") ?? "Unknown time")
Text(mappin.time?.formattedDate(format: "MM/dd/yy j:mm") ?? "Unknown time")
.font(.caption2)
}
}
@ -125,9 +125,7 @@ struct PositionLog: View {
titleVisibility: .visible
) {
Button("Delete all positions?", role: .destructive) {
if clearPositions(destNum: node.num, context: context) {
print("Successfully Cleared Position Log")
} else {

View file

@ -90,7 +90,7 @@ struct DeviceConfig: View {
Button("Reset NodeDB", role: .destructive) {
isPresentingNodeDBResetConfirm = true
}
.disabled(bleManager.connectedPeripheral == nil)
.disabled(node?.user == nil)
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
@ -101,7 +101,7 @@ struct DeviceConfig: View {
titleVisibility: .visible
) {
Button("Erase all device and app data?", role: .destructive) {
if bleManager.sendNodeDBReset(destNum: bleManager.connectedPeripheral.num) {
if bleManager.sendNodeDBReset(fromUser: node!.user!, toUser: node!.user!) {
bleManager.disconnectPeripheral()
clearCoreDataDatabase(context: context)
} else {
@ -112,7 +112,7 @@ struct DeviceConfig: View {
Button("Factory Reset", role: .destructive) {
isPresentingFactoryResetConfirm = true
}
.disabled(bleManager.connectedPeripheral == nil)
.disabled(node?.user == nil)
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
@ -124,7 +124,7 @@ struct DeviceConfig: View {
) {
Button("Factory reset your device and app? ", role: .destructive) {
if bleManager.sendFactoryReset(destNum: bleManager.connectedPeripheral.num) {
if bleManager.sendFactoryReset(fromUser: node!.user!, toUser: node!.user!) {
bleManager.disconnectPeripheral()
clearCoreDataDatabase(context: context)
} else {

View file

@ -256,7 +256,7 @@ struct CannedMessagesConfig: View {
// for now just disable the button after a successful save
hasMessagesChanges = false
if !hasChanges {
bleManager.sendReboot(destNum: node!.num)
bleManager.sendReboot(fromUser: node!.user!, toUser: node!.user!)
goBack()
}
}

View file

@ -150,6 +150,8 @@
"radio.configuration"="Geräteeinstellungen";
"range.test"="Entfernungstest";
"range.test.config"="Entfernungstest Konfiguration";
"reboot"="Reboot";
"reboot.node"="Reboot node?";
"reply"="Antworten";
"received.ack"="Empfangsbestätigung";
"received.ack.real"="Recipient Ack";

View file

@ -151,6 +151,8 @@
"range.test"="Range Test";
"range.test.config"="Range Test Config";
"reply"="Reply";
"reboot"="Reboot";
"reboot.node"="Reboot node?";
"received.ack"="Received Ack";
"received.ack.real"="Recipient Ack";
"routing.acknowledged"="Acknowledged";