SettingsManager.swift 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import Foundation
  2. import Swinject
  3. protocol SettingsManager {
  4. var settings: FreeAPSSettings { get set }
  5. }
  6. protocol SettingsObserver {
  7. func settingsDidChange(_: FreeAPSSettings)
  8. }
  9. final class BaseSettingsManager: SettingsManager, Injectable {
  10. @Injected() var broadcaster: Broadcaster!
  11. var settings: FreeAPSSettings {
  12. didSet {
  13. save()
  14. DispatchQueue.main.async {
  15. self.broadcaster.notify(SettingsObserver.self, on: .main) {
  16. $0.settingsDidChange(self.settings)
  17. }
  18. }
  19. }
  20. }
  21. @Injected() var storage: FileStorage!
  22. init(resolver: Resolver) {
  23. let storage = resolver.resolve(FileStorage.self)!
  24. settings = (try? storage.retrieve(OpenAPS.FreeAPS.settings, as: FreeAPSSettings.self))
  25. ?? FreeAPSSettings(from: OpenAPS.defaults(for: OpenAPS.FreeAPS.settings))
  26. ?? FreeAPSSettings(units: .mmolL, closedLoop: false)
  27. injectServices(resolver)
  28. }
  29. private func save() {
  30. try? storage.save(settings, as: OpenAPS.FreeAPS.settings)
  31. }
  32. }