ShareClientExtension.swift 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. //
  2. // ShareClientExtension.swift
  3. // LoopFollow
  4. //
  5. // Created by Jose Paredes on 7/13/20.
  6. // Copyright © 2020 Jon Fawcett. All rights reserved.
  7. //
  8. import Foundation
  9. import ShareClient
  10. public struct ShareGlucoseData: Codable {
  11. var sgv: Int
  12. var date: TimeInterval
  13. var direction: String?
  14. }
  15. private var TrendTable: [String] = [
  16. "NONE", // 0
  17. "DoubleUp", // 1
  18. "SingleUp", // 2
  19. "FortyFiveUp", // 3
  20. "Flat", // 4
  21. "FortyFiveDown", // 5
  22. "SingleDown", // 6
  23. "DoubleDown", // 7
  24. "NOT COMPUTABLE", // 8
  25. "RATE OUT OF RANGE" // 9
  26. ]
  27. // TODO: probably better to make this an inherited class rather than an extension
  28. extension ShareClient {
  29. public func fetchData(_ entries: Int, callback: @escaping (ShareError?, [ShareGlucoseData]?) -> Void) {
  30. self.fetchLast(entries) { (error, result) -> () in
  31. guard error == nil || result != nil else {
  32. return callback(error, nil)
  33. }
  34. // parse data to conanical form
  35. var shareData = [ShareGlucoseData]()
  36. for i in 0..<result!.count {
  37. var trend = Int(result![i].trend)
  38. if(trend < 0 || trend > TrendTable.count-1) {
  39. trend = 0
  40. }
  41. let newShareData = ShareGlucoseData(
  42. sgv: Int(result![i].glucose),
  43. date: result![i].timestamp.timeIntervalSince1970,
  44. direction: TrendTable[trend]
  45. )
  46. shareData.append(newShareData)
  47. }
  48. callback(nil,shareData)
  49. }
  50. }
  51. }