Re-enable offlineness-hint (IOS-234)
This commit is contained in:
parent
6c0faede75
commit
8884b326fc
|
@ -333,6 +333,20 @@ extension HomeTimelineViewController {
|
|||
})
|
||||
.store(in: &disposeBag)
|
||||
|
||||
viewModel?.isOffline
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink(receiveValue: { [weak self] isOffline in
|
||||
guard let self else { return }
|
||||
|
||||
if isOffline {
|
||||
self.timelinePill.update(with: .offline)
|
||||
self.showTimelinePill()
|
||||
} else {
|
||||
self.hideTimelinePill()
|
||||
}
|
||||
})
|
||||
.store(in: &disposeBag)
|
||||
|
||||
context.publisherService.statusPublishResult.prepend(.failure(AppError.badRequest))
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] publishResult in
|
||||
|
|
|
@ -129,6 +129,7 @@ extension HomeTimelineViewModel.LoadLatestState {
|
|||
}
|
||||
|
||||
await enter(state: Idle.self)
|
||||
viewModel.receiveLoadingStateCompletion(.finished)
|
||||
|
||||
// stop refresher if no new statuses
|
||||
let statuses = response.value
|
||||
|
@ -167,6 +168,7 @@ extension HomeTimelineViewModel.LoadLatestState {
|
|||
} catch {
|
||||
await enter(state: Idle.self)
|
||||
viewModel.didLoadLatest.send()
|
||||
viewModel.receiveLoadingStateCompletion(.failure(error))
|
||||
}
|
||||
} // end Task
|
||||
}
|
||||
|
|
|
@ -84,8 +84,11 @@ extension HomeTimelineViewModel.LoadOldestState {
|
|||
await self.enter(state: Idle.self)
|
||||
}
|
||||
|
||||
viewModel.receiveLoadingStateCompletion(.finished)
|
||||
|
||||
} catch {
|
||||
await self.enter(state: Fail.self)
|
||||
viewModel.receiveLoadingStateCompletion(.failure(error))
|
||||
}
|
||||
} // end Task
|
||||
}
|
||||
|
|
|
@ -34,6 +34,11 @@ final class HomeTimelineViewModel: NSObject {
|
|||
@Published var displaySettingBarButtonItem = true
|
||||
@Published var hasPendingStatusEditReload = false
|
||||
let hasNewPosts = CurrentValueSubject<Bool, Never>(false)
|
||||
|
||||
/// Becomes `true` if `networkErrorCount` is bigger than 5
|
||||
let isOffline = CurrentValueSubject<Bool, Never>(false)
|
||||
var networkErrorCount = CurrentValueSubject<Int, Never>(0)
|
||||
|
||||
var timelineContext: MastodonFeed.Kind.TimelineContext = .home
|
||||
|
||||
weak var tableView: UITableView?
|
||||
|
@ -103,8 +108,25 @@ final class HomeTimelineViewModel: NSObject {
|
|||
})
|
||||
.store(in: &disposeBag)
|
||||
|
||||
networkErrorCount
|
||||
.receive(on: DispatchQueue.main)
|
||||
.map { errorCount in
|
||||
return errorCount >= 5
|
||||
}
|
||||
.assign(to: \.value, on: isOffline)
|
||||
.store(in: &disposeBag)
|
||||
|
||||
self.dataController.loadInitial(kind: .home(timeline: timelineContext))
|
||||
}
|
||||
|
||||
func receiveLoadingStateCompletion(_ completion: Subscribers.Completion<Error>) {
|
||||
switch completion {
|
||||
case .failure:
|
||||
networkErrorCount.value = networkErrorCount.value + 1
|
||||
case .finished:
|
||||
networkErrorCount.value = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension HomeTimelineViewModel {
|
||||
|
|
Loading…
Reference in New Issue