Load timeline posts in pages of 40

This commit is contained in:
Shadowfacts 2023-01-27 21:49:34 -05:00
parent 9d7c876e3c
commit d8901b38f5
1 changed files with 8 additions and 5 deletions

View File

@ -947,8 +947,11 @@ extension TimelineViewController {
extension TimelineViewController {
typealias TimelineItem = String // status ID
// the maximum mastodon will provide in a single request
private static let pageSize = 40
func loadInitial() async throws -> [TimelineItem] {
let request = Client.getStatuses(timeline: timeline)
let request = Client.getStatuses(timeline: timeline, range: .count(TimelineViewController.pageSize))
let (statuses, _) = try await mastodonController.run(request)
await withCheckedContinuation { continuation in
@ -965,7 +968,7 @@ extension TimelineViewController {
guard case .status(id: let id, _, _) = dataSource.itemIdentifier(for: IndexPath(row: 0, section: statusesSection)) else {
throw Error.noNewer
}
let newer = RequestRange.after(id: id, count: nil)
let newer = RequestRange.after(id: id, count: TimelineViewController.pageSize)
let request = Client.getStatuses(timeline: timeline, range: newer)
let (statuses, _) = try await mastodonController.run(request)
@ -989,7 +992,7 @@ extension TimelineViewController {
guard case .status(id: let id, _, _) = dataSource.itemIdentifier(for: IndexPath(row: snapshot.numberOfItems(inSection: .statuses) - 1, section: statusesSection)) else {
throw Error.noNewer
}
let older = RequestRange.before(id: id, count: nil)
let older = RequestRange.before(id: id, count: TimelineViewController.pageSize)
let request = Client.getStatuses(timeline: timeline, range: older)
let (statuses, _) = try await mastodonController.run(request)
@ -1020,13 +1023,13 @@ extension TimelineViewController {
// not really the right error but w/e
throw Error.noGap
}
range = .before(id: id, count: nil)
range = .before(id: id, count: TimelineViewController.pageSize)
case .below:
guard gapIndexPath.row < statusItemsCount - 1,
case .status(id: let id, _, _) = dataSource.itemIdentifier(for: IndexPath(row: gapIndexPath.row + 1, section: gapIndexPath.section)) else {
throw Error.noGap
}
range = .after(id: id, count: nil)
range = .after(id: id, count: TimelineViewController.pageSize)
}
let request = Client.getStatuses(timeline: timeline, range: range)