Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Saving pump history into LoopKit and delegating upload to Nightscout (#…
…128)

* Adding a current glucose HUD

* DoseStore upload delegation

* Updating interface; fixing watch

* Reverting font weight change

* Better display of history values
  • Loading branch information
loudnate authored Aug 27, 2016
commit ba63f6bc7accfe23cb958a08767d273024b42166
2 changes: 1 addition & 1 deletion Loop/Extensions/DoseStore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ extension DoseStore {
break
}

title = (dose?.type != nil ? String(dose!.type) : event.dictionaryRepresentation["_type"] as? String) ?? String(event.pumpEvent.dynamicType)
title = String(event.pumpEvent)
events.append(NewPumpEvent(date: event.date, dose: dose, isMutable: event.isMutable(), raw: event.pumpEvent.rawData, title: title))
}

Expand Down
70 changes: 39 additions & 31 deletions Loop/Managers/DeviceDataManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import Foundation
import CarbKit
import CoreData
import G4ShareSpy
import GlucoseKit
import HealthKit
Expand All @@ -20,7 +21,7 @@ import ShareClient
import xDripG5


final class DeviceDataManager: CarbStoreDelegate, TransmitterDelegate, ReceiverDelegate {
final class DeviceDataManager: CarbStoreDelegate, DoseStoreDelegate, TransmitterDelegate, ReceiverDelegate {
/// Notification posted by the instance when new glucose data was processed
static let GlucoseUpdatedNotification = "com.loudnate.Naterade.notification.GlucoseUpdated"

Expand All @@ -42,9 +43,6 @@ final class DeviceDataManager: CarbStoreDelegate, TransmitterDelegate, ReceiverD

private var nightscoutDataManager: NightscoutDataManager!

// Timestamp of last event we've retrieved from pump
var observingPumpEventsSince = NSDate(timeIntervalSinceNow: NSTimeInterval(hours: -24))

// The Dexcom Share receiver object
private var receiver: Receiver? {
didSet {
Expand Down Expand Up @@ -350,38 +348,18 @@ final class DeviceDataManager: CarbStoreDelegate, TransmitterDelegate, ReceiverD
return
}

// TODO: Reconcile these
//let startDate = doseStore.pumpEventQueryAfterDate
let startDate = remoteDataManager.nightscoutUploader?.observingPumpEventsSince ?? observingPumpEventsSince
let startDate = doseStore.pumpEventQueryAfterDate

device.ops?.getHistoryEventsSinceDate(startDate) { (result) in
switch result {
case let .Success(events, pumpModel):
// TODO: Surface raw pump event data and add DoseEntry conformance
// self.doseStore.addPumpEvents(events.map({ ($0.date, nil, $0.pumpEvent.rawData, $0.isMutable()) })) { (error) in
// if let error = error {
// self.logger.addError("Failed to store history: \(error)", fromSource: "DoseStore")
// }
// }

NSNotificationCenter.defaultCenter().postNotificationName(self.dynamicType.PumpStatusUpdatedNotification, object: self)
self.remoteDataManager.nightscoutUploader?.processPumpEvents(events, source: device.deviceURI, pumpModel: pumpModel)

var lastFinalDate: NSDate?
var firstMutableDate: NSDate?

for event in events {
if event.isMutable() {
firstMutableDate = min(event.date, firstMutableDate ?? event.date)
} else {
lastFinalDate = max(event.date, lastFinalDate ?? event.date)
case let .Success(events, _):
self.doseStore.add(events) { (error) in
if let error = error {
self.logger.addError("Failed to store history: \(error)", fromSource: "DoseStore")
}
}
if let mutableDate = firstMutableDate {
self.observingPumpEventsSince = mutableDate
} else if let finalDate = lastFinalDate {
self.observingPumpEventsSince = finalDate
}

NSNotificationCenter.defaultCenter().postNotificationName(self.dynamicType.PumpStatusUpdatedNotification, object: self)
case .Failure(let error):
self.logger.addError("Failed to fetch history: \(error)", fromSource: "RileyLink")

Expand Down Expand Up @@ -860,6 +838,35 @@ final class DeviceDataManager: CarbStoreDelegate, TransmitterDelegate, ReceiverD

let doseStore: DoseStore

// MARK: DoseStoreDelegate

func doseStore(doseStore: DoseStore, hasEventsNeedingUpload pumpEvents: [PersistedPumpEvent], fromPumpID pumpID: String, withCompletion completionHandler: (uploadedObjects: [NSManagedObjectID]) -> Void) {
guard let uploader = remoteDataManager.nightscoutUploader, pumpModel = pumpState?.pumpModel else {
completionHandler(uploadedObjects: pumpEvents.map({ $0.objectID }))
return
}

var objectIDs = [NSManagedObjectID]()
var timestampedPumpEvents = [TimestampedHistoryEvent]()

for event in pumpEvents {
objectIDs.append(event.objectID)

if let raw = event.raw where raw.length > 0, let type = MinimedKit.PumpEventType(rawValue: raw[0])?.eventType, pumpEvent = type.init(availableData: raw, pumpModel: pumpModel) {
timestampedPumpEvents.append(TimestampedHistoryEvent(pumpEvent: pumpEvent, date: event.date))
}
}

uploader.upload(timestampedPumpEvents, forSource: "loop://\(UIDevice.currentDevice().name)", from: pumpModel) { (error) in
if let error = error {
self.logger.addError(error, fromSource: "NightscoutUploadKit")
completionHandler(uploadedObjects: [])
} else {
completionHandler(uploadedObjects: objectIDs)
}
}
}

// MARK: - WatchKit

private(set) var watchManager: WatchDataManager!
Expand Down Expand Up @@ -924,6 +931,7 @@ final class DeviceDataManager: CarbStoreDelegate, TransmitterDelegate, ReceiverD
nightscoutDataManager = NightscoutDataManager(deviceDataManager: self)

carbStore?.delegate = self
doseStore.delegate = self

if NSUserDefaults.standardUserDefaults().receiverEnabled {
receiver = Receiver()
Expand Down