SettingsManager.swift 1.4 KB

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