| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // LoopFollow
- // NightscoutSocketDataHandler.swift
- import Foundation
- extension MainViewController {
- func setupNightscoutSocket() {
- NightscoutSocketManager.shared.onDataUpdate = { [weak self] data in
- self?.handleSocketDataUpdate(data)
- }
- NightscoutSocketManager.shared.connectIfNeeded()
- }
- func handleSocketDataUpdate(_ data: [String: Any]) {
- let isDelta = data["delta"] as? Bool ?? false
- if !isDelta {
- // Full data on initial connect — trigger all fetches
- LogManager.shared.log(category: .websocket, message: "Full data received, triggering all fetches")
- TaskScheduler.shared.rescheduleTask(id: .fetchBG, to: Date())
- TaskScheduler.shared.rescheduleTask(id: .deviceStatus, to: Date())
- TaskScheduler.shared.rescheduleTask(id: .treatments, to: Date())
- TaskScheduler.shared.rescheduleTask(id: .profile, to: Date())
- return
- }
- // Selective: only fetch data types present in the delta
- var triggered: [String] = []
- if data["sgvs"] != nil || data["mbgs"] != nil {
- TaskScheduler.shared.rescheduleTask(id: .fetchBG, to: Date())
- triggered.append("BG")
- }
- if data["devicestatus"] != nil {
- TaskScheduler.shared.rescheduleTask(id: .deviceStatus, to: Date())
- triggered.append("DeviceStatus")
- }
- if data["treatments"] != nil {
- TaskScheduler.shared.rescheduleTask(id: .treatments, to: Date())
- triggered.append("Treatments")
- }
- if data["profiles"] != nil {
- TaskScheduler.shared.rescheduleTask(id: .profile, to: Date())
- triggered.append("Profile")
- }
- if !triggered.isEmpty {
- LogManager.shared.log(category: .websocket, message: "Delta triggered: \(triggered.joined(separator: ", "))", isDebug: true)
- }
- }
- }
|