mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-05 20:09:04 +00:00
Await for room sync only for push notification invites (#3307)
This commit is contained in:
@@ -32,7 +32,8 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
|
|||||||
private var userSession: UserSessionProtocol? {
|
private var userSession: UserSessionProtocol? {
|
||||||
didSet {
|
didSet {
|
||||||
userSessionObserver?.cancel()
|
userSessionObserver?.cancel()
|
||||||
if userSession != nil {
|
if let userSession {
|
||||||
|
userSession.clientProxy.roomsToAwait = storedRoomsToAwait
|
||||||
configureElementCallService()
|
configureElementCallService()
|
||||||
configureNotificationManager()
|
configureNotificationManager()
|
||||||
observeUserSessionChanges()
|
observeUserSessionChanges()
|
||||||
@@ -57,6 +58,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
|
|||||||
|
|
||||||
private let appRouteURLParser: AppRouteURLParser
|
private let appRouteURLParser: AppRouteURLParser
|
||||||
@Consumable private var storedAppRoute: AppRoute?
|
@Consumable private var storedAppRoute: AppRoute?
|
||||||
|
private var storedRoomsToAwait: Set<String> = []
|
||||||
|
|
||||||
init(appDelegate: AppDelegate) {
|
init(appDelegate: AppDelegate) {
|
||||||
let appHooks = AppHooks()
|
let appHooks = AppHooks()
|
||||||
@@ -303,6 +305,14 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if content.categoryIdentifier == NotificationConstants.Category.invite {
|
||||||
|
if let userSession {
|
||||||
|
userSession.clientProxy.roomsToAwait.insert(roomID)
|
||||||
|
} else {
|
||||||
|
storedRoomsToAwait.insert(roomID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
handleAppRoute(.room(roomID: roomID, via: []))
|
handleAppRoute(.room(roomID: roomID, via: []))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1970,6 +1970,11 @@ class ClientProxyMock: ClientProxyProtocol {
|
|||||||
var underlyingIgnoredUsersPublisher: CurrentValuePublisher<[String]?, Never>!
|
var underlyingIgnoredUsersPublisher: CurrentValuePublisher<[String]?, Never>!
|
||||||
var pusherNotificationClientIdentifier: String?
|
var pusherNotificationClientIdentifier: String?
|
||||||
var roomSummaryProvider: RoomSummaryProviderProtocol?
|
var roomSummaryProvider: RoomSummaryProviderProtocol?
|
||||||
|
var roomsToAwait: Set<String> {
|
||||||
|
get { return underlyingRoomsToAwait }
|
||||||
|
set(value) { underlyingRoomsToAwait = value }
|
||||||
|
}
|
||||||
|
var underlyingRoomsToAwait: Set<String>!
|
||||||
var alternateRoomSummaryProvider: RoomSummaryProviderProtocol?
|
var alternateRoomSummaryProvider: RoomSummaryProviderProtocol?
|
||||||
var notificationSettings: NotificationSettingsProxyProtocol {
|
var notificationSettings: NotificationSettingsProxyProtocol {
|
||||||
get { return underlyingNotificationSettings }
|
get { return underlyingNotificationSettings }
|
||||||
|
|||||||
@@ -112,6 +112,8 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
verificationStateSubject.asCurrentValuePublisher()
|
verificationStateSubject.asCurrentValuePublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var roomsToAwait: Set<String> = []
|
||||||
|
|
||||||
private let sendQueueStatusSubject = CurrentValueSubject<Bool, Never>(false)
|
private let sendQueueStatusSubject = CurrentValueSubject<Bool, Never>(false)
|
||||||
|
|
||||||
init(client: ClientProtocol,
|
init(client: ClientProtocol,
|
||||||
@@ -431,6 +433,8 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func roomForIdentifier(_ identifier: String) async -> RoomProxyType? {
|
func roomForIdentifier(_ identifier: String) async -> RoomProxyType? {
|
||||||
|
let shouldAwait = roomsToAwait.remove(identifier) != nil
|
||||||
|
|
||||||
// Try fetching the room from the cold cache (if available) first
|
// Try fetching the room from the cold cache (if available) first
|
||||||
if let room = await buildRoomForIdentifier(identifier) {
|
if let room = await buildRoomForIdentifier(identifier) {
|
||||||
return room
|
return room
|
||||||
@@ -446,6 +450,10 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
_ = await roomSummaryProvider.statePublisher.values.first(where: { $0.isLoaded })
|
_ = await roomSummaryProvider.statePublisher.values.first(where: { $0.isLoaded })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if shouldAwait {
|
||||||
|
await waitForRoomToSync(roomID: identifier)
|
||||||
|
}
|
||||||
|
|
||||||
return await buildRoomForIdentifier(identifier)
|
return await buildRoomForIdentifier(identifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -836,9 +844,7 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
MXLog.error("Failed retrieving room: \(roomID), room list service not set up")
|
MXLog.error("Failed retrieving room: \(roomID), room list service not set up")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
await waitForRoomToSync(roomID: roomID)
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
let roomListItem = try roomListService.room(roomId: roomID)
|
let roomListItem = try roomListService.room(roomId: roomID)
|
||||||
|
|
||||||
|
|||||||
@@ -114,6 +114,8 @@ protocol ClientProxyProtocol: AnyObject, MediaLoaderProtocol {
|
|||||||
|
|
||||||
var roomSummaryProvider: RoomSummaryProviderProtocol? { get }
|
var roomSummaryProvider: RoomSummaryProviderProtocol? { get }
|
||||||
|
|
||||||
|
var roomsToAwait: Set<String> { get set }
|
||||||
|
|
||||||
/// Used for listing rooms that shouldn't be affected by the main `roomSummaryProvider` filtering
|
/// Used for listing rooms that shouldn't be affected by the main `roomSummaryProvider` filtering
|
||||||
var alternateRoomSummaryProvider: RoomSummaryProviderProtocol? { get }
|
var alternateRoomSummaryProvider: RoomSummaryProviderProtocol? { get }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user