mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Added protocols for the timeline and memberDetails providers.
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user