Refactor globals

This commit is contained in:
Christoph Hagen
2023-06-11 21:57:07 +02:00
parent ab64dac7fc
commit f731927dcd
10 changed files with 77 additions and 139 deletions

View File

@@ -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 {