summaryrefslogtreecommitdiff
path: root/Sora/Data/Booru
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data/Booru')
-rw-r--r--Sora/Data/Booru/BooruManager.swift10
1 files changed, 7 insertions, 3 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index 3c4374e..2957fcd 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -30,6 +30,7 @@ class BooruManager: ObservableObject { // swiftlint:disable:this type_body_leng
private let showHeldMoebooruPosts: Bool
private var urlCache: [String: URL] = [:]
private var lastPostCount = 0
+ private var cachedMinimumPostID: Int?
// MARK: - Computed Properties
var tags: [String] {
@@ -340,9 +341,7 @@ class BooruManager: ObservableObject { // swiftlint:disable:this type_body_leng
guard page > 1 else { return "1" }
guard !hasExplicitSortTag(in: tags) else { return String(page) }
- guard let minimumPostID = posts.lazy.compactMap({ Int($0.id) }).min() else {
- return String(page)
- }
+ guard let minimumPostID = cachedMinimumPostID else { return String(page) }
return "b\(minimumPostID)"
}
@@ -545,12 +544,17 @@ class BooruManager: ObservableObject { // swiftlint:disable:this type_body_leng
postIndexMap.removeAll()
lastPostCount = 0
+ cachedMinimumPostID = nil
}
endOfData = newPosts.isEmpty
guard !endOfData else { return }
+ if let nextMinimumPostID = newPosts.lazy.compactMap({ Int($0.id) }).min() {
+ cachedMinimumPostID = min(cachedMinimumPostID ?? nextMinimumPostID, nextMinimumPostID)
+ }
+
withTransaction(Transaction(animation: nil)) {
let oldCount = self.posts.count