Load filtered home activity streams

This commit is contained in:
Georg Bauer
2026-07-31 17:33:45 +02:00
parent 822cf1f769
commit dba6359d30
11 changed files with 258 additions and 118 deletions

View File

@@ -321,21 +321,21 @@ final class HomeViewController: RefreshingTableViewController {
case all
case issues
case pulls
var coreValue: HomeActivityFilter {
switch self {
case .all: return .all
case .issues: return .issues
case .pulls: return .pullRequests
}
}
}
private let context: AppContext
private var page: HomePage?
private var filter = ActivityFilter.all
private var currentPage: UInt32 = 0
private var activities: [ActivityRow] {
guard let page else { return [] }
switch filter {
case .all: return page.activities
case .issues: return page.issueActivities
case .pulls: return page.pullActivities
}
}
private var nextPage: UInt32?
private var activities: [ActivityRow] { page?.activities ?? [] }
init(context: AppContext) {
self.context = context
@@ -381,7 +381,8 @@ final class HomeViewController: RefreshingTableViewController {
}
override func loadMoreContent() {
loadPage(currentPage + 1, refreshing: false)
guard let nextPage else { return }
loadPage(nextPage, refreshing: false)
}
private func loadPage(_ requestedPage: UInt32, refreshing: Bool) {
@@ -392,23 +393,25 @@ final class HomeViewController: RefreshingTableViewController {
loadingTask?.cancel()
loadingTask = Task {
do {
let result = try await context.core.home(page: requestedPage)
let result = try await context.core.home(
page: requestedPage,
filter: filter.coreValue
)
if requestedPage == 1 {
page = result
} else {
page?.activities.append(contentsOf: result.activities)
page?.issueActivities.append(contentsOf: result.issueActivities)
page?.pullActivities.append(contentsOf: result.pullActivities)
page?.hasMore = result.hasMore
page?.nextPage = result.nextPage
}
currentPage = requestedPage
finishPagination(hasMore: result.hasMore)
nextPage = result.nextPage
finishPagination(hasMore: result.nextPage != nil)
title = page?.serverName
if requestedPage == 1 { tableView.tableHeaderView = page.map { page in
HeatmapView(page: page, selectedFilter: filter.rawValue) { [weak self] index in
guard let self, let filter = ActivityFilter(rawValue: index) else { return }
guard filter != self.filter else { return }
self.filter = filter
self.updateActivities()
self.loadPage(1, refreshing: false)
}
} }
updateActivities()