ContactSettingsViewModel.swift 2.5 KB

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