From c64fa26b09faef47b884a7fae6ae03e8e4759ce5 Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Fri, 14 Aug 2020 17:14:21 -0700 Subject: [PATCH] Refactoring --- Shared/Services/IdentityService.swift | 5 +++++ .../PostingReadingPreferencesViewModel.swift | 22 +++++-------------- 2 files changed, 11 insertions(+), 16 deletions(-) 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) } }