IAge.swift 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // LoopFollow
  2. // IAge.swift
  3. import Foundation
  4. extension MainViewController {
  5. // NS Iage Web Call
  6. func webLoadNSIage() {
  7. let lastDateString = dateTimeUtils.getDateTimeString(addingDays: -60)
  8. let currentTimeString = dateTimeUtils.getDateTimeString()
  9. let parameters: [String: String] = [
  10. "find[eventType]": NightscoutUtils.EventType.iage.rawValue,
  11. "find[created_at][$gte]": lastDateString,
  12. "find[created_at][$lte]": currentTimeString,
  13. "count": "1",
  14. ]
  15. NightscoutUtils.executeRequest(eventType: .iage, parameters: parameters) { (result: Result<[iageData], Error>) in
  16. switch result {
  17. case let .success(data):
  18. DispatchQueue.main.async {
  19. self.updateIage(data: data)
  20. }
  21. case let .failure(error):
  22. LogManager.shared.log(category: .nightscout, message: "webLoadNSIage, failed to fetch data: \(error.localizedDescription)")
  23. }
  24. }
  25. }
  26. // NS Sage Response Processor
  27. func updateIage(data: [iageData]) {
  28. infoManager.clearInfoData(type: .iage)
  29. if data.count == 0 {
  30. return
  31. }
  32. currentIage = data[0]
  33. let lastIageString = data[0].created_at
  34. let formatter = ISO8601DateFormatter()
  35. formatter.formatOptions = [.withFullDate,
  36. .withTime,
  37. .withDashSeparatorInDate,
  38. .withColonSeparatorInTime]
  39. if let iageTime = formatter.date(from: (lastIageString as! String))?.timeIntervalSince1970 {
  40. Storage.shared.iageInsertTime.value = iageTime
  41. let now = dateTimeUtils.getNowTimeIntervalUTC()
  42. let secondsAgo = now - iageTime
  43. let formatter = DateComponentsFormatter()
  44. formatter.unitsStyle = .positional
  45. formatter.allowedUnits = [.day, .hour]
  46. formatter.zeroFormattingBehavior = [.pad]
  47. if let formattedDuration = formatter.string(from: secondsAgo) {
  48. infoManager.updateInfoData(type: .iage, value: formattedDuration, numericValue: secondsAgo / 86400)
  49. }
  50. }
  51. }
  52. }