SAge.swift 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // LoopFollow
  2. // SAge.swift
  3. // Created by Jonas Björkert.
  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. Storage.shared.sageInsertTime.value = formatter.date(from: lastSageString)?.timeIntervalSince1970 as! TimeInterval
  41. // -- Auto-snooze CGM start ────────────────────────────────────────────────
  42. let now = Date()
  43. // 1. Do we *want* the automatic global snooze?
  44. if Storage.shared.alarmConfiguration.value.autoSnoozeCGMStart {
  45. // 2. When did the sensor start?
  46. let insertTime = Storage.shared.sageInsertTime.value
  47. // 3. If the start is less than 2 h ago, snooze *all* alarms for the
  48. // remainder of that 2-hour window.
  49. if now.timeIntervalSince1970 - insertTime < 7200 {
  50. var cfg = Storage.shared.alarmConfiguration.value
  51. cfg.snoozeUntil = Date(timeIntervalSince1970: insertTime + 7200)
  52. Storage.shared.alarmConfiguration.value = cfg
  53. }
  54. }
  55. if let sageTime = formatter.date(from: (lastSageString as! String))?.timeIntervalSince1970 {
  56. let now = dateTimeUtils.getNowTimeIntervalUTC()
  57. let secondsAgo = now - sageTime
  58. let formatter = DateComponentsFormatter()
  59. formatter.unitsStyle = .positional // Use the appropriate positioning for the current locale
  60. formatter.allowedUnits = [.day, .hour] // Units to display in the formatted string
  61. formatter.zeroFormattingBehavior = [.pad] // Pad with zeroes where appropriate for the locale
  62. if let formattedDuration = formatter.string(from: secondsAgo) {
  63. infoManager.updateInfoData(type: .sage, value: formattedDuration)
  64. }
  65. }
  66. }
  67. }