BasalProfileEditorProvider.swift 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import Combine
  2. import Foundation
  3. import LoopKit
  4. extension BasalProfileEditor {
  5. final class Provider: BaseProvider, BasalProfileEditorProvider {
  6. private let processQueue = DispatchQueue(label: "BasalProfileEditorProvider.processQueue")
  7. var profile: [BasalProfileEntry] {
  8. storage.retrieve(OpenAPS.Settings.basalProfile, as: [BasalProfileEntry].self)
  9. ?? [BasalProfileEntry](from: OpenAPS.defaults(for: OpenAPS.Settings.basalProfile))
  10. ?? []
  11. }
  12. var supportedBasalRates: [Double]? {
  13. deviceManager.pumpManager?.supportedBasalRates
  14. }
  15. func saveProfile(_ profile: [BasalProfileEntry]) -> AnyPublisher<Void, Error> {
  16. guard let pump = deviceManager?.pumpManager else {
  17. storage.save(profile, as: OpenAPS.Settings.basalProfile)
  18. return Just(()).setFailureType(to: Error.self).eraseToAnyPublisher()
  19. }
  20. let syncValues = profile.map {
  21. RepeatingScheduleValue(startTime: TimeInterval($0.minutes * 60), value: Double($0.rate))
  22. }
  23. return Future { promise in
  24. pump.syncBasalRateSchedule(items: syncValues) { result in
  25. switch result {
  26. case .success:
  27. self.storage.save(profile, as: OpenAPS.Settings.basalProfile)
  28. promise(.success(()))
  29. case let .failure(error):
  30. promise(.failure(error))
  31. }
  32. }
  33. }.eraseToAnyPublisher()
  34. }
  35. }
  36. }