SettingsViewModel.swift 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import SwiftUI
  2. extension Settings {
  3. class ViewModel<Provider>: BaseViewModel<Provider>, ObservableObject where Provider: SettingsProvider {
  4. @Injected() private var settingsManager: SettingsManager!
  5. @Injected() private var broadcaster: Broadcaster!
  6. @Injected() private var fileManager: FileManager!
  7. @Injected() private var authorizationManager: AuthorizationManager!
  8. @Published var closedLoop = false
  9. @Published var debugOptions = false
  10. private(set) var buildNumber = ""
  11. override func subscribe() {
  12. closedLoop = settingsManager.settings.closedLoop
  13. debugOptions = settingsManager.settings.debugOptions ?? false
  14. $closedLoop
  15. .removeDuplicates()
  16. .sink { [weak self] value in
  17. self?.settingsManager.settings.closedLoop = value
  18. }.store(in: &lifetime)
  19. broadcaster.register(SettingsObserver.self, observer: self)
  20. buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "Unknown"
  21. }
  22. func logItems() -> [URL] {
  23. var items: [URL] = []
  24. if fileManager.fileExists(atPath: SimpleLogReporter.logFile) {
  25. items.append(URL(fileURLWithPath: SimpleLogReporter.logFile))
  26. }
  27. if fileManager.fileExists(atPath: SimpleLogReporter.logFilePrev) {
  28. items.append(URL(fileURLWithPath: SimpleLogReporter.logFilePrev))
  29. }
  30. return items
  31. }
  32. func logout() {
  33. authorizationManager.logout()
  34. showModal(for: nil)
  35. }
  36. }
  37. }
  38. extension Settings.ViewModel: SettingsObserver {
  39. func settingsDidChange(_ settings: FreeAPSSettings) {
  40. closedLoop = settings.closedLoop
  41. debugOptions = settings.debugOptions ?? false
  42. }
  43. }