Refactor globals
This commit is contained in:
@@ -3,15 +3,18 @@ import SwiftUI
|
||||
|
||||
final class BluetoothClient: ObservableObject {
|
||||
|
||||
weak var delegate: TemperatureDataTransferDelegate?
|
||||
|
||||
private let updateInterval = 3.0
|
||||
|
||||
private let minimumOffsetToUpdateDeviceClock = 5.0
|
||||
|
||||
private let connection = DeviceManager()
|
||||
|
||||
private let storage: TemperatureStorage
|
||||
|
||||
init(deviceInfo: DeviceInfo? = nil) {
|
||||
connection.delegate = self
|
||||
init(storage: TemperatureStorage, deviceInfo: DeviceInfo? = nil) {
|
||||
self.storage = storage
|
||||
self.deviceInfo = deviceInfo
|
||||
connection.delegate = self
|
||||
}
|
||||
|
||||
func connect() -> Bool {
|
||||
@@ -111,16 +114,17 @@ final class BluetoothClient: ObservableObject {
|
||||
// MARK: Device time
|
||||
|
||||
private func updateDeviceTimeIfNeeded() {
|
||||
guard let info = deviceInfo else {
|
||||
guard let deviceInfo else {
|
||||
return
|
||||
}
|
||||
guard !info.hasDeviceStartTimeSet else {
|
||||
guard !deviceInfo.hasDeviceStartTimeSet || deviceInfo.clockOffset > minimumOffsetToUpdateDeviceClock else {
|
||||
return
|
||||
}
|
||||
|
||||
guard !openRequests.contains(where: { if case .setDeviceStartTime = $0 { return true }; return false }) else {
|
||||
return
|
||||
}
|
||||
let time = info.deviceStartTime.seconds
|
||||
let time = deviceInfo.deviceStartTime.seconds
|
||||
addRequest(.setDeviceStartTime(deviceStartTimeSeconds: time))
|
||||
print("Setting device start time to \(time) s (\(Date().seconds) current)")
|
||||
}
|
||||
@@ -144,7 +148,6 @@ final class BluetoothClient: ObservableObject {
|
||||
|
||||
let transfer = TemperatureDataTransfer(info: info)
|
||||
runningTransfer = transfer
|
||||
runningTransfer?.delegate = delegate
|
||||
let next = transfer.nextRequest()
|
||||
addRequest(next)
|
||||
return true
|
||||
@@ -171,12 +174,13 @@ final class BluetoothClient: ObservableObject {
|
||||
return
|
||||
}
|
||||
self.deviceInfo = newInfo
|
||||
guard let runningTransfer else {
|
||||
return
|
||||
if let runningTransfer {
|
||||
runningTransfer.update(info: newInfo)
|
||||
let next = runningTransfer.nextRequest()
|
||||
addRequest(next)
|
||||
} else if newInfo.numberOfStoredMeasurements > 0 {
|
||||
collectRecordedData()
|
||||
}
|
||||
runningTransfer.update(info: newInfo)
|
||||
let next = runningTransfer.nextRequest()
|
||||
addRequest(next)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,13 +230,24 @@ extension BluetoothClient: DeviceManagerDelegate {
|
||||
case .getRecordingData(let offset, let count):
|
||||
didReceive(data: payload, offset: offset, count: count)
|
||||
case .clearRecordingBuffer:
|
||||
runningTransfer?.completeTransfer()
|
||||
runningTransfer = nil
|
||||
didClearDeviceStorage()
|
||||
|
||||
case .setDeviceStartTime:
|
||||
print("Device time set")
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
private func didClearDeviceStorage() {
|
||||
guard let runningTransfer else {
|
||||
return
|
||||
}
|
||||
runningTransfer.completeTransfer()
|
||||
storage.add(runningTransfer.measurements)
|
||||
self.runningTransfer = nil
|
||||
|
||||
updateDeviceTimeIfNeeded()
|
||||
}
|
||||
|
||||
func deviceManager(didChangeState state: DeviceState) {
|
||||
DispatchQueue.main.async {
|
||||
|
Reference in New Issue
Block a user