From 46e86b80b7997911b697346ef59e19838f54e98a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bj=C3=B6rkert?= Date: Sat, 4 Oct 2025 11:31:46 +0200 Subject: [PATCH] BLE: Delay reconnect 2s after disconnect --- .../BackgroundRefresh/BT/BluetoothDevice.swift | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/LoopFollow/BackgroundRefresh/BT/BluetoothDevice.swift b/LoopFollow/BackgroundRefresh/BT/BluetoothDevice.swift index bc8d8406b..f4db899f0 100644 --- a/LoopFollow/BackgroundRefresh/BT/BluetoothDevice.swift +++ b/LoopFollow/BackgroundRefresh/BT/BluetoothDevice.swift @@ -223,11 +223,23 @@ class BluetoothDevice: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate func centralManager(_: CBCentralManager, didDisconnectPeripheral _: CBPeripheral, error _: Error?) { timeStampLastStatusUpdate = Date() - bluetoothDeviceDelegate?.didDisconnectFrom(bluetoothDevice: self) + cancelConnectionTimer() + + guard let ownPeripheral = peripheral else { return } - if let ownPeripheral = peripheral { - centralManager?.connect(ownPeripheral, options: nil) + DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in + guard let self = self, + let manager = self.centralManager, + manager.state == .poweredOn else { return } + + switch ownPeripheral.state { + case .connected, .connecting: + // Already (re)connecting; do nothing + break + default: + manager.connect(ownPeripheral, options: nil) + } } }