mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Added user display names and switched to using an avatar url directly in the homeScreen viewModel for the current user.
This commit is contained in:
@@ -12,6 +12,7 @@ class MemberDetailsProvider: MemberDetailsProviderProtocol {
|
||||
private let roomProxy: RoomProxyProtocol?
|
||||
private let processingQueue = DispatchQueue(label: "MemberDetailsProviderProcessingQueue")
|
||||
private var memberAvatars = [String: String]()
|
||||
private var memberDisplayNames = [String: String]()
|
||||
|
||||
init(roomProxy: RoomProxyProtocol) {
|
||||
self.roomProxy = roomProxy
|
||||
@@ -50,4 +51,38 @@ class MemberDetailsProvider: MemberDetailsProviderProtocol {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func displayNameForUserId(_ userId: String) -> String? {
|
||||
self.memberDisplayNames[userId]
|
||||
}
|
||||
|
||||
func displayNameForUserId(_ userId: String, completion: @escaping (Result<String?, MemberDetailsProviderError>) -> Void) {
|
||||
guard let roomProxy = roomProxy else {
|
||||
return
|
||||
}
|
||||
|
||||
if let avatarURL = displayNameForUserId(userId) {
|
||||
completion(.success(avatarURL))
|
||||
}
|
||||
|
||||
processingQueue.async {
|
||||
roomProxy.displayNameForUserId(userId, completion: { [weak self] result in
|
||||
guard let self = self else {
|
||||
return
|
||||
}
|
||||
|
||||
switch result {
|
||||
case .success(let displayName):
|
||||
DispatchQueue.main.async {
|
||||
self.memberDisplayNames[userId] = displayName
|
||||
completion(.success(displayName))
|
||||
}
|
||||
case .failure:
|
||||
DispatchQueue.main.async {
|
||||
completion(.failure(.failedRetrievingUserDisplayName))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,9 +11,13 @@ import Foundation
|
||||
enum MemberDetailsProviderError: Error {
|
||||
case invalidRoomProxy
|
||||
case failedRetrievingUserAvatarURL
|
||||
case failedRetrievingUserDisplayName
|
||||
}
|
||||
|
||||
protocol MemberDetailsProviderProtocol {
|
||||
func avatarURLForUserId(_ userId: String) -> String?
|
||||
func avatarURLForUserId(_ userId: String, completion: @escaping (Result<String?, MemberDetailsProviderError>) -> Void)
|
||||
|
||||
func displayNameForUserId(_ userId: String) -> String?
|
||||
func displayNameForUserId(_ userId: String, completion: @escaping (Result<String?, MemberDetailsProviderError>) -> Void)
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ struct MockRoomProxy: RoomProxyProtocol {
|
||||
|
||||
var callbacks = PassthroughSubject<RoomProxyCallback, Never>()
|
||||
|
||||
func loadDisplayName(_ completion: @escaping (Result<String, RoomProxyError>) -> Void) {
|
||||
func displayName(_ completion: @escaping (Result<String, RoomProxyError>) -> Void) {
|
||||
completion(.success(displayName))
|
||||
}
|
||||
|
||||
@@ -41,4 +41,8 @@ struct MockRoomProxy: RoomProxyProtocol {
|
||||
func avatarURLForUserId(_ userId: String, completion: @escaping (Result<String?, RoomProxyError>) -> Void) {
|
||||
|
||||
}
|
||||
|
||||
func displayNameForUserId(_ userId: String, completion: @escaping (Result<String?, RoomProxyError>) -> Void) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,13 +100,29 @@ class RoomProxy: RoomProxyProtocol, Equatable {
|
||||
}
|
||||
} catch {
|
||||
DispatchQueue.main.async {
|
||||
completion(.failure(RoomProxyError.failedRetrievingDisplayName))
|
||||
completion(.failure(RoomProxyError.failedRetrievingMemberAvatarURL))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func loadDisplayName(_ completion: @escaping (Result<String, RoomProxyError>) -> Void) {
|
||||
func displayNameForUserId(_ userId: String, completion: @escaping (Result<String?, RoomProxyError>) -> Void) {
|
||||
processingQueue.async {
|
||||
do {
|
||||
let displayName = try self.room.memberDisplayName(userId: userId)
|
||||
|
||||
DispatchQueue.main.async {
|
||||
completion(.success(displayName))
|
||||
}
|
||||
} catch {
|
||||
DispatchQueue.main.async {
|
||||
completion(.failure(RoomProxyError.failedRetrievingMemberDisplayName))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func displayName(_ completion: @escaping (Result<String, RoomProxyError>) -> Void) {
|
||||
processingQueue.async {
|
||||
do {
|
||||
let displayName = try self.room.displayName()
|
||||
|
||||
@@ -12,6 +12,8 @@ enum RoomProxyError: Error {
|
||||
case failedRetrievingDisplayName
|
||||
case failedRetrievingAvatar
|
||||
case backwardStreamNotAvailable
|
||||
case failedRetrievingMemberAvatarURL
|
||||
case failedRetrievingMemberDisplayName
|
||||
}
|
||||
|
||||
enum RoomProxyCallback {
|
||||
@@ -33,9 +35,11 @@ protocol RoomProxyProtocol {
|
||||
|
||||
var avatarURL: String? { get }
|
||||
|
||||
func displayName(_ completion: @escaping (Result<String, RoomProxyError>) -> Void)
|
||||
|
||||
func avatarURLForUserId(_ userId: String, completion: @escaping (Result<String?, RoomProxyError>) -> Void)
|
||||
|
||||
func loadDisplayName(_ completion: @escaping (Result<String, RoomProxyError>) -> Void)
|
||||
func displayNameForUserId(_ userId: String, completion: @escaping (Result<String?, RoomProxyError>) -> Void)
|
||||
|
||||
func paginateBackwards(count: UInt, callback: ((Result<[RoomMessageProtocol], RoomProxyError>) -> Void)?)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user