Fetching the room display names in background to avoid blocking the main thread.

This commit is contained in:
Stefan Ceriu
2022-02-24 17:45:02 +02:00
parent 97cb8adcee
commit e50f0257d2
6 changed files with 55 additions and 7 deletions
@@ -23,6 +23,10 @@ struct MockRoomModel: RoomModelProtocol {
let isPublic = Bool.random()
let isEncrypted = Bool.random()
func loadDisplayName(_ completion: @escaping (Result<String, Error>) -> Void) {
completion(.success(displayName))
}
func loadAvatar(_ completion: (Result<UIImage?, Error>) -> Void) {
completion(.success(UIImage(systemName: "wand.and.stars")))
}
@@ -10,6 +10,7 @@ import UIKit
import MatrixRustSDK
enum RoomModelError: Error {
case failedRetrievingDisplayName
case failedRetrievingAvatar
}
@@ -74,6 +75,22 @@ struct RoomModel: RoomModelProtocol {
return URL(string: urlString)
}
func loadDisplayName(_ completion: @escaping (Result<String, Error>) -> Void) {
DispatchQueue.global(qos: .background).async {
do {
let displayName = try room.displayName()
DispatchQueue.main.async {
completion(.success(displayName))
}
} catch {
DispatchQueue.main.async {
completion(.failure(RoomModelError.failedRetrievingDisplayName))
}
}
}
}
func loadAvatar(_ completion: @escaping (Result<UIImage?, Error>) -> Void) {
DispatchQueue.global(qos: .background).async {
do {
@@ -14,7 +14,6 @@ protocol RoomModelProtocol {
var isSpace: Bool { get }
var isEncrypted: Bool { get }
var displayName: String { get }
var name: String? { get }
var topic: String? { get }
@@ -22,5 +21,6 @@ protocol RoomModelProtocol {
var avatarURL: URL? { get }
func loadDisplayName(_ completion: @escaping (Result<String, Error>) -> Void)
func loadAvatar(_ completion: @escaping (Result<UIImage?, Error>) -> Void)
}