diff --git a/MeshtasticClient/Helpers/BLEManager.swift b/MeshtasticClient/Helpers/BLEManager.swift index a71975d1..03d6edc9 100644 --- a/MeshtasticClient/Helpers/BLEManager.swift +++ b/MeshtasticClient/Helpers/BLEManager.swift @@ -98,7 +98,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph self.centralManager.stopScan() self.isScanning = self.centralManager.isScanning - + peripherals.removeAll(where: { $0.peripheral.state == CBPeripheralState.disconnected }) print("🛑 Stopped Scanning") } } @@ -177,7 +177,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph peripheralName = name } - let newPeripheral = Peripheral(id: peripheral.identifier.uuidString, num: 0, name: peripheralName, shortName: String(peripheralName.suffix(3)), longName: peripheralName, firmwareVersion: "Unknown", rssi: RSSI.intValue, channelUtilization: nil, airTime: nil, subscribed: false, peripheral: peripheral) + let newPeripheral = Peripheral(id: peripheral.identifier.uuidString, num: 0, name: peripheralName, shortName: String(peripheralName.suffix(3)), longName: peripheralName, firmwareVersion: "Unknown", rssi: RSSI.intValue, channelUtilization: nil, airTime: nil, lastUpdate: Date(), subscribed: false, peripheral: peripheral) let peripheralIndex = peripherals.firstIndex(where: { $0.id == newPeripheral.id }) if peripheralIndex != nil && newPeripheral.peripheral.state != CBPeripheralState.connected { @@ -187,13 +187,17 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph peripherals.append(newPeripheral) } else { - + if newPeripheral.peripheral.state != CBPeripheralState.connected { peripherals.append(newPeripheral) print("â„šī¸ Adding peripheral: \(peripheralName)") } } + + let today = Date() + let fiveMinutesAgo = Calendar.current.date(byAdding: .minute, value: -5, to: today)! + peripherals.removeAll(where: { $0.lastUpdate <= fiveMinutesAgo}) } // Called when a peripheral is connected diff --git a/MeshtasticClient/Model/PeripheralModel.swift b/MeshtasticClient/Model/PeripheralModel.swift index ea6a7c7a..1b921104 100644 --- a/MeshtasticClient/Model/PeripheralModel.swift +++ b/MeshtasticClient/Model/PeripheralModel.swift @@ -11,10 +11,11 @@ struct Peripheral: Identifiable { var rssi: Int var channelUtilization: Float? var airTime: Float? + var lastUpdate: Date var subscribed: Bool var peripheral: CBPeripheral - init(id: String, num: Int64, name: String, shortName: String, longName: String, firmwareVersion: String, rssi: Int, channelUtilization: Float?, airTime: Float?, subscribed: Bool, peripheral: CBPeripheral) { + init(id: String, num: Int64, name: String, shortName: String, longName: String, firmwareVersion: String, rssi: Int, channelUtilization: Float?, airTime: Float?, lastUpdate: Date, subscribed: Bool, peripheral: CBPeripheral) { self.id = id self.num = num self.name = name @@ -24,6 +25,7 @@ struct Peripheral: Identifiable { self.rssi = rssi self.channelUtilization = channelUtilization self.airTime = airTime + self.lastUpdate = lastUpdate self.subscribed = subscribed self.peripheral = peripheral }