element-hq/element-x-ios/issues/2670 - Show invites as part of the room list

This commit is contained in:
Stefan Ceriu
2024-04-08 10:26:33 +03:00
committed by Stefan Ceriu
parent d34ec30ca6
commit 064626fbbe
46 changed files with 541 additions and 118 deletions
@@ -64,9 +64,7 @@ class AuthenticationServiceProxy: AuthenticationServiceProxyProtocol {
do {
var homeserver = LoginHomeserver(address: homeserverAddress, loginMode: .unknown)
try await Task.dispatch(on: .global()) {
try self.authenticationService.configureHomeserver(serverNameOrHomeserverUrl: homeserverAddress)
}
try await authenticationService.configureHomeserver(serverNameOrHomeserverUrl: homeserverAddress)
if let details = authenticationService.homeserverDetails() {
if details.supportsOidcLogin() {
@@ -94,9 +92,7 @@ class AuthenticationServiceProxy: AuthenticationServiceProxyProtocol {
func urlForOIDCLogin() async -> Result<OIDCAuthenticationDataProxy, AuthenticationServiceError> {
do {
let oidcData = try await Task.dispatch(on: .global()) {
try self.authenticationService.urlForOidcLogin()
}
let oidcData = try await authenticationService.urlForOidcLogin()
return .success(OIDCAuthenticationDataProxy(underlyingData: oidcData))
} catch {
MXLog.error("Failed to get URL for OIDC login: \(error)")
@@ -106,9 +102,7 @@ class AuthenticationServiceProxy: AuthenticationServiceProxyProtocol {
func loginWithOIDCCallback(_ callbackURL: URL, data: OIDCAuthenticationDataProxy) async -> Result<UserSessionProtocol, AuthenticationServiceError> {
do {
let client = try await Task.dispatch(on: .global()) {
try self.authenticationService.loginWithOidcCallback(authenticationData: data.underlyingData, callbackUrl: callbackURL.absoluteString)
}
let client = try await authenticationService.loginWithOidcCallback(authenticationData: data.underlyingData, callbackUrl: callbackURL.absoluteString)
return await userSession(for: client)
} catch AuthenticationError.OidcCancelled {
return .failure(.oidcError(.userCancellation))
@@ -120,12 +114,10 @@ class AuthenticationServiceProxy: AuthenticationServiceProxyProtocol {
func login(username: String, password: String, initialDeviceName: String?, deviceID: String?) async -> Result<UserSessionProtocol, AuthenticationServiceError> {
do {
let client = try await Task.dispatch(on: .global()) {
try self.authenticationService.login(username: username,
password: password,
initialDeviceName: initialDeviceName,
deviceId: deviceID)
}
let client = try await authenticationService.login(username: username,
password: password,
initialDeviceName: initialDeviceName,
deviceId: deviceID)
let refreshToken = try? await Task.dispatch(on: .global()) {
try client.session().refreshToken
@@ -676,6 +676,7 @@ class ClientProxy: ClientProxyProtocol {
.syncService()
.withCrossProcessLock(appIdentifier: "MainApp")
.withUtdHook(delegate: ClientDecryptionErrorDelegate(actionsSubject: actionsSubject))
.withUnifiedInvitesInRoomList(withUnifiedInvites: appSettings.roomListInvitesEnabled)
.finish()
let roomListService = syncService.roomListService()
@@ -19,6 +19,10 @@ import MatrixRustSDK
struct RoomSummaryDetails {
let id: String
let isInvite: Bool
let inviter: RoomMemberProxyProtocol?
let name: String
let isDirect: Bool
let avatarURL: URL?
@@ -29,7 +33,7 @@ struct RoomSummaryDetails {
let unreadNotificationsCount: UInt
let notificationMode: RoomNotificationModeProxy?
let canonicalAlias: String?
let inviter: RoomMemberProxyProtocol?
let hasOngoingCall: Bool
let isMarkedUnread: Bool
@@ -70,6 +74,7 @@ extension RoomSummaryDetails {
inviter = nil
hasOngoingCall = false
isInvite = false
isMarkedUnread = false
isFavourite = false
}
@@ -240,6 +240,8 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
let notificationMode = roomInfo.userDefinedNotificationMode.flatMap { RoomNotificationModeProxy.from(roomNotificationMode: $0) }
let details = RoomSummaryDetails(id: roomInfo.id,
isInvite: roomInfo.membership == .invited,
inviter: inviterProxy,
name: roomInfo.name ?? roomInfo.id,
isDirect: roomInfo.isDirect,
avatarURL: roomInfo.avatarUrl.flatMap(URL.init(string:)),
@@ -250,7 +252,6 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
unreadNotificationsCount: UInt(roomInfo.numUnreadNotifications),
notificationMode: notificationMode,
canonicalAlias: roomInfo.canonicalAlias,
inviter: inviterProxy,
hasOngoingCall: roomInfo.hasRoomCall,
isMarkedUnread: roomInfo.isMarkedUnread,
isFavourite: roomInfo.isFavourite)
@@ -135,11 +135,12 @@ class UserSessionStore: UserSessionStoreProtocol {
let completeBuilder = builder
do {
let client: Client = try await Task.dispatch(on: .global()) {
let client = try completeBuilder.build()
let client = try await completeBuilder.build()
try await Task.dispatch(on: .global()) {
try client.restoreSession(session: credentials.restorationToken.session)
return client
}
return await .success(setupProxyForClient(client))
} catch {
MXLog.error("Failed restoring login with error: \(error)")