CAge.swift 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //
  2. // CAge.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 Cage Web Call
  11. func webLoadNSCage() {
  12. let currentTimeString = dateTimeUtils.getDateTimeString()
  13. let parameters: [String: String] = [
  14. "find[eventType]": NightscoutUtils.EventType.cage.rawValue,
  15. "find[created_at][$lte]": currentTimeString,
  16. "count": "1"
  17. ]
  18. NightscoutUtils.executeRequest(eventType: .cage, parameters: parameters) { (result: Result<[cageData], Error>) in
  19. switch result {
  20. case .success(let data):
  21. self.updateCage(data: data)
  22. case .failure(let error):
  23. print("Error: \(error.localizedDescription)")
  24. }
  25. }
  26. }
  27. // NS Cage Response Processor
  28. func updateCage(data: [cageData]) {
  29. infoManager.clearInfoData(type: .cage)
  30. if UserDefaultsRepository.debugLog.value { self.writeDebugLog(value: "Process: CAGE") }
  31. if data.count == 0 {
  32. return
  33. }
  34. currentCage = data[0]
  35. let lastCageString = data[0].created_at
  36. let formatter = ISO8601DateFormatter()
  37. formatter.formatOptions = [.withFullDate,
  38. .withTime,
  39. .withDashSeparatorInDate,
  40. .withColonSeparatorInTime]
  41. UserDefaultsRepository.alertCageInsertTime.value = formatter.date(from: (lastCageString))?.timeIntervalSince1970 as! TimeInterval
  42. if let cageTime = formatter.date(from: (lastCageString))?.timeIntervalSince1970 {
  43. let now = dateTimeUtils.getNowTimeIntervalUTC()
  44. let secondsAgo = now - cageTime
  45. //let days = 24 * 60 * 60
  46. let formatter = DateComponentsFormatter()
  47. formatter.unitsStyle = .positional // Use the appropriate positioning for the current locale
  48. formatter.allowedUnits = [ .day, .hour ] // Units to display in the formatted string
  49. formatter.zeroFormattingBehavior = [ .pad ] // Pad with zeroes where appropriate for the locale
  50. if let formattedDuration = formatter.string(from: secondsAgo) {
  51. infoManager.updateInfoData(type: .cage, value: formattedDuration)
  52. }
  53. }
  54. }
  55. }