@@ -18,9 +18,13 @@ public enum UploadError: ErrorType {
18
18
case MissingTimezone
19
19
}
20
20
21
- public class NightscoutUploader : NSObject {
21
+ private let defaultNightscoutEntriesPath = " /api/v1/entries.json "
22
+ private let defaultNightscoutTreatmentPath = " /api/v1/treatments.json "
23
+ private let defaultNightscoutDeviceStatusPath = " /api/v1/devicestatus.json "
22
24
23
- enum DexcomSensorError : UInt8 {
25
+ public class NightscoutUploader {
26
+
27
+ enum DexcomSensorError : Int {
24
28
case SensorNotActive = 1
25
29
case SensorNotCalibrated = 5
26
30
case BadRF = 12
@@ -29,46 +33,35 @@ public class NightscoutUploader: NSObject {
29
33
public var siteURL : String ?
30
34
public var APISecret : String ?
31
35
32
- var entries : [ AnyObject ]
33
- var deviceStatuses : [ AnyObject ]
34
- var treatmentsQueue : [ NightscoutTreatment ]
36
+ private ( set ) var entries = [ [ String : AnyObject] ] ( )
37
+ private ( set ) var deviceStatuses = [ [ String : AnyObject] ] ( )
38
+ private ( set ) var treatmentsQueue = [ NightscoutTreatment] ( )
35
39
36
- var lastMeterMessageRxTime : NSDate ?
40
+ private ( set ) var lastMeterMessageRxTime : NSDate ?
37
41
38
- public private( set) var observingPumpEventsSince : NSDate
42
+ public private( set) var observingPumpEventsSince : NSDate !
39
43
40
- var lastStoredTreatmentTimestamp : NSDate = NSDate . distantPast ( ) {
41
- didSet {
42
- NSUserDefaults . standardUserDefaults ( ) . lastStoredTreatmentTimestamp = lastStoredTreatmentTimestamp
44
+ private( set) var lastStoredTreatmentTimestamp : NSDate ? {
45
+ get {
46
+ return NSUserDefaults . standardUserDefaults ( ) . lastStoredTreatmentTimestamp
47
+ }
48
+ set {
49
+ NSUserDefaults . standardUserDefaults ( ) . lastStoredTreatmentTimestamp = newValue
43
50
}
44
51
}
45
-
46
- let defaultNightscoutEntriesPath = " /api/v1/entries.json "
47
- let defaultNightscoutTreatmentPath = " /api/v1/treatments.json "
48
- let defaultNightscoutDeviceStatusPath = " /api/v1/devicestatus.json "
49
-
52
+
50
53
public var errorHandler : ( ( error: ErrorType , context: String ) -> Void ) ?
51
-
52
- public var pumpID : String ? {
53
- didSet {
54
- if oldValue != nil {
55
- self . observingPumpEventsSince = NSDate ( ) . dateByAddingTimeInterval ( 60 * 60 * 24 * ( - 1 ) )
56
- }
57
- }
54
+
55
+ public func reset( ) {
56
+ observingPumpEventsSince = NSDate ( timeIntervalSinceNow: NSTimeInterval ( hours: - 24 ) )
57
+ lastStoredTreatmentTimestamp = nil
58
58
}
59
59
60
- public init ( siteURL: String ? , APISecret: String ? , pumpID: String ? ) {
61
- entries = [ AnyObject] ( )
62
- treatmentsQueue = [ NightscoutTreatment] ( )
63
- deviceStatuses = [ AnyObject] ( )
64
-
60
+ public init ( siteURL: String ? , APISecret: String ? ) {
65
61
self . siteURL = siteURL
66
62
self . APISecret = APISecret
67
- self . pumpID = pumpID
68
63
69
- self . observingPumpEventsSince = NSUserDefaults . standardUserDefaults ( ) . lastStoredTreatmentTimestamp ?? NSDate ( ) . dateByAddingTimeInterval ( 60 * 60 * 24 * ( - 1 ) )
70
-
71
- super. init ( )
64
+ observingPumpEventsSince = lastStoredTreatmentTimestamp ?? NSDate ( timeIntervalSinceNow: NSTimeInterval ( hours: - 24 ) )
72
65
}
73
66
74
67
// MARK: - Processing data from pump
@@ -117,12 +110,6 @@ public class NightscoutUploader: NSObject {
117
110
118
111
public func handlePumpStatus( status: MySentryPumpStatusMessageBody , device: String ) {
119
112
120
- enum DexcomSensorErrorType : Int {
121
- case DX_SENSOR_NOT_ACTIVE = 1
122
- case DX_SENSOR_NOT_CALIBRATED = 5
123
- case DX_BAD_RF = 12
124
- }
125
-
126
113
var recordSGV = true
127
114
128
115
let glucose : Int = {
@@ -132,12 +119,12 @@ public class NightscoutUploader: NSObject {
132
119
case . HighBG:
133
120
return 401
134
121
case . WeakSignal:
135
- return DexcomSensorErrorType . DX_BAD_RF . rawValue
122
+ return DexcomSensorError . BadRF . rawValue
136
123
case . MeterBGNow, . CalError:
137
- return DexcomSensorErrorType . DX_SENSOR_NOT_CALIBRATED . rawValue
124
+ return DexcomSensorError . SensorNotCalibrated . rawValue
138
125
case . Lost, . Missing, . Ended, . Unknown, . Off, . Warmup:
139
126
recordSGV = false
140
- return DexcomSensorErrorType . DX_SENSOR_NOT_ACTIVE . rawValue
127
+ return DexcomSensorError . SensorNotActive . rawValue
141
128
}
142
129
} ( )
143
130
@@ -235,7 +222,7 @@ public class NightscoutUploader: NSObject {
235
222
236
223
let date = NSDate ( )
237
224
let epochTime = date. timeIntervalSince1970 * 1000
238
- let entry = [
225
+ let entry : [ String : AnyObject ] = [
239
226
" date " : epochTime,
240
227
" dateString " : TimeFormat . timestampStrFromDate ( date) ,
241
228
" mbg " : msg. glucose,
@@ -244,7 +231,7 @@ public class NightscoutUploader: NSObject {
244
231
]
245
232
246
233
// Skip duplicates
247
- if lastMeterMessageRxTime == nil || lastMeterMessageRxTime!. timeIntervalSinceNow < - 3 * 60 {
234
+ if lastMeterMessageRxTime == nil || lastMeterMessageRxTime!. timeIntervalSinceNow. minutes < - 3 {
248
235
entries. append ( entry)
249
236
lastMeterMessageRxTime = NSDate ( )
250
237
}
@@ -312,7 +299,7 @@ public class NightscoutUploader: NSObject {
312
299
313
300
func flushDeviceStatuses( ) {
314
301
let inFlight = deviceStatuses
315
- deviceStatuses = [ AnyObject ] ( )
302
+ deviceStatuses = [ ]
316
303
uploadToNS ( inFlight, endpoint: defaultNightscoutDeviceStatusPath) { ( error) in
317
304
if let error = error {
318
305
self . errorHandler ? ( error: error, context: " Uploading device status " )
@@ -324,7 +311,7 @@ public class NightscoutUploader: NSObject {
324
311
325
312
func flushEntries( ) {
326
313
let inFlight = entries
327
- entries = [ AnyObject ] ( )
314
+ entries = [ ]
328
315
uploadToNS ( inFlight, endpoint: defaultNightscoutEntriesPath) { ( error) in
329
316
if let error = error {
330
317
self . errorHandler ? ( error: error, context: " Uploading nightscout entries " )
@@ -336,7 +323,7 @@ public class NightscoutUploader: NSObject {
336
323
337
324
func flushTreatments( ) {
338
325
let inFlight = treatmentsQueue
339
- treatmentsQueue = [ NightscoutTreatment ] ( )
326
+ treatmentsQueue = [ ]
340
327
uploadToNS ( inFlight. map ( { $0. dictionaryRepresentation} ) , endpoint: defaultNightscoutTreatmentPath) { ( error) in
341
328
if let error = error {
342
329
self . errorHandler ? ( error: error, context: " Uploading nightscout treatment records " )
0 commit comments