V 1.27.1 Clean up log files, turn off user settings username which is causing a crash

This commit is contained in:
Garth Vander Houwen 2021-10-24 01:26:04 -07:00
parent 2ee000f84a
commit 7aa59a192a
9 changed files with 108 additions and 62 deletions

View file

@ -672,7 +672,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.26.10;
MARKETING_VERSION = 1.27.1;
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTS_MACCATALYST = YES;
@ -699,7 +699,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.26.10;
MARKETING_VERSION = 1.27.1;
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTS_MACCATALYST = YES;

View file

@ -2,6 +2,15 @@
"colors" : [
{
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"idiom" : "universal"
}
],
"info" : {

View file

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "1.000",
"green" : "1.000",
"red" : "1.000"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "1.000",
"green" : "1.000",
"red" : "1.000"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -10,17 +10,18 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
private static var documentsFolder: URL {
do {
return try FileManager.default.url(for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true)
return try FileManager.default.url(
for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true)
} catch {
fatalError("Can't find documents directory.")
}
}
@ObservedObject private var meshData : MeshData
@ObservedObject private var messageData : MessageData
@ObservedObject var meshData : MeshData
@ObservedObject var messageData : MessageData
private var centralManager: CBCentralManager!
@ -539,7 +540,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
meshData.nodes.remove(at: nodeIndex!)
meshData.nodes.append(updatedNode!)
meshData.save()
if meshLoggingEnabled { Logger.log("Updated NodeInfo SNR and Time from Node Info App Packet For: \(updatedNode!.user.longName)") }
if meshLoggingEnabled { Logger.log("MESH PACKET Updated NodeInfo SNR and Time from Node Info App Packet For: \(updatedNode!.user.longName)") }
print("Updated NodeInfo SNR and Time from Packet For: \(updatedNode!.user.longName)")
}
}
@ -556,7 +557,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
meshData.nodes.append(updatedNode!)
meshData.save()
if meshLoggingEnabled { Logger.log("Updated NodeInfo SNR and Time from Position App Packet For: \(updatedNode!.user.longName)") }
if meshLoggingEnabled { Logger.log("MESH PACKET Updated NodeInfo SNR and Time from Position App Packet For: \(updatedNode!.user.longName)") }
print("Updated Position SNR and Time from Packet For: \(updatedNode!.user.longName)")
}
print("Postion Payload")
@ -564,19 +565,19 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
}
else if decodedInfo.packet.decoded.portnum == PortNum.adminApp {
if meshLoggingEnabled { Logger.log("BLE FROMRADIO received for Admin App UNHANDLED \(try decodedInfo.packet.jsonString())") }
if meshLoggingEnabled { Logger.log("MESH PACKET received for Admin App UNHANDLED \(try decodedInfo.packet.jsonString())") }
print("Admin App Packet")
print(try decodedInfo.packet.jsonString())
}
else if decodedInfo.packet.decoded.portnum == PortNum.routingApp {
if meshLoggingEnabled { Logger.log("BLE FROMRADIO received for Routing App UNHANDLED \(try decodedInfo.packet.jsonString())") }
if meshLoggingEnabled { Logger.log("MESH PACKET received for Routing App UNHANDLED \(try decodedInfo.packet.jsonString())") }
print("Routing App Packet")
print(try decodedInfo.packet.jsonString())
}
else
{
if meshLoggingEnabled { Logger.log("BLE FROMRADIO received for Other App UNHANDLED \(try decodedInfo.packet.jsonString())") }
if meshLoggingEnabled { Logger.log("MESH PACKET received for Other App UNHANDLED \(try decodedInfo.packet.jsonString())") }
print("Other App Packet")
print(try decodedInfo.packet.jsonString())
}
@ -588,7 +589,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
}
if decodedInfo.configCompleteID != 0 {
if meshLoggingEnabled { Logger.log("Config Complete: \(decodedInfo.configCompleteID)") }
if meshLoggingEnabled { Logger.log("BLE Config Complete Packet Id: \(decodedInfo.configCompleteID)") }
print("BLE Config Complete Packet Id: \(decodedInfo.configCompleteID)")
}

View file

@ -17,16 +17,15 @@ struct MeshtasticClientApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(meshData)
.environmentObject(messageData)
.environmentObject(bleManager)
.environmentObject(userSettings)
.onAppear{
meshData.load()
messageData.load()
}
}
ContentView()
.environmentObject(meshData)
.environmentObject(messageData)
.environmentObject(bleManager)
.environmentObject(userSettings)
.onAppear{
meshData.load()
messageData.load()
}
}
}
}

View file

