mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 03:06:37 +00:00
Added logout option, room list on home screen, made various methods asynchronous,
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// MockRoomModel.swift
|
||||
// ElementX
|
||||
//
|
||||
// Created by Stefan Ceriu on 17.02.2022.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
struct MockRoomModel: RoomModelProtocol {
|
||||
let identifier = UUID().uuidString
|
||||
let name: String? = nil
|
||||
let displayName: String
|
||||
|
||||
let topic: String? = nil
|
||||
let lastMessage: String? = "Last message"
|
||||
|
||||
let avatarURL: URL? = nil
|
||||
|
||||
let isDirect = Bool.random()
|
||||
let isSpace = Bool.random()
|
||||
let isPublic = Bool.random()
|
||||
let isEncrypted = Bool.random()
|
||||
|
||||
func getAvatar(_ completion: (Result<UIImage?, Error>) -> Void) {
|
||||
completion(.success(UIImage(systemName: "wand.and.stars")))
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,86 @@
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
import MatrixRustSDK
|
||||
|
||||
struct RoomModel {
|
||||
let displayName: String
|
||||
enum RoomModelError: Error {
|
||||
case failedRetrievingAvatar
|
||||
}
|
||||
|
||||
struct RoomModel: RoomModelProtocol {
|
||||
|
||||
private let room: Room
|
||||
|
||||
init(room: Room) {
|
||||
self.room = room
|
||||
}
|
||||
|
||||
var identifier: String {
|
||||
return room.identifier()
|
||||
}
|
||||
|
||||
var isDirect: Bool {
|
||||
return room.isDirect()
|
||||
}
|
||||
|
||||
var isPublic: Bool {
|
||||
return room.isPublic()
|
||||
}
|
||||
|
||||
var isSpace: Bool {
|
||||
return room.isSpace()
|
||||
}
|
||||
|
||||
var isEncrypted: Bool {
|
||||
return room.isEncrypted()
|
||||
}
|
||||
|
||||
var name: String? {
|
||||
return room.name()
|
||||
}
|
||||
|
||||
var displayName: String {
|
||||
do {
|
||||
return try room.displayName()
|
||||
} catch {
|
||||
MXLog.error("Failed retrieving room name with error: \(error)")
|
||||
return "Error"
|
||||
}
|
||||
}
|
||||
|
||||
var topic: String? {
|
||||
return room.topic()
|
||||
}
|
||||
|
||||
var lastMessage: String? {
|
||||
guard let lastMessage = try? room.messages().last else {
|
||||
return "Last message unknown"
|
||||
}
|
||||
|
||||
return "\(lastMessage.sender()): \(lastMessage.content())"
|
||||
}
|
||||
|
||||
var avatarURL: URL? {
|
||||
guard let urlString = room.avatarUrl() else {
|
||||
return nil
|
||||
}
|
||||
|
||||
return URL(string: urlString)
|
||||
}
|
||||
|
||||
func getAvatar(_ completion: @escaping (Result<UIImage?, Error>) -> Void) {
|
||||
DispatchQueue.global(qos: .background).async {
|
||||
do {
|
||||
let avatarData = try room.avatar()
|
||||
|
||||
DispatchQueue.main.async {
|
||||
completion(.success(UIImage(data: Data(bytes: avatarData, count: avatarData.count))))
|
||||
}
|
||||
} catch {
|
||||
DispatchQueue.main.async {
|
||||
completion(.failure(RoomModelError.failedRetrievingAvatar))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
//
|
||||
// RoomModelProtocol.swift
|
||||
// ElementX
|
||||
//
|
||||
// Created by Stefan Ceriu on 17.02.2022.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
protocol RoomModelProtocol {
|
||||
var identifier: String { get }
|
||||
var isDirect: Bool { get }
|
||||
var isPublic: Bool { get }
|
||||
var isSpace: Bool { get }
|
||||
var isEncrypted: Bool { get }
|
||||
|
||||
var displayName: String { get }
|
||||
var name: String? { get }
|
||||
|
||||
var topic: String? { get }
|
||||
var lastMessage: String? { get }
|
||||
|
||||
var avatarURL: URL? { get }
|
||||
|
||||
func getAvatar(_ completion: @escaping (Result<UIImage?, Error>) -> Void)
|
||||
}
|
||||
Reference in New Issue
Block a user