Clear Log Buttons for position and metrics

This commit is contained in:
Garth Vander Houwen 2022-10-03 20:13:33 -07:00
parent 18d208a616
commit 6134a6196a
5 changed files with 134 additions and 42 deletions

View file

@ -269,12 +269,12 @@
DD47E3CA26F0E50300029299 /* Nodes */ = {
isa = PBXGroup;
children = (
DD769E0228D18BF0001A3F05 /* DeviceMetricsLog.swift */,
DD4F23CC28779A3C001D37CB /* EnvironmentMetricsLog.swift */,
DD2E65252767A01F00E45FC5 /* NodeDetail.swift */,
DD47E3CD26F103C600029299 /* NodeList.swift */,
DD90860D26F69BAE00DC5189 /* NodeMap.swift */,
DD2E65252767A01F00E45FC5 /* NodeDetail.swift */,
DD73FD1028750779000852D6 /* PositionLog.swift */,
DD4F23CC28779A3C001D37CB /* EnvironmentMetricsLog.swift */,
DD769E0228D18BF0001A3F05 /* DeviceMetricsLog.swift */,
);
path = Nodes;
sourceTree = "<group>";

View file

@ -3,10 +3,10 @@
// Meshtastic
//
// Copyright(c) Garth Vander Houwen 10/3/22.
import CoreData
public func clearPositions(destNum: Int64, context: NSManagedObjectContext) -> Bool {
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(destNum))
@ -26,12 +26,36 @@ public func clearPositions(destNum: Int64, context: NSManagedObjectContext) -> B
context.rollback()
return false
}
} catch {
print("💥 Fetch NodeInfoEntity Error")
return false
}
}
public func clearTelemetry(destNum: Int64, metricsType: Int32, context: NSManagedObjectContext) -> Bool {
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(destNum))
do {
let fetchedNode = try context.fetch(fetchNodeInfoRequest) as! [NodeInfoEntity]
let emptyTelemetry = [TelemetryEntity]()
fetchedNode[0].telemetries? = NSOrderedSet(array: emptyTelemetry)
do {
try context.save()
return true
} catch {
context.rollback()
return false
}
} catch {
print("💥 Fetch NodeInfoEntity Error")
return false
}
}

View file

@ -12,6 +12,8 @@ struct DeviceMetricsLog: View {
@Environment(\.managedObjectContext) var context
@EnvironmentObject var bleManager: BLEManager
@State private var isPresentingClearLogConfirm: Bool = false
@State var isExporting = false
@State var exportString = ""
@ -105,19 +107,53 @@ struct DeviceMetricsLog: View {
.padding(.trailing, 5)
}
}
Button {
HStack {
Button(role: .destructive) {
isPresentingClearLogConfirm = true
} label: {
Label("Clear Log", systemImage: "trash.fill")
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
.confirmationDialog(
"Are you sure?",
isPresented: $isPresentingClearLogConfirm,
titleVisibility: .visible
) {
Button("Delete all device metrics?", role: .destructive) {
if clearTelemetry(destNum: node.num, metricsType: 0, context: context) {
exportString = TelemetryToCsvFile(telemetry: node.telemetries!.array as! [TelemetryEntity], metricsType: 0)
isExporting = true
print("Clear Device Metrics Log Failed")
} else {
}
}
}
} label: {
Label("Save", systemImage: "square.and.arrow.down")
Button {
exportString = TelemetryToCsvFile(telemetry: node.telemetries!.array as! [TelemetryEntity], metricsType: 0)
isExporting = true
} label: {
Label("Save", systemImage: "square.and.arrow.down")
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
.navigationTitle("Device Metrics Log")
.navigationBarTitleDisplayMode(.inline)
.navigationBarItems(trailing:

View file

@ -11,6 +11,8 @@ struct EnvironmentMetricsLog: View {
@Environment(\.managedObjectContext) var context
@EnvironmentObject var bleManager: BLEManager
@State private var isPresentingClearLogConfirm: Bool = false
@State var isExporting = false
@State var exportString = ""
@ -79,19 +81,50 @@ struct EnvironmentMetricsLog: View {
.padding(.trailing, 5)
}
}
Button {
HStack {
Button(role: .destructive) {
isPresentingClearLogConfirm = true
} label: {
Label("Clear Log", systemImage: "trash.fill")
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
.confirmationDialog(
"Are you sure?",
isPresented: $isPresentingClearLogConfirm,
titleVisibility: .visible
) {
Button("Delete all environment metrics?", role: .destructive) {
if clearTelemetry(destNum: node.num, metricsType: 1, context: context) {
exportString = TelemetryToCsvFile(telemetry: node.telemetries!.array as! [TelemetryEntity], metricsType: 1)
isExporting = true
print("Clear Environment Metrics Log Failed")
}
}
}
} label: {
Label("Save", systemImage: "square.and.arrow.down")
Button {
exportString = TelemetryToCsvFile(telemetry: node.telemetries!.array as! [TelemetryEntity], metricsType: 1)
isExporting = true
} label: {
Label("Save", systemImage: "square.and.arrow.down")
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
.navigationTitle("Environment Metrics Log")
.navigationBarTitleDisplayMode(.inline)
.navigationBarItems(trailing:

View file

@ -73,7 +73,6 @@ struct PositionLog: View {
.padding(.trailing, 5)
}
HStack {
Button(role: .destructive) {
@ -83,7 +82,6 @@ struct PositionLog: View {
Label("Clear Log", systemImage: "trash.fill")
}
.disabled(bleManager.connectedPeripheral == nil)
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
@ -95,7 +93,7 @@ struct PositionLog: View {
) {
Button("Delete all positions?", role: .destructive) {
if clearPositions(destNum: bleManager.connectedPeripheral.num, context: context) {
if clearPositions(destNum: node.num, context: context) {
print("Clear Position Log Failed")
@ -105,21 +103,22 @@ struct PositionLog: View {
}
}
}
Button {
exportString = PositionToCsvFile(positions: node.positions!.array as! [PositionEntity])
isExporting = true
} label: {
Button {
exportString = PositionToCsvFile(positions: node.positions!.array as! [PositionEntity])
isExporting = true
Label("Save", systemImage: "square.and.arrow.down")
} label: {
Label("Save", systemImage: "square.and.arrow.down")
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
}
.fileExporter(
.fileExporter(
isPresented: $isExporting,
document: CsvDocument(emptyCsv: exportString),
contentType: .commaSeparatedText,