Quellcode durchsuchen

replace carbs json in determine basal, refactoring

polscm32 vor 2 Jahren
Ursprung
Commit
2959ed81b3

+ 1 - 1
Dependencies/LoopKit/LoopKit/DeviceManager/CGMManager.swift

@@ -71,7 +71,7 @@ public protocol CGMManagerDelegate: DeviceManagerDelegate, CGMManagerStatusObser
     ///
     /// - Parameter manager: The manager instance
     /// - Returns: The date data occuring on or after which should be kept
-    func startDateToFilterNewData(for manager: CGMManager) async -> Date?
+    func startDateToFilterNewData(for manager: CGMManager) -> Date?
 
     /// Informs the delegate that the device has updated with a new result
     ///

+ 15 - 3
FreeAPS/Sources/APS/OpenAPS/OpenAPS.swift

@@ -109,6 +109,16 @@ final class OpenAPS {
         }
     }
 
+    private func fetchCarbs() -> [MealsStored]? {
+        do {
+            debugPrint("OpenAPS: \(#function) \(DebuggingIdentifiers.succeeded) fetched carbs")
+            return try context.fetch(MealsStored.fetch(NSPredicate.predicateFor30MinAgo, ascending: true))
+        } catch {
+            debugPrint("OpenAPS: \(#function) \(DebuggingIdentifiers.failed) failed to fetch carbs with error: \(error)")
+            return []
+        }
+    }
+
     func determineBasal(currentTemp: TempBasal, clock: Date = Date()) -> Future<Determination?, Never> {
         Future { promise in
             self.processQueue.async {
@@ -120,9 +130,11 @@ final class OpenAPS {
                 let tempBasal = currentTemp.rawJSON
                 self.storage.save(tempBasal, as: Monitor.tempBasal)
 
-                // meal
                 let pumpHistory = self.loadFileFromStorage(name: OpenAPS.Monitor.pumpHistory)
-                let carbs = self.loadFileFromStorage(name: Monitor.carbHistory)
+                
+                // carbs
+                let carbs = self.fetchCarbs()
+                let carbsString = self.jsonConverter.convertToJSON(carbs)
 
                 /// glucose
                 let glucose = self.fetchGlucose()
@@ -138,7 +150,7 @@ final class OpenAPS {
                     profile: profile,
                     basalProfile: basalProfile,
                     clock: clock,
-                    carbs: carbs,
+                    carbs: carbsString,
                     glucose: glucoseString
                 )
 

+ 44 - 44
FreeAPS/Sources/APS/Storage/GlucoseStorage.swift

@@ -48,53 +48,53 @@ final class BaseGlucoseStorage: GlucoseStorage, Injectable {
     func storeGlucose(_ glucose: [BloodGlucose]) {
         processQueue.sync {
             debug(.deviceManager, "start storage glucose")
-            let file = OpenAPS.Monitor.glucose
-            self.storage.transaction { storage in
-                storage.append(glucose, to: file, uniqBy: \.dateString)
-
-                let uniqEvents = storage.retrieve(file, as: [BloodGlucose].self)?
-                    .filter { $0.dateString.addingTimeInterval(24.hours.timeInterval) > Date() }
-                    .sorted { $0.dateString > $1.dateString } ?? []
-                let glucose = Array(uniqEvents)
-                storage.save(glucose, as: file)
-
-                DispatchQueue.main.async {
-                    self.broadcaster.notify(GlucoseObserver.self, on: .main) {
-                        $0.glucoseDidUpdate(glucose.reversed())
-                    }
-                }
-
-                // MARK: - Save to CoreData.
-
-                var bg_ = 0
-                var direction = ""
-
-                if glucose.isNotEmpty {
-                    bg_ = glucose[0].glucose ?? 0
-                    direction = glucose[0].direction?.symbol ?? "↔︎"
-                }
+//            let file = OpenAPS.Monitor.glucose
+//            self.storage.transaction { storage in
+//                storage.append(glucose, to: file, uniqBy: \.dateString)
+//
+//                let uniqEvents = storage.retrieve(file, as: [BloodGlucose].self)?
+//                    .filter { $0.dateString.addingTimeInterval(24.hours.timeInterval) > Date() }
+//                    .sorted { $0.dateString > $1.dateString } ?? []
+//                let glucose = Array(uniqEvents)
+//                storage.save(glucose, as: file)
+//
+//                DispatchQueue.main.async {
+//                    self.broadcaster.notify(GlucoseObserver.self, on: .main) {
+//                        $0.glucoseDidUpdate(glucose.reversed())
+//                    }
+//                }
+
+            // MARK: - Save to CoreData.
+
+            var bg_ = 0
+            var direction = ""
+
+            if glucose.isNotEmpty {
+                bg_ = glucose[0].glucose ?? 0
+                direction = glucose[0].direction?.symbol ?? "↔︎"
+            }
 
-                if bg_ != 0 {
-                    self.coredataContext.perform {
-                        let newItem = GlucoseStored(context: self.coredataContext)
-                        newItem.id = UUID()
-                        newItem.glucose = Int16(bg_)
-                        newItem.date = Date()
-                        newItem.direction = direction
-
-                        if self.coredataContext.hasChanges {
-                            do {
-                                try self.coredataContext.save()
-                                debugPrint(
-                                    "Glucose Storage: \(CoreDataStack.identifier) \(DebuggingIdentifiers.succeeded) saved glucose to core data"
-                                )
-                            } catch {
-                                debugPrint(
-                                    "Glucose Storage: \(CoreDataStack.identifier) \(DebuggingIdentifiers.failed) failed to save glucose to core data"
-                                )
-                            }
+            if bg_ != 0 {
+                self.coredataContext.perform {
+                    let newItem = GlucoseStored(context: self.coredataContext)
+                    newItem.id = UUID()
+                    newItem.glucose = Int16(bg_)
+                    newItem.date = Date()
+                    newItem.direction = direction
+
+                    if self.coredataContext.hasChanges {
+                        do {
+                            try self.coredataContext.save()
+                            debugPrint(
+                                "Glucose Storage: \(CoreDataStack.identifier) \(DebuggingIdentifiers.succeeded) saved glucose to core data"
+                            )
+                        } catch {
+                            debugPrint(
+                                "Glucose Storage: \(CoreDataStack.identifier) \(DebuggingIdentifiers.failed) failed to save glucose to core data"
+                            )
                         }
                     }
+//                    }
                 }
             }
 

+ 32 - 6
Model/Helper/MealsStored+helper.swift

@@ -14,13 +14,39 @@ extension NSPredicate {
 }
 
 extension MealsStored {
-    static func fetch(_ predicate: NSPredicate = .predicateForOneDayAgo) -> NSFetchRequest<MealsStored> {
-        let request = MealsStored.fetchRequest()
-        request.sortDescriptors = [NSSortDescriptor(keyPath: \MealsStored.date, ascending: false)]
-        request.fetchLimit = 100
+    static func fetch(
+        _ predicate: NSPredicate = .predicateForOneDayAgo,
+        fetchLimit: Int = 100,
+        ascending: Bool = false
+    ) -> NSFetchRequest<MealsStored> {
+        let request = MealsStored.fetchRequest() as NSFetchRequest<MealsStored>
+        request.sortDescriptors = [NSSortDescriptor(keyPath: \MealsStored.date, ascending: ascending)]
+        request.fetchLimit = fetchLimit
         request.predicate = predicate
-//        request.propertiesToFetch = ["date", "carbs"]
-//        request.resultType = .dictionaryResultType
         return request
     }
 }
+
+extension MealsStored: Encodable {
+    enum CodingKeys: String, CodingKey {
+        case date
+        case carbs
+        case fat
+        case id
+        case isFPU
+        case note
+        case protein
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.container(keyedBy: CodingKeys.self)
+
+        try container.encode(date, forKey: .date)
+        try container.encode(carbs, forKey: .carbs)
+        try container.encode(fat, forKey: .fat)
+        try container.encode(isFPU, forKey: .isFPU)
+        try container.encode(note, forKey: .note)
+        try container.encode(protein, forKey: .protein)
+        try container.encode(id, forKey: .id)
+    }
+}