PumpSettingsEditorProvider.swift 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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. func settings() -> PumpSettings {
  8. (try? storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self))
  9. ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
  10. ?? PumpSettings(insulinActionCurve: 5, maxBolus: 10, maxBasal: 2)
  11. }
  12. func save(settings: PumpSettings) -> AnyPublisher<Void, Error> {
  13. guard let pump = deviceManager?.pumpManager else {
  14. try? storage.save(settings, as: OpenAPS.Settings.settings)
  15. return Just(()).setFailureType(to: Error.self).eraseToAnyPublisher()
  16. }
  17. // Don't ask why 🤦‍♂️
  18. let sync = DeliveryLimitSettingsTableViewController(style: .grouped)
  19. sync.maximumBasalRatePerHour = Double(settings.maxBasal)
  20. sync.maximumBolus = Double(settings.maxBolus)
  21. return Future { promise in
  22. self.processQueue.async {
  23. pump.syncDeliveryLimitSettings(for: sync) { result in
  24. switch result {
  25. case .success:
  26. try? self.storage.save(settings, as: OpenAPS.Settings.settings)
  27. promise(.success(()))
  28. case let .failure(error):
  29. promise(.failure(error))
  30. }
  31. }
  32. }
  33. }.eraseToAnyPublisher()
  34. }
  35. }
  36. }