BaseAPSManager.swift 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import Combine
  2. import Foundation
  3. import LoopKitUI
  4. import Swinject
  5. final class BaseAPSManager: APSManager, Injectable {
  6. @Injected() private var storage: FileStorage!
  7. @Injected() private var pumpHistory: PumpHistoryStorage!
  8. @Injected() private var keychain: Keychain!
  9. @Injected() private var deviceDataManager: DeviceDataManager!
  10. private var openAPS: OpenAPS!
  11. private var glucoseCancellable: AnyCancellable?
  12. var pumpManager: PumpManagerUI? {
  13. get {
  14. deviceDataManager.pumpManager
  15. }
  16. set {
  17. deviceDataManager.pumpManager = newValue
  18. }
  19. }
  20. var pumpDisplayState: CurrentValueSubject<PumpDisplayState?, Never> { deviceDataManager.pumpDisplayState }
  21. init(resolver: Resolver) {
  22. injectServices(resolver)
  23. openAPS = OpenAPS(storage: storage)
  24. }
  25. func runTest() {
  26. openAPS.test()
  27. }
  28. func makeProfiles() {
  29. openAPS.makeProfile(autotuned: false)
  30. openAPS.makeProfile(autotuned: true)
  31. }
  32. func makeMeal() {
  33. openAPS.makeClock()
  34. openAPS.makeMeal()
  35. }
  36. func fetchLastGlucose() {
  37. if let urlString = keychain.getValue(String.self, forKey: NightscoutConfig.Config.urlKey),
  38. let url = URL(string: urlString)
  39. {
  40. glucoseCancellable = NightscoutAPI(url: url).fetchLast(288)
  41. .sink { _ in }
  42. receiveValue: { glucose in
  43. try? self.storage.append(glucose, to: OpenAPS.Monitor.glucose, uniqBy: \.date)
  44. }
  45. }
  46. }
  47. }