SettingsManager.swift 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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: 5, 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 .afrezza,
  56. .fiasp,
  57. .lyumjev:
  58. prefs.curve = .ultraRapid
  59. default:
  60. prefs.curve = .rapidActing
  61. }
  62. storage.save(prefs, as: OpenAPS.Settings.preferences)
  63. }
  64. }