| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import CoreData
- import Foundation
- extension Home.StateModel {
- func setupInsulinArray() {
- Task {
- let ids = await self.fetchInsulin()
- let insulinObjects: [PumpEventStored] = await CoreDataStack.shared.getNSManagedObject(with: ids, context: viewContext)
- await updateInsulinArray(with: insulinObjects)
- }
- }
- private func fetchInsulin() async -> [NSManagedObjectID] {
- let results = await CoreDataStack.shared.fetchEntitiesAsync(
- ofType: PumpEventStored.self,
- onContext: pumpHistoryFetchContext,
- predicate: NSPredicate.pumpHistoryLast24h,
- key: "timestamp",
- ascending: true,
- batchSize: 30
- )
- return await pumpHistoryFetchContext.perform {
- guard let pumpEvents = results as? [PumpEventStored] else {
- return []
- }
- return pumpEvents.map(\.objectID)
- }
- }
- @MainActor private func updateInsulinArray(with insulinObjects: [PumpEventStored]) {
- insulinFromPersistence = insulinObjects
- manualTempBasal = apsManager.isManualTempBasal
- tempBasals = insulinFromPersistence.filter({ $0.tempBasal != nil })
- suspensions = insulinFromPersistence.filter {
- $0.type == EventType.pumpSuspend.rawValue || $0.type == EventType.pumpResume.rawValue
- }
- let lastSuspension = suspensions.last
- pumpSuspended = tempBasals.last?.timestamp ?? Date() > lastSuspension?.timestamp ?? .distantPast && lastSuspension?
- .type == EventType.pumpSuspend.rawValue
- }
- // Setup Last Bolus to display the bolus progress bar
- // The predicate filters out all external boluses to prevent the progress bar from displaying the amount of an external bolus when an external bolus is added after a pump bolus
- func setupLastBolus() {
- Task {
- guard let id = await self.fetchLastBolus() else { return }
- await updateLastBolus(with: id)
- }
- }
- func fetchLastBolus() async -> NSManagedObjectID? {
- let results = await CoreDataStack.shared.fetchEntitiesAsync(
- ofType: PumpEventStored.self,
- onContext: pumpHistoryFetchContext,
- predicate: NSPredicate.lastPumpBolus,
- key: "timestamp",
- ascending: false,
- fetchLimit: 1
- )
- return await pumpHistoryFetchContext.perform {
- guard let fetchedResults = results as? [PumpEventStored] else { return [].first }
- return fetchedResults.map(\.objectID).first
- }
- }
- @MainActor private func updateLastBolus(with ID: NSManagedObjectID) {
- do {
- lastPumpBolus = try viewContext.existingObject(with: ID) as? PumpEventStored
- } catch {
- debugPrint(
- "Home State: \(#function) \(DebuggingIdentifiers.failed) error while updating the insulin array: \(error.localizedDescription)"
- )
- }
- }
- }
|