SettingsManager.swift 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import Foundation
  2. import Swinject
  3. protocol SettingsManager: AnyObject {
  4. var settings: FreeAPSSettings { get set }
  5. var preferences: Preferences { get }
  6. var pumpSettings: PumpSettings { get }
  7. }
  8. protocol SettingsObserver {
  9. func settingsDidChange(_: FreeAPSSettings)
  10. }
  11. final class BaseSettingsManager: SettingsManager, Injectable {
  12. @Injected() var broadcaster: Broadcaster!
  13. @Injected() var storage: FileStorage!
  14. @SyncAccess var settings: FreeAPSSettings {
  15. didSet {
  16. if oldValue != settings {
  17. save()
  18. DispatchQueue.main.async {
  19. self.broadcaster.notify(SettingsObserver.self, on: .main) {
  20. $0.settingsDidChange(self.settings)
  21. }
  22. }
  23. }
  24. }
  25. }
  26. init(resolver: Resolver) {
  27. let storage = resolver.resolve(FileStorage.self)!
  28. settings = storage.retrieve(OpenAPS.FreeAPS.settings, as: FreeAPSSettings.self)
  29. ?? FreeAPSSettings(from: OpenAPS.defaults(for: OpenAPS.FreeAPS.settings))
  30. ?? FreeAPSSettings()
  31. injectServices(resolver)
  32. }
  33. private func save() {
  34. storage.save(settings, as: OpenAPS.FreeAPS.settings)
  35. }
  36. var preferences: Preferences {
  37. storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self)
  38. ?? Preferences(from: OpenAPS.defaults(for: OpenAPS.Settings.preferences))
  39. ?? Preferences()
  40. }
  41. var pumpSettings: PumpSettings {
  42. storage.retrieve(OpenAPS.Settings.settings, as: PumpSettings.self)
  43. ?? PumpSettings(from: OpenAPS.defaults(for: OpenAPS.Settings.settings))
  44. ?? PumpSettings(insulinActionCurve: 5, maxBolus: 10, maxBasal: 2)
  45. }
  46. }