SAge.swift 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // LoopFollow
  2. // SAge.swift
  3. // Created by Jonas Björkert on 2023-10-05.
  4. import Foundation
  5. extension MainViewController {
  6. // NS Sage Web Call
  7. func webLoadNSSage() {
  8. let lastDateString = dateTimeUtils.getDateTimeString(addingDays: -60)
  9. let currentTimeString = dateTimeUtils.getDateTimeString()
  10. let parameters: [String: String] = [
  11. "find[eventType]": NightscoutUtils.EventType.sage.rawValue,
  12. "find[created_at][$gte]": lastDateString,
  13. "find[created_at][$lte]": currentTimeString,
  14. "count": "1",
  15. ]
  16. NightscoutUtils.executeRequest(eventType: .sage, parameters: parameters) { (result: Result<[sageData], Error>) in
  17. switch result {
  18. case let .success(data):
  19. DispatchQueue.main.async {
  20. self.updateSage(data: data)
  21. }
  22. case let .failure(error):
  23. LogManager.shared.log(category: .nightscout, message: "webLoadNSSage, failed to fetch data: \(error.localizedDescription)")
  24. }
  25. }
  26. }
  27. // NS Sage Response Processor
  28. func updateSage(data: [sageData]) {
  29. infoManager.clearInfoData(type: .sage)
  30. if data.count == 0 {
  31. return
  32. }
  33. currentSage = data[0]
  34. var lastSageString = data[0].created_at
  35. let formatter = ISO8601DateFormatter()
  36. formatter.formatOptions = [.withFullDate,
  37. .withTime,
  38. .withDashSeparatorInDate,
  39. .withColonSeparatorInTime]
  40. UserDefaultsRepository.alertSageInsertTime.value = formatter.date(from: lastSageString)?.timeIntervalSince1970 as! TimeInterval
  41. if UserDefaultsRepository.alertAutoSnoozeCGMStart.value, dateTimeUtils.getNowTimeIntervalUTC() - UserDefaultsRepository.alertSageInsertTime.value < 7200 {
  42. let snoozeTime = Date(timeIntervalSince1970: UserDefaultsRepository.alertSageInsertTime.value + 7200)
  43. UserDefaultsRepository.alertSnoozeAllTime.value = snoozeTime
  44. UserDefaultsRepository.alertSnoozeAllIsSnoozed.value = true
  45. }
  46. if let sageTime = formatter.date(from: (lastSageString as! String))?.timeIntervalSince1970 {
  47. let now = dateTimeUtils.getNowTimeIntervalUTC()
  48. let secondsAgo = now - sageTime
  49. let formatter = DateComponentsFormatter()
  50. formatter.unitsStyle = .positional // Use the appropriate positioning for the current locale
  51. formatter.allowedUnits = [.day, .hour] // Units to display in the formatted string
  52. formatter.zeroFormattingBehavior = [.pad] // Pad with zeroes where appropriate for the locale
  53. if let formattedDuration = formatter.string(from: secondsAgo) {
  54. infoManager.updateInfoData(type: .sage, value: formattedDuration)
  55. }
  56. }
  57. }
  58. }