SettingsManager.swift 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import Foundation
  2. import Swinject
  3. protocol SettingsManager {
  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. var settings: FreeAPSSettings {
  13. didSet {
  14. save()
  15. DispatchQueue.main.async {
  16. self.broadcaster.notify(SettingsObserver.self, on: .main) {
  17. $0.settingsDidChange(self.settings)
  18. }
  19. }
  20. }
  21. }
  22. @Injected() var storage: FileStorage!
  23. init(resolver: Resolver) {
  24. let storage = resolver.resolve(FileStorage.self)!
  25. settings = (try? storage.retrieve(OpenAPS.FreeAPS.settings, as: FreeAPSSettings.self))
  26. ?? FreeAPSSettings(from: OpenAPS.defaults(for: OpenAPS.FreeAPS.settings))
  27. ?? FreeAPSSettings(units: .mmolL, closedLoop: false, allowAnnouncements: false)
  28. injectServices(resolver)
  29. }
  30. private func save() {
  31. try? storage.save(settings, as: OpenAPS.FreeAPS.settings)
  32. }
  33. var preferences: Preferences {
  34. (try? storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self))
  35. ?? Preferences(from: OpenAPS.defaults(for: OpenAPS.Settings.preferences))
  36. ?? Preferences()
  37. }
  38. }