From 0891a37a56fd6de7cca3d905d5d4510c6a974562 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Thu, 12 Dec 2024 16:06:48 -0800 Subject: [PATCH] Backer device images --- .../LILYGOTBEAMS3CORE.imageset/Contents.json | 12 ++ .../tbeam-s3-core.svg | 1 + .../TECHO.imageset/Contents.json | 12 ++ .../Assets.xcassets/TECHO.imageset/t-echo.svg | 1 + .../TWATCHS3.imageset/Contents.json | 12 ++ .../TWATCHS3.imageset/t-watch-s3.svg | 1 + .../UNSET.imageset/unknown.svg | 190 +----------------- .../CoreData/UserEntityExtension.swift | 41 ++-- Meshtastic/Resources/DeviceHardware.json | 2 +- .../Views/Nodes/Helpers/NodeDetail.swift | 14 +- .../Views/Nodes/Helpers/NodeInfoItem.swift | 37 +++- 11 files changed, 94 insertions(+), 229 deletions(-) create mode 100644 Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/Contents.json create mode 100644 Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/tbeam-s3-core.svg create mode 100644 Meshtastic/Assets.xcassets/TECHO.imageset/Contents.json create mode 100644 Meshtastic/Assets.xcassets/TECHO.imageset/t-echo.svg create mode 100644 Meshtastic/Assets.xcassets/TWATCHS3.imageset/Contents.json create mode 100644 Meshtastic/Assets.xcassets/TWATCHS3.imageset/t-watch-s3.svg diff --git a/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/Contents.json b/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/Contents.json new file mode 100644 index 00000000..1febc627 --- /dev/null +++ b/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "tbeam-s3-core.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/tbeam-s3-core.svg b/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/tbeam-s3-core.svg new file mode 100644 index 00000000..f42e6d2c --- /dev/null +++ b/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/tbeam-s3-core.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Meshtastic/Assets.xcassets/TECHO.imageset/Contents.json b/Meshtastic/Assets.xcassets/TECHO.imageset/Contents.json new file mode 100644 index 00000000..e1adcf61 --- /dev/null +++ b/Meshtastic/Assets.xcassets/TECHO.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "t-echo.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic/Assets.xcassets/TECHO.imageset/t-echo.svg b/Meshtastic/Assets.xcassets/TECHO.imageset/t-echo.svg new file mode 100644 index 00000000..e178a50f --- /dev/null +++ b/Meshtastic/Assets.xcassets/TECHO.imageset/t-echo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Meshtastic/Assets.xcassets/TWATCHS3.imageset/Contents.json b/Meshtastic/Assets.xcassets/TWATCHS3.imageset/Contents.json new file mode 100644 index 00000000..baffc648 --- /dev/null +++ b/Meshtastic/Assets.xcassets/TWATCHS3.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "t-watch-s3.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic/Assets.xcassets/TWATCHS3.imageset/t-watch-s3.svg b/Meshtastic/Assets.xcassets/TWATCHS3.imageset/t-watch-s3.svg new file mode 100644 index 00000000..19084c19 --- /dev/null +++ b/Meshtastic/Assets.xcassets/TWATCHS3.imageset/t-watch-s3.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Meshtastic/Assets.xcassets/UNSET.imageset/unknown.svg b/Meshtastic/Assets.xcassets/UNSET.imageset/unknown.svg index 8e74fbc5..2bac636a 100644 --- a/Meshtastic/Assets.xcassets/UNSET.imageset/unknown.svg +++ b/Meshtastic/Assets.xcassets/UNSET.imageset/unknown.svg @@ -1,189 +1 @@ - - + \ No newline at end of file diff --git a/Meshtastic/Extensions/CoreData/UserEntityExtension.swift b/Meshtastic/Extensions/CoreData/UserEntityExtension.swift index 662ca5b0..d07d40de 100644 --- a/Meshtastic/Extensions/CoreData/UserEntityExtension.swift +++ b/Meshtastic/Extensions/CoreData/UserEntityExtension.swift @@ -37,24 +37,38 @@ extension UserEntity { var hardwareImage: String? { guard let hwModel else { return nil } switch hwModel { - /// SVG Images for Vendors who are project backers + /// SVG Images for Vendors who are signed project backers /// Heltec - case "HELTECV3": - return "HELTECV3" - case "HELTECWIRELESSPAPER", "HELTECWIRELESSPAPERV10": - return "HELTECWIRELESSPAPER" - case "HELTECWIRELESSTRACKER", "HELTECWIRELESSTRACKERV10": - return "HELTECWIRELESSTRACKER" - case "HELTECWSLV3": - return "HELTECWSLV3" +// case "HELTECV3": +// return "HELTECV3" +// case "HELTECWIRELESSPAPER", "HELTECWIRELESSPAPERV10": +// return "HELTECWIRELESSPAPER" +// case "HELTECWIRELESSTRACKER", "HELTECWIRELESSTRACKERV10": +// return "HELTECWIRELESSTRACKER" +// case "HELTECWSLV3": +// return "HELTECWSLV3" /// LilyGO + case "TDECK": + return "TDECK" + case "TECHO": + return "TECHO" + case "TWATCHS3": + return "TWATCHS3" + case "LILYGOTBEAMS3CORE": + return "LILYGOTBEAMS3CORE" case "TBEAM", "TBEAM_V0P7": return "TBEAM" - case "TLORAT3S3V1": - return "TLORAT3S3V1" case "TLORAC6": return "TLORAC6" - /// B&O Consulting + case "TLORAT3S3EPAPER": + return "TLORAT3S3EPAPER" + case "TLORAT3S3V1": + return "TLORAT3S3V1" + case "TLORAV2116": + return "TLORAV2116" + case "TLORAV2118": + return "TLORAV2118" + /// B&Q Consulting case "NANOG1", "NANOG1EXPLORER": return "NANOG1" case "NANOG2ULTRA": @@ -63,9 +77,6 @@ extension UserEntity { return "STATIONG2" case "SOLAR_NODE": return "SOLAR_NODE" - - case "UNPHONE": - return "UNPHONE" default: return "UNSET" } diff --git a/Meshtastic/Resources/DeviceHardware.json b/Meshtastic/Resources/DeviceHardware.json index fd874357..a4a6949c 100644 --- a/Meshtastic/Resources/DeviceHardware.json +++ b/Meshtastic/Resources/DeviceHardware.json @@ -141,7 +141,7 @@ }, { "hwModel": 12, - "hwModelSlug": "TBEAM_S3_CORE", + "hwModelSlug": "LILYGO_TBEAM_S3_CORE", "platformioTarget": "tbeam-s3-core", "architecture": "esp32-s3", "activelySupported": true, diff --git a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift index 0a648571..d9fc50a4 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift @@ -25,7 +25,6 @@ struct NodeDetail: View { @State private var showingShutdownConfirm: Bool = false @State private var showingRebootConfirm: Bool = false @State private var dateFormatRelative: Bool = true - @State private var currentDevice: DeviceHardware? // The node the device is currently connected to var connectedNode: NodeInfoEntity? @@ -45,7 +44,7 @@ struct NodeDetail: View { ) Section("Hardware") { - NodeInfoItem(node: node, supported: currentDevice?.activelySupported ?? false) + NodeInfoItem(node: node) } Section("Node") { HStack(alignment: .center) { @@ -438,17 +437,6 @@ struct NodeDetail: View { } } .listStyle(.insetGrouped) - .onFirstAppear { - Api().loadDeviceHardwareData { (hw) in - for device in hw { - let currentHardware = node.user?.hwModel ?? "UNSET" - let deviceString = device.hwModelSlug.replacingOccurrences(of: "_", with: "") - if deviceString == currentHardware { - currentDevice = device - } - } - } - } } } } diff --git a/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift b/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift index 649fe6d1..cb411709 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift @@ -12,28 +12,31 @@ import MapKit struct NodeInfoItem: View { @ObservedObject var node: NodeInfoEntity - var supported: Bool + @State private var currentDevice: DeviceHardware? var body: some View { if let user = node.user { ViewThatFits(in: .horizontal) { HStack { Spacer() - VStack(alignment: .center) { - Spacer() - Image(systemName: supported ? "checkmark.seal.fill" : "x.circle") - .resizable() - .aspectRatio(contentMode: .fill) // << here !! - .frame(width: 75, height: 75) - .foregroundStyle(supported ? .green : .red) - Text( supported ? "Supported" : "Unsupported") + if user.hwModel != "UNSET" { + VStack(alignment: .center) { + Spacer() + Image(systemName: currentDevice?.activelySupported ?? false ? "checkmark.seal.fill" : "x.circle") + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 75, height: 75) + .foregroundStyle(currentDevice?.activelySupported ?? false ? .green : .red) + Text( currentDevice?.activelySupported ?? false ? "Supported" : "Unsupported") .foregroundStyle(.gray) .font(.callout) + } + Spacer() } - Spacer() VStack(alignment: .center) { HStack { - if user.hwModel != "UNSET" { + if user.hardwareImage != "UNSET" { + Spacer() Image(user.hardwareImage ?? "UNSET") .resizable() .aspectRatio(contentMode: .fit) @@ -50,6 +53,18 @@ struct NodeInfoItem: View { } Spacer() } + .onAppear { + Api().loadDeviceHardwareData { (hw) in + for device in hw { + let currentHardware = node.user?.hwModel ?? "UNSET" + let deviceString = device.hwModelSlug.replacingOccurrences(of: "_", with: "") + print(deviceString + " == " + currentHardware) + if deviceString == currentHardware { + currentDevice = device + } + } + } + } } .listRowSeparator(.hidden) HStack {