IAge.swift 2.2 KB

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