mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-30 21:26:57 +02:00
Merge pull request #7335 from vector-im/alfogrillo/automatic_poll_rules_sync
Automatic poll rules sync (PSG-1135)
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import Combine
|
||||
import Foundation
|
||||
import Intents
|
||||
import MatrixSDK
|
||||
@@ -60,6 +61,8 @@ final class AppCoordinator: NSObject, AppCoordinatorType {
|
||||
}
|
||||
|
||||
private var currentSpaceId: String?
|
||||
private var cancellables: Set<AnyCancellable> = .init()
|
||||
private var pushRulesUpdater: PushRulesUpdater?
|
||||
|
||||
// MARK: Public
|
||||
|
||||
@@ -81,9 +84,10 @@ final class AppCoordinator: NSObject, AppCoordinatorType {
|
||||
// MARK: - Public methods
|
||||
|
||||
func start() {
|
||||
self.setupLogger()
|
||||
self.setupTheme()
|
||||
self.excludeAllItemsFromBackup()
|
||||
setupLogger()
|
||||
setupTheme()
|
||||
excludeAllItemsFromBackup()
|
||||
setupPushRulesSessionEvents()
|
||||
|
||||
// Setup navigation router store
|
||||
_ = NavigationRouterStore.shared
|
||||
@@ -259,6 +263,47 @@ final class AppCoordinator: NSObject, AppCoordinatorType {
|
||||
// Reload split view with selected space id
|
||||
self.splitViewCoordinator?.start(with: spaceId)
|
||||
}
|
||||
|
||||
private func setupPushRulesSessionEvents() {
|
||||
let sessionReady = NotificationCenter.default.publisher(for: .mxSessionStateDidChange)
|
||||
.compactMap { $0.object as? MXSession }
|
||||
.filter { $0.state == .running }
|
||||
.removeDuplicates { session1, session2 in
|
||||
session1 == session2
|
||||
}
|
||||
|
||||
sessionReady
|
||||
.sink { [weak self] session in
|
||||
self?.setupPushRulesUpdater(session: session)
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
|
||||
let sessionClosed = NotificationCenter.default.publisher(for: .mxSessionStateDidChange)
|
||||
.compactMap { $0.object as? MXSession }
|
||||
.filter { $0.state == .closed }
|
||||
|
||||
sessionClosed
|
||||
.sink { [weak self] _ in
|
||||
self?.pushRulesUpdater = nil
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
private func setupPushRulesUpdater(session: MXSession) {
|
||||
pushRulesUpdater = .init(notificationSettingsService: MXNotificationSettingsService(session: session))
|
||||
|
||||
let applicationDidBecomeActive = NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification).eraseOutput()
|
||||
let needsCheckPublisher = applicationDidBecomeActive.merge(with: Just(())).eraseToAnyPublisher()
|
||||
|
||||
needsCheckPublisher
|
||||
.sink { _ in
|
||||
Task { @MainActor [weak self] in
|
||||
await self?.pushRulesUpdater?.syncRulesIfNeeded()
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - LegacyAppDelegateDelegate
|
||||
|
||||
Reference in New Issue
Block a user