Skip to content

Commit 884819a

Browse files
authored
Merge pull request #393 from LoopKit/charts-refactor
Charts refactor
2 parents 8bde18c + 5bd4f11 commit 884819a

20 files changed

+559
-450
lines changed

Common/Extensions/NumberFormatter.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ extension NumberFormatter {
2020
return numberFormatter
2121
}
2222

23-
public func describingGlucose(_ value: Double, for unit: HKUnit) -> String? {
23+
func describingGlucose(_ value: Double, for unit: HKUnit) -> String? {
2424
guard let stringValue = string(from: NSNumber(value: value)) else {
2525
return nil
2626
}
@@ -35,7 +35,7 @@ extension NumberFormatter {
3535
)
3636
}
3737

38-
@nonobjc public func describingGlucose(_ value: HKQuantity, for unit: HKUnit) -> String? {
38+
@nonobjc func describingGlucose(_ value: HKQuantity, for unit: HKUnit) -> String? {
3939
return describingGlucose(value.doubleValue(for: unit), for: unit)
4040
}
4141

Loop.xcodeproj/project.pbxproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
4302F4E31D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4302F4E21D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift */; };
1313
4302F4E51D4EA75100F0FCAF /* DoseStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4302F4E41D4EA75100F0FCAF /* DoseStore.swift */; };
1414
43076BF31DFDBC4B0012A723 /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 43076BF21DFDBC4B0012A723 /* it.lproj */; };
15+
430C1ABD1E5568A80067F1AE /* StatusChartManager+LoopKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430C1ABC1E5568A80067F1AE /* StatusChartManager+LoopKit.swift */; };
1516
430DA58E1D4AEC230097D1CA /* NSBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DA58D1D4AEC230097D1CA /* NSBundle.swift */; };
1617
430DA5901D4B0E4C0097D1CA /* MySentryPumpStatusMessageBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DA58F1D4B0E4C0097D1CA /* MySentryPumpStatusMessageBody.swift */; };
1718
4313EDE01D8A6BF90060FA79 /* ChartContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4313EDDF1D8A6BF90060FA79 /* ChartContentView.swift */; };
@@ -103,6 +104,7 @@
103104
43CA93371CB98079000026B5 /* MinimedKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43CA93361CB98079000026B5 /* MinimedKit.framework */; };
104105
43CB2B2B1D924D450079823D /* WCSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CB2B2A1D924D450079823D /* WCSession.swift */; };
105106
43CE7CDE1CA8B63E003CC1B0 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE7CDD1CA8B63E003CC1B0 /* Data.swift */; };
107+
43CEE6E61E56AFD400CB9116 /* NightscoutUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CEE6E51E56AFD400CB9116 /* NightscoutUploader.swift */; };
106108
43DBF04C1C93B8D700B3C386 /* BolusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DBF04B1C93B8D700B3C386 /* BolusViewController.swift */; };
107109
43DBF0531C93EC8200B3C386 /* DeviceDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DBF0521C93EC8200B3C386 /* DeviceDataManager.swift */; };
108110
43DBF0591C93F73800B3C386 /* CarbEntryTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DBF0581C93F73800B3C386 /* CarbEntryTableViewController.swift */; };
@@ -148,6 +150,7 @@
148150
43F78D4C1C914197002152D1 /* CarbKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D481C914197002152D1 /* CarbKit.framework */; };
149151
43F78D4D1C914197002152D1 /* GlucoseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D491C914197002152D1 /* GlucoseKit.framework */; };
150152
43F78D4F1C914197002152D1 /* LoopKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D4B1C914197002152D1 /* LoopKit.framework */; };
153+
43FCBBC21E51710B00343C1B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 43776F9A1B8022E90074EA36 /* LaunchScreen.storyboard */; };
151154
4D3B40041D4A9E1A00BC6334 /* G4ShareSpy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D3B40021D4A9DFE00BC6334 /* G4ShareSpy.framework */; };
152155
4D5B7A4B1D457CCA00796CA9 /* GlucoseG4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D5B7A4A1D457CCA00796CA9 /* GlucoseG4.swift */; };
153156
4F2C15741E0209F500E160D4 /* NSTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897341CD2F7DE00223065 /* NSTimeInterval.swift */; };
@@ -332,6 +335,7 @@
332335
4302F4E21D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InsulinDeliveryTableViewController.swift; sourceTree = "<group>"; };
333336
4302F4E41D4EA75100F0FCAF /* DoseStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DoseStore.swift; sourceTree = "<group>"; };
334337
43076BF21DFDBC4B0012A723 /* it.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; path = it.lproj; sourceTree = "<group>"; };
338+
430C1ABC1E5568A80067F1AE /* StatusChartManager+LoopKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StatusChartManager+LoopKit.swift"; sourceTree = "<group>"; };
335339
430DA58D1D4AEC230097D1CA /* NSBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSBundle.swift; sourceTree = "<group>"; };
336340
430DA58F1D4B0E4C0097D1CA /* MySentryPumpStatusMessageBody.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MySentryPumpStatusMessageBody.swift; sourceTree = "<group>"; };
337341
4313EDDF1D8A6BF90060FA79 /* ChartContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartContentView.swift; sourceTree = "<group>"; };
@@ -432,6 +436,7 @@
432436
43CA93361CB98079000026B5 /* MinimedKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MinimedKit.framework; path = Carthage/Build/iOS/MinimedKit.framework; sourceTree = "<group>"; };
433437
43CB2B2A1D924D450079823D /* WCSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WCSession.swift; sourceTree = "<group>"; };
434438
43CE7CDD1CA8B63E003CC1B0 /* Data.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Data.swift; sourceTree = "<group>"; };
439+
43CEE6E51E56AFD400CB9116 /* NightscoutUploader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NightscoutUploader.swift; sourceTree = "<group>"; };
435440
43D533BB1CFD1DD7009E3085 /* WatchApp Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "WatchApp Extension.entitlements"; sourceTree = "<group>"; };
436441
43DBF04B1C93B8D700B3C386 /* BolusViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BolusViewController.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
437442
43DBF0521C93EC8200B3C386 /* DeviceDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = DeviceDataManager.swift; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
@@ -782,6 +787,7 @@
782787
43CE7CDD1CA8B63E003CC1B0 /* Data.swift */,
783788
4302F4E41D4EA75100F0FCAF /* DoseStore.swift */,
784789
C15713811DAC6983005BC4D2 /* MealBolusNightscoutTreatment.swift */,
790+
43CEE6E51E56AFD400CB9116 /* NightscoutUploader.swift */,
785791
4398973A1CD2FC2000223065 /* NSDateFormatter.swift */,
786792
43E344A31B9E1B1C00C85C07 /* NSUserDefaults.swift */,
787793
43BFF0CA1E466C0900FF19A9 /* StateColorPalette.swift */,
@@ -848,6 +854,7 @@
848854
43C094491CACCC73001F6403 /* NotificationManager.swift */,
849855
432E73CA1D24B3D6009AD15D /* RemoteDataManager.swift */,
850856
43EB40851C82646A00472A8C /* StatusChartManager.swift */,
857+
430C1ABC1E5568A80067F1AE /* StatusChartManager+LoopKit.swift */,
851858
4F70C20F1DE8FAC5006380B7 /* StatusExtensionDataManager.swift */,
852859
4328E0341CFC0AE100E199AA /* WatchDataManager.swift */,
853860
);
@@ -1232,6 +1239,7 @@
12321239
buildActionMask = 2147483647;
12331240
files = (
12341241
C1C73F081DE3D0260022FC89 /* InfoPlist.strings in Resources */,
1242+
43FCBBC21E51710B00343C1B /* LaunchScreen.storyboard in Resources */,
12351243
43776F991B8022E90074EA36 /* Assets.xcassets in Resources */,
12361244
434F54591D28805E002A9274 /* ButtonTableViewCell.xib in Resources */,
12371245
C1C73F021DE3D0250022FC89 /* Localizable.strings in Resources */,
@@ -1406,8 +1414,10 @@
14061414
435400341C9F878D00D5819C /* SetBolusUserInfo.swift in Sources */,
14071415
437D9BA31D7BC977007245E8 /* PredictionTableViewController.swift in Sources */,
14081416
43F41C371D3BF32400C11ED6 /* UIAlertController.swift in Sources */,
1417+
430C1ABD1E5568A80067F1AE /* StatusChartManager+LoopKit.swift in Sources */,
14091418
433EA4C41D9F71C800CD78FB /* CommandResponseViewController.swift in Sources */,
14101419
434F545F1D288345002A9274 /* ShareService.swift in Sources */,
1420+
43CEE6E61E56AFD400CB9116 /* NightscoutUploader.swift in Sources */,
14111421
4328E0331CFC091100E199AA /* WatchContext+LoopKit.swift in Sources */,
14121422
4F526D611DF8D9A900A04910 /* NetBasal.swift in Sources */,
14131423
4398973B1CD2FC2000223065 /* NSDateFormatter.swift in Sources */,

Loop/Extensions/ChartPoint.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,13 @@ extension ChartPoint {
101101
}
102102

103103

104+
extension ChartPoint: TimelineValue {
105+
public var startDate: Date {
106+
if let dateValue = x as? ChartAxisValueDate {
107+
return dateValue.date
108+
} else {
109+
return Date.distantPast
110+
}
111+
}
112+
}
113+
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
//
2+
// NightscoutUploader.swift
3+
// Loop
4+
//
5+
// Copyright © 2017 LoopKit Authors. All rights reserved.
6+
//
7+
8+
import CarbKit
9+
import NightscoutUploadKit
10+
11+
12+
extension NightscoutUploader: CarbStoreSyncDelegate {
13+
public func carbStore(_ carbStore: CarbStore, hasEntriesNeedingUpload entries: [CarbEntry], withCompletion completionHandler: @escaping (_ uploadedObjects: [String]) -> Void) {
14+
15+
let nsCarbEntries = entries.map({ MealBolusNightscoutTreatment(carbEntry: $0)})
16+
17+
upload(nsCarbEntries) { (result) in
18+
switch result {
19+
case .success(let ids):
20+
// Pass new ids back
21+
completionHandler(ids)
22+
case .failure:
23+
completionHandler([])
24+
}
25+
}
26+
}
27+
28+
public func carbStore(_ carbStore: CarbStore, hasModifiedEntries entries: [CarbEntry], withCompletion completionHandler: @escaping (_ uploadedObjects: [String]) -> Void) {
29+
30+
let nsCarbEntries = entries.map({ MealBolusNightscoutTreatment(carbEntry: $0)})
31+
32+
modifyTreatments(nsCarbEntries) { (error) in
33+
if error != nil {
34+
completionHandler([])
35+
} else {
36+
completionHandler(entries.map { $0.externalId ?? "" } )
37+
}
38+
}
39+
}
40+
41+
public func carbStore(_ carbStore: CarbStore, hasDeletedEntries ids: [String], withCompletion completionHandler: @escaping ([String]) -> Void) {
42+
43+
deleteTreatmentsById(ids) { (error) in
44+
if error != nil {
45+
completionHandler([])
46+
} else {
47+
completionHandler(ids)
48+
}
49+
}
50+
}
51+
}

Loop/Info.plist

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,10 @@
22
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
<plist version="1.0">
44
<dict>
5-
<key>CFBundleURLTypes</key>
6-
<array>
7-
<dict>
8-
<key>CFBundleURLSchemes</key>
9-
<array>
10-
<string>$(MAIN_APP_BUNDLE_IDENTIFIER)</string>
11-
</array>
12-
</dict>
13-
</array>
5+
<key>AppGroupIdentifier</key>
6+
<string>$(APP_GROUP_IDENTIFIER)</string>
147
<key>CFBundleDevelopmentRegion</key>
158
<string>en</string>
16-
<key>ITSAppUsesNonExemptEncryption</key>
17-
<false/>
189
<key>CFBundleDisplayName</key>
1910
<string>Loop</string>
2011
<key>CFBundleExecutable</key>
@@ -31,8 +22,19 @@
3122
<string>1.3.0dev</string>
3223
<key>CFBundleSignature</key>
3324
<string>????</string>
25+
<key>CFBundleURLTypes</key>
26+
<array>
27+
<dict>
28+
<key>CFBundleURLSchemes</key>
29+
<array>
30+
<string>$(MAIN_APP_BUNDLE_IDENTIFIER)</string>
31+
</array>
32+
</dict>
33+
</array>
3434
<key>CFBundleVersion</key>
3535
<string>$(CURRENT_PROJECT_VERSION)</string>
36+
<key>ITSAppUsesNonExemptEncryption</key>
37+
<false/>
3638
<key>LSApplicationQueriesSchemes</key>
3739
<array>
3840
<string>dexcomcgm</string>
@@ -86,7 +88,5 @@ Glucose data retrieved from the CGM is stored securely in HealthKit.</string>
8688
<string>UIInterfaceOrientationLandscapeLeft</string>
8789
<string>UIInterfaceOrientationLandscapeRight</string>
8890
</array>
89-
<key>AppGroupIdentifier</key>
90-
<string>$(APP_GROUP_IDENTIFIER)</string>
9191
</dict>
9292
</plist>

0 commit comments

Comments
 (0)