diff --git a/Shared/Services/IdentityService.swift b/Shared/Services/IdentityService.swift index 069924e..eff9c5a 100644 --- a/Shared/Services/IdentityService.swift +++ b/Shared/Services/IdentityService.swift @@ -85,6 +85,11 @@ extension IdentityService { func updatePreferences(_ preferences: Identity.Preferences) -> AnyPublisher { identityDatabase.updatePreferences(preferences, forIdentityID: identity.id) + .zip(Just(self).first().setFailureType(to: Error.self)) + .filter { $1.identity.preferences.useServerPostingReadingPreferences } + .map { _ in () } + .flatMap(refreshServerPreferences) + .eraseToAnyPublisher() } func createPushSubscription(deviceToken: String, alerts: PushSubscription.Alerts) -> AnyPublisher { diff --git a/Shared/View Models/PostingReadingPreferencesViewModel.swift b/Shared/View Models/PostingReadingPreferencesViewModel.swift index 5ba0f61..489522f 100644 --- a/Shared/View Models/PostingReadingPreferencesViewModel.swift +++ b/Shared/View Models/PostingReadingPreferencesViewModel.swift @@ -4,19 +4,8 @@ import Foundation import Combine class PostingReadingPreferencesViewModel: ObservableObject { - @Published var preferences: Identity.Preferences { - didSet { - if preferences.useServerPostingReadingPreferences { - identityService.refreshServerPreferences() - .assignErrorsToAlertItem(to: \.alertItem, on: self) - .sink(receiveValue: {}) - .store(in: &cancellables) - } - } - } - + @Published var preferences: Identity.Preferences @Published var alertItem: AlertItem? - let handle: String private let identityService: IdentityService private var cancellables = Set() @@ -24,17 +13,18 @@ class PostingReadingPreferencesViewModel: ObservableObject { init(identityService: IdentityService) { self.identityService = identityService preferences = identityService.identity.preferences - handle = identityService.identity.handle - identityService.$identity.map(\.preferences) + identityService.$identity + .map(\.preferences) .dropFirst() .removeDuplicates() .assign(to: &$preferences) - $preferences.dropFirst() + $preferences + .dropFirst() .flatMap(identityService.updatePreferences) .assignErrorsToAlertItem(to: \.alertItem, on: self) - .sink(receiveValue: {}) + .sink {} .store(in: &cancellables) } }