IAge.swift 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // LoopFollow
  2. // IAge.swift
  3. // Created by Jonas Björkert on 2024-08-05.
  4. import Foundation
  5. extension MainViewController {
  6. // NS Iage Web Call
  7. func webLoadNSIage() {
  8. let lastDateString = dateTimeUtils.getDateTimeString(addingDays: -60)
  9. let currentTimeString = dateTimeUtils.getDateTimeString()
  10. let parameters: [String: String] = [
  11. "find[eventType]": NightscoutUtils.EventType.iage.rawValue,
  12. "find[created_at][$gte]": lastDateString,
  13. "find[created_at][$lte]": currentTimeString,
  14. "count": "1",
  15. ]
  16. NightscoutUtils.executeRequest(eventType: .iage, parameters: parameters) { (result: Result<[iageData], Error>) in
  17. switch result {
  18. case let .success(data):
  19. DispatchQueue.main.async {
  20. self.updateIage(data: data)
  21. }
  22. case let .failure(error):
  23. LogManager.shared.log(category: .nightscout, message: "webLoadNSIage, failed to fetch data: \(error.localizedDescription)")
  24. }
  25. }
  26. }
  27. // NS Sage Response Processor
  28. func updateIage(data: [iageData]) {
  29. infoManager.clearInfoData(type: .iage)
  30. if data.count == 0 {
  31. return
  32. }
  33. currentIage = data[0]
  34. let lastIageString = data[0].created_at
  35. let formatter = ISO8601DateFormatter()
  36. formatter.formatOptions = [.withFullDate,
  37. .withTime,
  38. .withDashSeparatorInDate,
  39. .withColonSeparatorInTime]
  40. if let iageTime = formatter.date(from: (lastIageString as! String))?.timeIntervalSince1970 {
  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)
  49. }
  50. }
  51. }
  52. }