DeviceDataManager.swift 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. //
  2. // DeviceDataManager.swift
  3. // RileyLink
  4. //
  5. // Created by Pete Schwamb on 4/27/16.
  6. // Copyright © 2016 Pete Schwamb. All rights reserved.
  7. //
  8. import Foundation
  9. import RileyLinkKit
  10. import RileyLinkKitUI
  11. import RileyLinkBLEKit
  12. import MinimedKit
  13. import MinimedKitUI
  14. import NightscoutUploadKit
  15. import LoopKit
  16. import LoopKitUI
  17. import UserNotifications
  18. import os.log
  19. import UserNotifications
  20. class DeviceDataManager {
  21. let rileyLinkConnectionManager: RileyLinkConnectionManager
  22. var pumpManager: PumpManagerUI? {
  23. didSet {
  24. pumpManager?.pumpManagerDelegate = self
  25. UserDefaults.standard.pumpManagerRawValue = pumpManager?.rawValue
  26. }
  27. }
  28. public let log = OSLog(category: "DeviceDataManager")
  29. init() {
  30. if let connectionManagerState = UserDefaults.standard.rileyLinkConnectionManagerState {
  31. rileyLinkConnectionManager = RileyLinkConnectionManager(state: connectionManagerState)
  32. } else {
  33. rileyLinkConnectionManager = RileyLinkConnectionManager(autoConnectIDs: [])
  34. }
  35. rileyLinkConnectionManager.delegate = self
  36. rileyLinkConnectionManager.setScanningEnabled(true)
  37. if let pumpManagerRawValue = UserDefaults.standard.pumpManagerRawValue {
  38. pumpManager = PumpManagerFromRawValue(pumpManagerRawValue, rileyLinkDeviceProvider: rileyLinkConnectionManager.deviceProvider) as? PumpManagerUI
  39. pumpManager?.pumpManagerDelegate = self
  40. }
  41. }
  42. }
  43. extension DeviceDataManager: RileyLinkConnectionManagerDelegate {
  44. func rileyLinkConnectionManager(_ rileyLinkConnectionManager: RileyLinkConnectionManager, didChange state: RileyLinkConnectionManagerState)
  45. {
  46. UserDefaults.standard.rileyLinkConnectionManagerState = state
  47. }
  48. }
  49. extension DeviceDataManager: PumpManagerDelegate {
  50. func pumpManager(_ pumpManager: PumpManager, didAdjustPumpClockBy adjustment: TimeInterval) {
  51. log.debug("didAdjustPumpClockBy %@", adjustment)
  52. }
  53. func pumpManagerDidUpdateState(_ pumpManager: PumpManager) {
  54. UserDefaults.standard.pumpManagerRawValue = pumpManager.rawValue
  55. }
  56. func pumpManagerBLEHeartbeatDidFire(_ pumpManager: PumpManager) {
  57. }
  58. func pumpManagerMustProvideBLEHeartbeat(_ pumpManager: PumpManager) -> Bool {
  59. return true
  60. }
  61. func pumpManager(_ pumpManager: PumpManager, didUpdate status: PumpManagerStatus, oldStatus: PumpManagerStatus) {
  62. }
  63. func pumpManagerWillDeactivate(_ pumpManager: PumpManager) {
  64. self.pumpManager = nil
  65. }
  66. func pumpManager(_ pumpManager: PumpManager, didUpdatePumpRecordsBasalProfileStartEvents pumpRecordsBasalProfileStartEvents: Bool) {
  67. }
  68. func pumpManager(_ pumpManager: PumpManager, didError error: PumpManagerError) {
  69. log.error("pumpManager didError %@", String(describing: error))
  70. }
  71. func pumpManager(_ pumpManager: PumpManager, hasNewPumpEvents events: [NewPumpEvent], lastReconciliation: Date?, completion: @escaping (_ error: Error?) -> Void) {
  72. }
  73. func pumpManager(_ pumpManager: PumpManager, didReadReservoirValue units: Double, at date: Date, completion: @escaping (Result<(newValue: ReservoirValue, lastValue: ReservoirValue?, areStoredValuesContinuous: Bool), Error>) -> Void) {
  74. }
  75. func pumpManagerRecommendsLoop(_ pumpManager: PumpManager) {
  76. }
  77. func startDateToFilterNewPumpEvents(for manager: PumpManager) -> Date {
  78. return Date().addingTimeInterval(.hours(-2))
  79. }
  80. }
  81. // MARK: - DeviceManagerDelegate
  82. extension DeviceDataManager: DeviceManagerDelegate {
  83. func scheduleNotification(for manager: DeviceManager,
  84. identifier: String,
  85. content: UNNotificationContent,
  86. trigger: UNNotificationTrigger?) {
  87. let request = UNNotificationRequest(
  88. identifier: identifier,
  89. content: content,
  90. trigger: trigger
  91. )
  92. DispatchQueue.main.async {
  93. UNUserNotificationCenter.current().add(request)
  94. }
  95. }
  96. func clearNotification(for manager: DeviceManager, identifier: String) {
  97. DispatchQueue.main.async {
  98. UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [identifier])
  99. }
  100. }
  101. func removeNotificationRequests(for manager: DeviceManager, identifiers: [String]) {
  102. DispatchQueue.main.async {
  103. UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: identifiers)
  104. }
  105. }
  106. func deviceManager(_ manager: DeviceManager, logEventForDeviceIdentifier deviceIdentifier: String?, type: DeviceLogEntryType, message: String, completion: ((Error?) -> Void)?) {}
  107. }
  108. // MARK: - AlertPresenter
  109. extension DeviceDataManager: AlertPresenter {
  110. func issueAlert(_ alert: Alert) {
  111. }
  112. func retractAlert(identifier: Alert.Identifier) {
  113. }
  114. }