Skip to content

Commit

Permalink
Await for room sync only for push notification invites (#3307)
Browse files Browse the repository at this point in the history
  • Loading branch information
Velin92 authored Sep 19, 2024
1 parent 5d678ab commit 943f33b
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 4 deletions.
12 changes: 11 additions & 1 deletion ElementX/Sources/Application/AppCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
private var userSession: UserSessionProtocol? {
didSet {
userSessionObserver?.cancel()
if userSession != nil {
if let userSession {
userSession.clientProxy.roomsToAwait = storedRoomsToAwait
configureElementCallService()
configureNotificationManager()
observeUserSessionChanges()
Expand All @@ -57,6 +58,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg

private let appRouteURLParser: AppRouteURLParser
@Consumable private var storedAppRoute: AppRoute?
private var storedRoomsToAwait: Set<String> = []

init(appDelegate: AppDelegate) {
let appHooks = AppHooks()
Expand Down Expand Up @@ -303,6 +305,14 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
return
}

if content.categoryIdentifier == NotificationConstants.Category.invite {
if let userSession {
userSession.clientProxy.roomsToAwait.insert(roomID)
} else {
storedRoomsToAwait.insert(roomID)
}
}

handleAppRoute(.room(roomID: roomID, via: []))
}

Expand Down
5 changes: 5 additions & 0 deletions ElementX/Sources/Mocks/Generated/GeneratedMocks.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1970,6 +1970,11 @@ class ClientProxyMock: ClientProxyProtocol {
var underlyingIgnoredUsersPublisher: CurrentValuePublisher<[String]?, Never>!
var pusherNotificationClientIdentifier: String?
var roomSummaryProvider: RoomSummaryProviderProtocol?
var roomsToAwait: Set<String> {
get { return underlyingRoomsToAwait }
set(value) { underlyingRoomsToAwait = value }
}
var underlyingRoomsToAwait: Set<String>!
var alternateRoomSummaryProvider: RoomSummaryProviderProtocol?
var notificationSettings: NotificationSettingsProxyProtocol {
get { return underlyingNotificationSettings }
Expand Down
12 changes: 9 additions & 3 deletions ElementX/Sources/Services/Client/ClientProxy.swift
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ class ClientProxy: ClientProxyProtocol {
verificationStateSubject.asCurrentValuePublisher()
}

var roomsToAwait: Set<String> = []

private let sendQueueStatusSubject = CurrentValueSubject<Bool, Never>(false)

init(client: ClientProtocol,
Expand Down Expand Up @@ -431,6 +433,8 @@ class ClientProxy: ClientProxyProtocol {
}

func roomForIdentifier(_ identifier: String) async -> RoomProxyType? {
let shouldAwait = roomsToAwait.remove(identifier) != nil

// Try fetching the room from the cold cache (if available) first
if let room = await buildRoomForIdentifier(identifier) {
return room
Expand All @@ -446,6 +450,10 @@ class ClientProxy: ClientProxyProtocol {
_ = await roomSummaryProvider.statePublisher.values.first(where: { $0.isLoaded })
}

if shouldAwait {
await waitForRoomToSync(roomID: identifier)
}

return await buildRoomForIdentifier(identifier)
}

Expand Down Expand Up @@ -836,9 +844,7 @@ class ClientProxy: ClientProxyProtocol {
MXLog.error("Failed retrieving room: \(roomID), room list service not set up")
return nil
}

await waitForRoomToSync(roomID: roomID)


do {
let roomListItem = try roomListService.room(roomId: roomID)

Expand Down
2 changes: 2 additions & 0 deletions ElementX/Sources/Services/Client/ClientProxyProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ protocol ClientProxyProtocol: AnyObject, MediaLoaderProtocol {

var roomSummaryProvider: RoomSummaryProviderProtocol? { get }

var roomsToAwait: Set<String> { get set }

/// Used for listing rooms that shouldn't be affected by the main `roomSummaryProvider` filtering
var alternateRoomSummaryProvider: RoomSummaryProviderProtocol? { get }

Expand Down

0 comments on commit 943f33b

Please sign in to comment.