PumpSettingsEditorProvider.swift 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import Combine
  2. import LoopKit
  3. import LoopKitUI
  4. extension PumpSettingsEditor {
  5. final class Provider: BaseProvider, PumpSettingsEditorProvider {
  6. private let processQueue = DispatchQueue(label: "PumpSettingsEditorProvider.processQueue")
  7. @Injected() var deviceManager: DeviceDataManager!
  8. @Injected() var storage: FileStorage!
  9. func settings() -> PumpSettings {
  10. (try? storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self))
  11. ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
  12. ?? PumpSettings(insulinActionCurve: 5, maxBolus: 10, maxBasal: 2)
  13. }
  14. func save(settings: PumpSettings) -> AnyPublisher<Void, Error> {
  15. guard let pump = deviceManager?.pumpManager else {
  16. try? storage.save(settings, as: OpenAPS.Settings.settings)
  17. return Just(()).setFailureType(to: Error.self).eraseToAnyPublisher()
  18. }
  19. // Don't ask why 🤦‍♂️
  20. let sync = DeliveryLimitSettingsTableViewController(style: .grouped)
  21. sync.maximumBasalRatePerHour = Double(settings.maxBasal)
  22. sync.maximumBolus = Double(settings.maxBolus)
  23. return Future { promise in
  24. self.processQueue.async {
  25. pump.syncDeliveryLimitSettings(for: sync) { result in
  26. switch result {
  27. case .success:
  28. try? self.storage.save(settings, as: OpenAPS.Settings.settings)
  29. promise(.success(()))
  30. case let .failure(error):
  31. promise(.failure(error))
  32. }
  33. }
  34. }
  35. }.eraseToAnyPublisher()
  36. }
  37. }
  38. }