SettingsManager.swift 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import Foundation
  2. import LoopKit
  3. import Swinject
  4. protocol SettingsManager: AnyObject {
  5. var settings: FreeAPSSettings { get set }
  6. var preferences: Preferences { get }
  7. var pumpSettings: PumpSettings { get }
  8. func updateInsulinCurve(_ insulinType: InsulinType?)
  9. }
  10. protocol SettingsObserver {
  11. func settingsDidChange(_: FreeAPSSettings)
  12. }
  13. final class BaseSettingsManager: SettingsManager, Injectable {
  14. @Injected() var broadcaster: Broadcaster!
  15. @Injected() var storage: FileStorage!
  16. @SyncAccess var settings: FreeAPSSettings {
  17. didSet {
  18. if oldValue != settings {
  19. save()
  20. DispatchQueue.main.async {
  21. self.broadcaster.notify(SettingsObserver.self, on: .main) {
  22. $0.settingsDidChange(self.settings)
  23. }
  24. }
  25. }
  26. }
  27. }
  28. init(resolver: Resolver) {
  29. let storage = resolver.resolve(FileStorage.self)!
  30. settings = storage.retrieve(OpenAPS.FreeAPS.settings, as: FreeAPSSettings.self)
  31. ?? FreeAPSSettings(from: OpenAPS.defaults(for: OpenAPS.FreeAPS.settings))
  32. ?? FreeAPSSettings()
  33. injectServices(resolver)
  34. }
  35. private func save() {
  36. storage.save(settings, as: OpenAPS.FreeAPS.settings)
  37. }
  38. var preferences: Preferences {
  39. storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self)
  40. ?? Preferences(from: OpenAPS.defaults(for: OpenAPS.Settings.preferences))
  41. ?? Preferences()
  42. }
  43. var pumpSettings: PumpSettings {
  44. storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self)
  45. ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
  46. ?? PumpSettings(insulinActionCurve: 6, maxBolus: 10, maxBasal: 2)
  47. }
  48. func updateInsulinCurve(_ insulinType: InsulinType?) {
  49. var prefs = preferences
  50. switch insulinType {
  51. case .apidra,
  52. .humalog,
  53. .novolog:
  54. prefs.curve = .rapidActing
  55. case .fiasp,
  56. .lyumjev:
  57. prefs.curve = .ultraRapid
  58. default:
  59. prefs.curve = .rapidActing
  60. }
  61. storage.save(prefs, as: OpenAPS.Settings.preferences)
  62. }
  63. }