@ -3,10 +3,11 @@ import Foundation
class MeshData: ObservableObject {
private static var documentsFolder: URL {
do {
return try FileManager.default.url(for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true)
return try FileManager.default.url(
for: .documentDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true)
} catch {
fatalError("Can't find documents directory.")
}

View file

@ -43,8 +43,6 @@ struct Messages: View {
let currentUser: Bool = (bleManager.connectedNode != nil) && ((bleManager.connectedNode.id) == message.fromUserId)
//MessageBubble(contentMessage: message.messagePayload, isCurrentUser: currentUser, time: Int32(message.messageTimestamp), shortName: message.fromUserShortName, id: message.messageId)
HStack (alignment: .top) {
CircleText(text: message.fromUserShortName, color: currentUser ? .accentColor : Color(.darkGray)).padding(.all, 5)
@ -189,7 +187,7 @@ struct Messages: View {
.navigationBarItems(trailing:
ZStack {
ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedNode != nil) ? bleManager.connectedNode.user.shortName : ((bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.name : "Unknown") )
//ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedNode != nil) ? bleManager.connectedNode.user.shortName : ((bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.name : "Unknown") )
})
.onAppear {

View file

@ -31,11 +31,11 @@ enum KeyboardType: Int, CaseIterable, Identifiable {
}
class UserSettings: ObservableObject {
@Published var username: String {
didSet {
UserDefaults.standard.set(username, forKey: "username")
}
}
//@Published var meshtasticUsername: String {
// didSet {
// UserDefaults.standard.set(meshtasticUsername, forKey: "meshtasticusername")
// }
//}
@Published var preferredPeripheralName: String {
didSet {
UserDefaults.standard.set(preferredPeripheralName, forKey: "preferredPeripheralName")
@ -63,7 +63,7 @@ class UserSettings: ObservableObject {
}
init() {
self.username = UserDefaults.standard.object(forKey: "username") as? String ?? ""
//self.meshtasticUsername = UserDefaults.standard.object(forKey: "meshtasticusername") as? String ?? ""
self.preferredPeripheralName = UserDefaults.standard.object(forKey: "preferredPeripheralName") as? String ?? ""
self.preferredPeripheralId = UserDefaults.standard.object(forKey: "preferredPeripheralId") as? String ?? ""
self.provideLocation = UserDefaults.standard.object(forKey: "provideLocation") as? Bool ?? false
@ -75,7 +75,7 @@ class UserSettings: ObservableObject {
struct AppSettings: View {
@EnvironmentObject var bleManager: BLEManager
@EnvironmentObject var userSettings: UserSettings
@ObservedObject var userSettings: UserSettings = UserSettings()
@State private var preferredDeviceConnected = false
@ -92,13 +92,12 @@ struct AppSettings: View {
List {
Section(header: Text("USER DETAILS")) {
HStack {
Label("Name", systemImage: "person.crop.rectangle.fill")
TextField("Username", text: $userSettings.username)
.foregroundColor(.gray)
}
.listRowSeparator(.visible)
//HStack {
//Label("Name", systemImage: "person.crop.rectangle.fill")
//TextField("Username", text: $userSettings.meshtasticUsername)
//.foregroundColor(.gray)
//}
//.listRowSeparator(.visible)
Toggle(isOn: $userSettings.provideLocation) {
Label("Provide location to mesh", systemImage: "location.circle.fill")
@ -138,7 +137,6 @@ struct AppSettings: View {
}
.listRowSeparator(.visible)
}
}
}
}

View file

@ -7,7 +7,7 @@ struct MeshLog: View {
var text = ""
@State private var logs = [String]()
@State private var isExporting: Bool = false
@State private var document: LogDocument = LogDocument(logFile: "")
@State private var document: LogDocument = LogDocument(logFile: "MESHTASTIC MESH ACTIVITY LOG\n")
var body: some View {
@ -19,27 +19,29 @@ struct MeshLog: View {
logs.removeAll()
for try await log in url.lines {
logs.append(log)
document.logFile.append(log)
document.logFile.append("\(log) \n")
}
logs.reverse()
} catch {
// Stop adding logs when an error is thrown
}
}
.fileExporter(isPresented: $isExporting,
document: document,
contentType: UTType.plainText,
defaultFilename: "mesh-activity-log"
.fileExporter(
isPresented: $isExporting,
document: document,
contentType: UTType.plainText,
defaultFilename: "mesh-activity-log",
onCompletion: {
result in
if case .success = result {
print("Mesh activity log download: success.")
} else {
print("Mesh activity log download \(result).")
}
}
)
{
result in
if case .success = result {
print("Upload was ok")
}
else{
print("Something went wrong")
}
}
.textSelection(.enabled)