Parcourir la source

Ensure latest 'enacted' determination is always uploaded #259

Deniz Cengiz il y a 1 an
Parent
commit
9f079f3e96

+ 24 - 6
FreeAPS/Sources/Services/Network/Nightscout/NightscoutManager.swift

@@ -133,11 +133,18 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
 
         registerHandlers()
         setupNotification()
+
+        /// Ensure that Nightscout Manager holds the `lastEnactedDetermination`, if one exists, on initialization.
+        Task {
+            async let lastEnactedDeterminationID = determinationStorage
+                .fetchLastDeterminationObjectID(predicate: NSPredicate.enactedDetermination)
+
+            self.lastEnactedDetermination = await determinationStorage
+                .getOrefDeterminationNotYetUploadedToNightscout(lastEnactedDeterminationID)
+        }
     }
 
     private func subscribe() {
-//        broadcaster.register(TempTargetsObserver.self, observer: self)
-
         _ = reachabilityManager.startListening(onQueue: processQueue) { status in
             debug(.nightscout, "Network status: \(status)")
         }
@@ -463,13 +470,19 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
 
         // Gather all relevant data for OpenAPS Status
         let iob = await fetchedIOBEntry
+
+        let suggestedToUpload = modifiedSuggestedDetermination ?? lastSuggestedDetermination
+        let enactedToUpload = fetchedEnactedDetermination ?? lastEnactedDetermination
+
         let openapsStatus = OpenAPSStatus(
             iob: iob?.first,
-            suggested: modifiedSuggestedDetermination,
-            enacted: settingsManager.settings.closedLoop ? fetchedEnactedDetermination : nil,
+            suggested: suggestedToUpload,
+            enacted: settingsManager.settings.closedLoop ? enactedToUpload : nil,
             version: Bundle.main.releaseVersionNumber ?? "Unknown"
         )
 
+        debug(.nightscout, "To be uploaded openapsStatus: \(openapsStatus)")
+
         // Gather all relevant data for NS Status
         let battery = await fetchedBattery
         let reservoir = await fetchedReservoir
@@ -507,8 +520,13 @@ final class BaseNightscoutManager: NightscoutManager, Injectable {
                 await updateOrefDeterminationAsUploaded([suggested])
             }
 
-            lastEnactedDetermination = fetchedEnactedDetermination
-            lastSuggestedDetermination = fetchedSuggestedDetermination
+            if let lastEnactedDetermination = fetchedEnactedDetermination {
+                self.lastEnactedDetermination = lastEnactedDetermination
+            }
+
+            if let lastSuggestedDetermination = fetchedSuggestedDetermination {
+                self.lastSuggestedDetermination = lastSuggestedDetermination
+            }
 
             debug(.nightscout, "NSDeviceStatus with Determination uploaded")
         } catch {