Skip to content
Merged
Changes from all commits
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
51 changes: 25 additions & 26 deletions LoopFollow/Extensions/ShareClientExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ public struct ShareGlucoseData: Decodable {
var sgv: Int
var date: TimeInterval
var direction: String?

enum CodingKeys: String, CodingKey {
case sgv // Sensor Blood Glucose
case mbg // Manual Blood Glucose
case glucose // Other type of entry
case date
case direction
}

// Decoder initializer for handling JSON data
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
Expand All @@ -35,12 +35,12 @@ public struct ShareGlucoseData: Decodable {
} else {
throw DecodingError.dataCorruptedError(forKey: .sgv, in: container, debugDescription: "Expected to decode Double for sgv, mbg or glucose.")
}

// Decode the date and optional direction
date = try container.decode(TimeInterval.self, forKey: .date)
direction = try container.decodeIfPresent(String.self, forKey: .direction)
}

public init(sgv: Int, date: TimeInterval, direction: String?) {
self.sgv = sgv
self.date = date
Expand All @@ -49,45 +49,44 @@ public struct ShareGlucoseData: Decodable {
}

private var TrendTable: [String] = [
"NONE", // 0
"DoubleUp", // 1
"SingleUp", // 2
"FortyFiveUp", // 3
"Flat", // 4
"FortyFiveDown", // 5
"SingleDown", // 6
"DoubleDown", // 7
"NOT COMPUTABLE", // 8
"RATE OUT OF RANGE" // 9
"NONE", // 0
"DoubleUp", // 1
"SingleUp", // 2
"FortyFiveUp", // 3
"Flat", // 4
"FortyFiveDown", // 5
"SingleDown", // 6
"DoubleDown", // 7
"NOT COMPUTABLE", // 8
"RATE OUT OF RANGE" // 9
]

// TODO: probably better to make this an inherited class rather than an extension
extension ShareClient {

public func fetchData(_ entries: Int, callback: @escaping (ShareError?, [ShareGlucoseData]?) -> Void) {

self.fetchLast(entries) { (error, result) -> () in
guard error == nil || result != nil else {
return callback(error, nil)
guard error == nil, let result = result else {
return callback(error ?? .fetchError, nil)
}

// parse data to conanical form
var shareData = [ShareGlucoseData]()
for i in 0..<result!.count {

var trend = Int(result![i].trend)
if(trend < 0 || trend > TrendTable.count-1) {
for item in result {
var trend = Int(item.trend)
if trend < 0 || trend >= TrendTable.count {
trend = 0
}

let newShareData = ShareGlucoseData(
sgv: Int(result![i].glucose),
date: result![i].timestamp.timeIntervalSince1970,
sgv: Int(item.glucose),
date: item.timestamp.timeIntervalSince1970,
direction: TrendTable[trend]
)
shareData.append(newShareData)
}
callback(nil,shareData)
}
callback(nil, shareData)
}
}
}