SAge.swift 3.4 KB

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