mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
Improve the load more fetching
This commit is contained in:
parent
7e7c9e344c
commit
fbb39bcd91
3 changed files with 28 additions and 25 deletions
|
|
@ -46,7 +46,7 @@ import Views
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadSearchQuery(dataService: DataService, filterState: FetcherFilterState, isRefresh: Bool) async {
|
func loadSearchQuery(dataService: DataService, filterState: FetcherFilterState, isRefresh: Bool, loadCursor: String? = nil) async {
|
||||||
let thisSearchIdx = searchIdx
|
let thisSearchIdx = searchIdx
|
||||||
searchIdx += 1
|
searchIdx += 1
|
||||||
|
|
||||||
|
|
@ -57,7 +57,7 @@ import Views
|
||||||
let queryResult = try? await dataService.loadLinkedItems(
|
let queryResult = try? await dataService.loadLinkedItems(
|
||||||
limit: 10,
|
limit: 10,
|
||||||
searchQuery: searchQuery(filterState),
|
searchQuery: searchQuery(filterState),
|
||||||
cursor: isRefresh ? nil : cursor
|
cursor: isRefresh ? nil : loadCursor ?? cursor
|
||||||
)
|
)
|
||||||
|
|
||||||
if let appliedFilter = filterState.appliedFilter, let queryResult = queryResult {
|
if let appliedFilter = filterState.appliedFilter, let queryResult = queryResult {
|
||||||
|
|
@ -112,9 +112,10 @@ import Views
|
||||||
BadgeCountHandler.updateBadgeCount(dataService: dataService)
|
BadgeCountHandler.updateBadgeCount(dataService: dataService)
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadMoreItems(dataService: DataService, filterState: FetcherFilterState, isRefresh: Bool) async {
|
func loadMoreItems(dataService: DataService, filterState: FetcherFilterState) async {
|
||||||
if let appliedFilter = filterState.appliedFilter, appliedFilter.shouldRemoteSearch {
|
if let appliedFilter = filterState.appliedFilter, appliedFilter.shouldRemoteSearch {
|
||||||
await loadSearchQuery(dataService: dataService, filterState: filterState, isRefresh: isRefresh)
|
let idx = max(items.count - 1, 0)
|
||||||
|
await loadSearchQuery(dataService: dataService, filterState: filterState, isRefresh: false, loadCursor: idx.description)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1041,18 +1041,27 @@ struct BottomView: View {
|
||||||
@ObservedObject var viewModel: HomeFeedViewModel
|
@ObservedObject var viewModel: HomeFeedViewModel
|
||||||
@EnvironmentObject var dataService: DataService
|
@EnvironmentObject var dataService: DataService
|
||||||
|
|
||||||
|
@State var autoLoading = false
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
if viewModel.fetcher.items.count < 5 {
|
innerBody
|
||||||
Color.clear
|
.onAppear {
|
||||||
.onAppear {
|
Task {
|
||||||
Task {
|
autoLoading = true
|
||||||
await viewModel.loadMore(dataService: dataService)
|
await viewModel.loadMore(dataService: dataService)
|
||||||
}
|
autoLoading = false
|
||||||
print("BOTTOM APPEARED")
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var innerBody: some View {
|
||||||
|
if viewModel.fetcher.items.count < 5 {
|
||||||
|
AnyView(Color.clear)
|
||||||
} else {
|
} else {
|
||||||
HStack {
|
AnyView(HStack {
|
||||||
Text("You are all caught up.")
|
if !autoLoading {
|
||||||
|
Text("You are all caught up.")
|
||||||
|
}
|
||||||
Spacer()
|
Spacer()
|
||||||
if viewModel.isLoading {
|
if viewModel.isLoading {
|
||||||
ProgressView()
|
ProgressView()
|
||||||
|
|
@ -1066,7 +1075,7 @@ struct BottomView: View {
|
||||||
})
|
})
|
||||||
.foregroundColor(Color.blue)
|
.foregroundColor(Color.blue)
|
||||||
}
|
}
|
||||||
}.padding(10)
|
}.padding(10))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,10 @@ import Views
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await loadMoreItems(dataService: dataService, filterState: filterState, isRefresh: false)
|
isLoading = true
|
||||||
|
await fetcher.loadMoreItems(dataService: dataService, filterState: filterState)
|
||||||
|
isLoading = false
|
||||||
|
|
||||||
lastMoreFetched = start
|
lastMoreFetched = start
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -140,22 +143,12 @@ import Views
|
||||||
showLoadingBar = false
|
showLoadingBar = false
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadMoreItems(dataService: DataService, filterState: FetcherFilterState, isRefresh: Bool) async {
|
|
||||||
isLoading = true
|
|
||||||
|
|
||||||
await fetcher.loadMoreItems(dataService: dataService, filterState: filterState, isRefresh: isRefresh)
|
|
||||||
|
|
||||||
isLoading = false
|
|
||||||
}
|
|
||||||
|
|
||||||
func loadFeatureItems(context: NSManagedObjectContext, predicate: NSPredicate, sort: NSSortDescriptor) async -> [Models.LibraryItem] {
|
func loadFeatureItems(context: NSManagedObjectContext, predicate: NSPredicate, sort: NSSortDescriptor) async -> [Models.LibraryItem] {
|
||||||
let fetchRequest: NSFetchRequest<Models.LibraryItem> = LibraryItem.fetchRequest()
|
let fetchRequest: NSFetchRequest<Models.LibraryItem> = LibraryItem.fetchRequest()
|
||||||
fetchRequest.fetchLimit = 25
|
fetchRequest.fetchLimit = 25
|
||||||
fetchRequest.predicate = predicate
|
fetchRequest.predicate = predicate
|
||||||
fetchRequest.sortDescriptors = [sort]
|
fetchRequest.sortDescriptors = [sort]
|
||||||
|
|
||||||
print("using predicate to load feature items: ", predicate)
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
let fetched = try context.fetch(fetchRequest)
|
let fetched = try context.fetch(fetchRequest)
|
||||||
return fetched
|
return fetched
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue