#53 - Refactored various components:

- updated the authentication coordinator to use async await
- replaced the UserSession with a ClientProxy (similar to the RoomProxy)
- renamed `completion` to `callback` on the coordinators and view models
- renamed `viewModelResult` to `viewModelAction`
- introduced back UserSession as a user specific service container
This commit is contained in:
Stefan Ceriu
2022-05-26 16:04:48 +03:00
committed by Stefan Ceriu
parent edf765b7cd
commit 1b4d3a650e
33 changed files with 312 additions and 214 deletions
@@ -7,16 +7,15 @@
//
import UIKit
import MatrixRustSDK
import Kingfisher
struct MediaProvider: MediaProviderProtocol {
private let client: Client
private let clientProxy: ClientProxyProtocol
private let imageCache: Kingfisher.ImageCache
private let processingQueue: DispatchQueue
init(client: Client, imageCache: Kingfisher.ImageCache) {
self.client = client
init(clientProxy: ClientProxyProtocol, imageCache: Kingfisher.ImageCache) {
self.clientProxy = clientProxy
self.imageCache = imageCache
self.processingQueue = DispatchQueue(label: "MediaProviderProcessingQueue", attributes: .concurrent)
}
@@ -29,18 +28,18 @@ struct MediaProvider: MediaProviderProtocol {
return imageCache.retrieveImageInMemoryCache(forKey: source.underlyingSource.url(), options: nil)
}
func imageFromURL(_ url: String?) -> UIImage? {
guard let url = url else {
func imageFromURLString(_ urlString: String?) -> UIImage? {
guard let urlString = urlString else {
return nil
}
return imageFromSource(MediaSource(source: mediaSourceFromUrl(url: url)))
return imageFromSource(MediaSource(source: clientProxy.mediaSourceForURLString(urlString)))
}
func loadImageFromURL(_ url: String) async -> Result<UIImage, MediaProviderError> {
await loadImageFromSource(MediaSource(source: mediaSourceFromUrl(url: url)))
func loadImageFromURLString(_ urlString: String) async -> Result<UIImage, MediaProviderError> {
await loadImageFromSource(MediaSource(source: clientProxy.mediaSourceForURLString(urlString)))
}
func loadImageFromSource(_ source: MediaSource) async -> Result<UIImage, MediaProviderError> {
if let image = imageFromSource(source) {
return .success(image)
@@ -59,9 +58,9 @@ struct MediaProvider: MediaProviderProtocol {
return await Task.detached { () -> Result<UIImage, MediaProviderError> in
do {
let imageData = try client.getMediaContent(source: source.underlyingSource)
let imageData = try clientProxy.loadMediaContentForSource(source.underlyingSource)
guard let image = UIImage(data: Data(bytes: imageData, count: imageData.count)) else {
guard let image = UIImage(data: imageData) else {
MXLog.error("Invalid image data")
return .failure(.invalidImageData)
}
@@ -20,7 +20,7 @@ protocol MediaProviderProtocol {
func loadImageFromSource(_ source: MediaSource) async -> Result<UIImage, MediaProviderError>
func imageFromURL(_ url: String?) -> UIImage?
func imageFromURLString(_ urlString: String?) -> UIImage?
func loadImageFromURL(_ url: String) async -> Result<UIImage, MediaProviderError>
func loadImageFromURLString(_ urlString: String) async -> Result<UIImage, MediaProviderError>
}
@@ -13,11 +13,11 @@ struct MediaSource: Equatable {
let underlyingSource: MatrixRustSDK.MediaSource
init(source: MatrixRustSDK.MediaSource) {
self.underlyingSource = source
underlyingSource = source
}
init(urlString: String) {
self.underlyingSource = mediaSourceFromUrl(url: urlString)
underlyingSource = MatrixRustSDK.mediaSourceFromUrl(url: urlString)
}
// MARK: - Equatable
@@ -19,11 +19,11 @@ struct MockMediaProvider: MediaProviderProtocol {
return .failure(.failedRetrievingImage)
}
func imageFromURL(_ url: String?) -> UIImage? {
func imageFromURLString(_ urlString: String?) -> UIImage? {
return nil
}
func loadImageFromURL(_ url: String) async -> Result<UIImage, MediaProviderError> {
func loadImageFromURLString(_ urlString: String) async -> Result<UIImage, MediaProviderError> {
return .failure(.failedRetrievingImage)
}
}