Loading images and user avatars.

This commit is contained in:
Stefan Ceriu
2022-03-17 18:09:29 +02:00
parent 30378ae6a9
commit 120bcaf012
31 changed files with 542 additions and 207 deletions
@@ -31,4 +31,8 @@ struct ImageRoomMessage: RoomMessageProtocol {
var originServerTs: Date {
Date(timeIntervalSince1970: TimeInterval(message.baseMessage().originServerTs()))
}
var url: String? {
message.url()
}
}
@@ -8,7 +8,6 @@
import Foundation
import UIKit
import Combine
import MatrixRustSDK
struct MockRoomProxy: RoomProxyProtocol {
let id = UUID().uuidString
@@ -18,7 +17,7 @@ struct MockRoomProxy: RoomProxyProtocol {
let topic: String? = nil
let lastMessage: String? = "Last message"
let avatarURL: URL? = nil
let avatarURL: String? = nil
let isDirect = Bool.random()
let isSpace = Bool.random()
@@ -27,19 +26,19 @@ struct MockRoomProxy: RoomProxyProtocol {
var callbacks = PassthroughSubject<RoomProxyCallback, Never>()
func loadDisplayName(_ completion: @escaping (Result<String, Error>) -> Void) {
func loadDisplayName(_ completion: @escaping (Result<String, RoomProxyError>) -> Void) {
completion(.success(displayName))
}
func loadAvatar(_ completion: (Result<UIImage?, Error>) -> Void) {
completion(.success(UIImage(systemName: "wand.and.stars")))
}
func startLiveEventListener() {
}
func paginateBackwards(count: UInt, callback: ((Result<[RoomMessageProtocol], Error>) -> Void)?) {
func paginateBackwards(count: UInt, callback: ((Result<[RoomMessageProtocol], RoomProxyError>) -> Void)?) {
}
func avatarURLForUserId(_ userId: String, completion: @escaping (Result<String?, RoomProxyError>) -> Void) {
}
}
+12 -22
View File
@@ -11,12 +11,6 @@ import Combine
import MatrixRustSDK
enum RoomProxyError: Error {
case failedRetrievingDisplayName
case failedRetrievingAvatar
case backwardStreamNotAvailable
}
private class WeakRoomProxyWrapper: RoomDelegate {
private weak var roomProxy: RoomProxy?
@@ -92,21 +86,17 @@ class RoomProxy: RoomProxyProtocol, Equatable {
}
}
var avatarURL: URL? {
guard let urlString = room.avatarUrl() else {
return nil
}
return URL(string: urlString)
var avatarURL: String? {
room.avatarUrl()
}
func loadDisplayName(_ completion: @escaping (Result<String, Error>) -> Void) {
func avatarURLForUserId(_ userId: String, completion: @escaping (Result<String?, RoomProxyError>) -> Void) {
DispatchQueue.global(qos: .background).async {
do {
let displayName = try self.room.displayName()
let avatarURL = try self.room.memberAvatarUrl(userId: userId)
DispatchQueue.main.async {
completion(.success(displayName))
completion(.success(avatarURL))
}
} catch {
DispatchQueue.main.async {
@@ -116,28 +106,28 @@ class RoomProxy: RoomProxyProtocol, Equatable {
}
}
func loadAvatar(_ completion: @escaping (Result<UIImage?, Error>) -> Void) {
func loadDisplayName(_ completion: @escaping (Result<String, RoomProxyError>) -> Void) {
DispatchQueue.global(qos: .background).async {
do {
let avatarData = try self.room.avatar()
let displayName = try self.room.displayName()
DispatchQueue.main.async {
completion(.success(UIImage(data: Data(bytes: avatarData, count: avatarData.count))))
completion(.success(displayName))
}
} catch {
DispatchQueue.main.async {
completion(.failure(RoomProxyError.failedRetrievingAvatar))
completion(.failure(.failedRetrievingDisplayName))
}
}
}
}
func paginateBackwards(count: UInt, callback: ((Result<[RoomMessageProtocol], Error>) -> Void)?) {
func paginateBackwards(count: UInt, callback: ((Result<[RoomMessageProtocol], RoomProxyError>) -> Void)?) {
MXLog.debug("Started backpaginating")
processingQueue.async {
guard let backwardStream = self.backwardStream else {
DispatchQueue.main.async {
callback?(.failure(RoomProxyError.backwardStreamNotAvailable))
callback?(.failure(.backwardStreamNotAvailable))
}
return
}
@@ -7,7 +7,12 @@
import UIKit
import Combine
import MatrixRustSDK
enum RoomProxyError: Error {
case failedRetrievingDisplayName
case failedRetrievingAvatar
case backwardStreamNotAvailable
}
enum RoomProxyCallback {
case addedMessage(RoomMessageProtocol)
@@ -26,12 +31,13 @@ protocol RoomProxyProtocol {
var topic: String? { get }
var lastMessage: String? { get }
var avatarURL: URL? { get }
var avatarURL: String? { get }
func loadDisplayName(_ completion: @escaping (Result<String, Error>) -> Void)
func loadAvatar(_ completion: @escaping (Result<UIImage?, Error>) -> Void)
func avatarURLForUserId(_ userId: String, completion: @escaping (Result<String?, RoomProxyError>) -> Void)
func paginateBackwards(count: UInt, callback: ((Result<[RoomMessageProtocol], Error>) -> Void)?)
func loadDisplayName(_ completion: @escaping (Result<String, RoomProxyError>) -> Void)
func paginateBackwards(count: UInt, callback: ((Result<[RoomMessageProtocol], RoomProxyError>) -> Void)?)
var callbacks: PassthroughSubject<RoomProxyCallback, Never> { get }
}