Improve error handling

This commit is contained in:
Alfonso Grillo
2023-01-20 17:59:09 +01:00
parent 9e21915a4e
commit 93ae25b998
3 changed files with 14 additions and 8 deletions
@@ -22,7 +22,7 @@ final class PollHistoryService: PollHistoryServiceProtocol {
private let room: MXRoom
private let chunkSizeInDays: UInt
private let pollsSubject: PassthroughSubject<TimelinePollDetails, Never> = .init()
private let errorSubject: PassthroughSubject<Error, Never> = .init()
private let errorSubject: PassthroughSubject<PollHistoryError, Never> = .init()
private let isFetchingSubject: PassthroughSubject<Bool, Never> = .init()
private var listner: Any?
@@ -35,7 +35,7 @@ final class PollHistoryService: PollHistoryServiceProtocol {
pollsSubject.eraseToAnyPublisher()
}
var error: AnyPublisher<Error, Never> {
var error: AnyPublisher<PollHistoryError, Never> {
errorSubject.eraseToAnyPublisher()
}
@@ -60,7 +60,7 @@ final class PollHistoryService: PollHistoryServiceProtocol {
let self = self,
let timeline = timeline
else {
#warning("Handle error")
self?.errorSubject.send(.timelineUnavailable)
return
}
@@ -122,7 +122,7 @@ private extension PollHistoryService {
self.isFetchingSubject.send(false)
}
case .failure(let error):
#warning("Handle error")
self.errorSubject.send(.paginationFailed(error))
self.isFetchingSubject.send(false)
}
}
@@ -155,7 +155,7 @@ extension PollHistoryService: PollAggregatorDelegate {
}
func pollAggregator(_ aggregator: PollAggregator, didFailWithError: Error) {
#warning("Handle error")
errorSubject.send(.pollAggregationFailed(didFailWithError))
}
func pollAggregatorDidUpdateData(_ aggregator: PollAggregator) {
@@ -23,7 +23,7 @@ final class MockPollHistoryService: PollHistoryServiceProtocol {
polls.eraseToAnyPublisher()
}
var error: AnyPublisher<Error, Never> {
var error: AnyPublisher<PollHistoryError, Never> {
Empty().eraseToAnyPublisher()
}
@@ -22,12 +22,18 @@ protocol PollHistoryServiceProtocol {
var pollHistory: AnyPublisher<TimelinePollDetails, Never> { get }
/// Publishes whatever errors produced during the sync.
var error: AnyPublisher<Error, Never> { get }
var error: AnyPublisher<PollHistoryError, Never> { get }
/// Ask to fetch the next batch of polls.
/// Concrete implementations can decide what a batch is.
func next()
/// Inform the whenever a new batch of polls starts or ends.
/// Inform whenever the fetch of a new batch of polls starts or ends.
var isFetching: AnyPublisher<Bool, Never> { get }
}
enum PollHistoryError: Error {
case paginationFailed(Error)
case timelineUnavailable
case pollAggregationFailed(Error)
}