Added protocols for the timeline and memberDetails providers.

This commit is contained in:
Stefan Ceriu
2022-03-18 13:48:07 +02:00
parent 2eae0f0573
commit 22659ae214
7 changed files with 62 additions and 34 deletions
@@ -8,12 +8,7 @@
import Foundation
enum MemberDetailsProviderError: Error {
case invalidRoomProxy
case failedRetrievingUserAvatarURL
}
class MemberDetailsProvider {
class MemberDetailsProvider: MemberDetailsProviderProtocol {
private let roomProxy: RoomProxyProtocol?
private let processingQueue = DispatchQueue(label: "MemberDetailsProviderProcessingQueue")
private var memberAvatars = [String: String]()
@@ -0,0 +1,19 @@
//
// MemberDetailsProviderProtocol.swift
// ElementX
//
// Created by Stefan Ceriu on 18/03/2022.
// Copyright © 2022 Element. All rights reserved.
//
import Foundation
enum MemberDetailsProviderError: Error {
case invalidRoomProxy
case failedRetrievingUserAvatarURL
}
protocol MemberDetailsProviderProtocol {
func avatarURLForUserId(_ userId: String) -> String?
func avatarURLForUserId(_ userId: String, completion: @escaping (Result<String?, MemberDetailsProviderError>) -> Void)
}
@@ -10,10 +10,10 @@ import Foundation
import Combine
class RoomTimelineController: RoomTimelineControllerProtocol {
private let timelineProvider: RoomTimelineProvider
private let timelineProvider: RoomTimelineProviderProtocol
private let timelineItemFactory: RoomTimelineItemFactory
private let mediaProvider: MediaProviderProtocol
private let memberDetailsProvider: MemberDetailsProvider
private let memberDetailsProvider: MemberDetailsProviderProtocol
private var cancellables = Set<AnyCancellable>()
@@ -21,10 +21,10 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
private(set) var timelineItems = [RoomTimelineItemProtocol]()
init(timelineProvider: RoomTimelineProvider,
init(timelineProvider: RoomTimelineProviderProtocol,
timelineItemFactory: RoomTimelineItemFactory,
mediaProvider: MediaProviderProtocol,
memberDetailsProvider: MemberDetailsProvider) {
memberDetailsProvider: MemberDetailsProviderProtocol) {
self.timelineProvider = timelineProvider
self.timelineItemFactory = timelineItemFactory
self.mediaProvider = mediaProvider
@@ -9,15 +9,7 @@
import Foundation
import Combine
enum RoomTimelineCallback {
case addedMessage
}
enum RoomTimelineError: Error {
case generic
}
class RoomTimelineProvider {
class RoomTimelineProvider: RoomTimelineProviderProtocol {
private let roomProxy: RoomProxyProtocol
private var cancellables = Set<AnyCancellable>()
@@ -51,16 +43,4 @@ class RoomTimelineProvider {
}
}
}
// This is probably not the right place for this method. We need a RoomMemberProvider or something
func avatarURLForUserId(_ userId: String, completion: @escaping (Result<String?, RoomTimelineError>) -> Void) {
self.roomProxy.avatarURLForUserId(userId) { result in
switch result {
case .success(let avatarURL):
completion(.success(avatarURL))
case .failure:
completion(.failure(.generic))
}
}
}
}
@@ -0,0 +1,26 @@
//
// RoomTimelineProviderProtocol.swift
// ElementX
//
// Created by Stefan Ceriu on 18/03/2022.
// Copyright © 2022 Element. All rights reserved.
//
import Foundation
import Combine
enum RoomTimelineCallback {
case addedMessage
}
enum RoomTimelineError: Error {
case generic
}
protocol RoomTimelineProviderProtocol {
var callbacks: PassthroughSubject<RoomTimelineCallback, Never> { get }
var messages: [RoomMessageProtocol] { get }
func paginateBackwards(_ count: UInt, callback: ((Result<([RoomMessageProtocol]), RoomTimelineError>) -> Void)?)
}
@@ -11,10 +11,10 @@ import UIKit
struct RoomTimelineItemFactory {
private let mediaProvider: MediaProviderProtocol
private let memberDetailsProvider: MemberDetailsProvider
private let memberDetailsProvider: MemberDetailsProviderProtocol
init(mediaProvider: MediaProviderProtocol,
memberDetailsProvider: MemberDetailsProvider) {
memberDetailsProvider: MemberDetailsProviderProtocol) {
self.mediaProvider = mediaProvider
self.memberDetailsProvider = memberDetailsProvider
}