Re-enable offlineness-hint (IOS-234)

This commit is contained in:
Nathan Mattes 2024-04-09 16:12:32 +02:00
parent 6c0faede75
commit 8884b326fc
4 changed files with 41 additions and 0 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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
}

View File

@ -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 {