ContactSettingsViewModel.swift 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // LoopFollow
  2. // ContactSettingsViewModel.swift
  3. import Combine
  4. import Foundation
  5. extension Bundle {
  6. var displayName: String {
  7. return object(forInfoDictionaryKey: "CFBundleDisplayName") as? String ?? "LoopFollow"
  8. }
  9. }
  10. class ContactSettingsViewModel: ObservableObject {
  11. var contactName: String {
  12. "\(Bundle.main.displayName) - BG"
  13. }
  14. @Published var contactEnabled: Bool {
  15. didSet {
  16. Storage.shared.contactEnabled.value = contactEnabled
  17. triggerRefresh()
  18. }
  19. }
  20. @Published var contactTrend: ContactIncludeOption {
  21. didSet {
  22. if contactTrend == .include && contactDelta == .include {
  23. contactDelta = .off
  24. }
  25. Storage.shared.contactTrend.value = contactTrend
  26. triggerRefresh()
  27. }
  28. }
  29. @Published var contactDelta: ContactIncludeOption {
  30. didSet {
  31. if contactDelta == .include && contactTrend == .include {
  32. contactTrend = .off
  33. }
  34. Storage.shared.contactDelta.value = contactDelta
  35. triggerRefresh()
  36. }
  37. }
  38. @Published var contactBackgroundColor: String {
  39. didSet {
  40. Storage.shared.contactBackgroundColor.value = contactBackgroundColor
  41. triggerRefresh()
  42. }
  43. }
  44. @Published var contactTextColor: String {
  45. didSet {
  46. Storage.shared.contactTextColor.value = contactTextColor
  47. triggerRefresh()
  48. }
  49. }
  50. private let storage = ObservableUserDefaults.shared
  51. private var cancellables = Set<AnyCancellable>()
  52. init() {
  53. contactEnabled = Storage.shared.contactEnabled.value
  54. contactTrend = Storage.shared.contactTrend.value
  55. contactDelta = Storage.shared.contactDelta.value
  56. contactBackgroundColor = Storage.shared.contactBackgroundColor.value
  57. contactTextColor = Storage.shared.contactTextColor.value
  58. Storage.shared.contactEnabled.$value
  59. .assign(to: &$contactEnabled)
  60. Storage.shared.contactTrend.$value
  61. .assign(to: &$contactTrend)
  62. Storage.shared.contactDelta.$value
  63. .assign(to: &$contactDelta)
  64. Storage.shared.contactBackgroundColor.$value
  65. .assign(to: &$contactBackgroundColor)
  66. Storage.shared.contactTextColor.$value
  67. .assign(to: &$contactTextColor)
  68. }
  69. private func triggerRefresh() {
  70. NotificationCenter.default.post(name: NSNotification.Name("refresh"), object: nil)
  71. }
  72. }