summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Sora/Data/Booru/BooruManager.swift16
-rw-r--r--Sora/Views/Post/Grid/PostGridView.swift21
2 files changed, 23 insertions, 14 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index d40411a..a80a9c4 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -168,13 +168,7 @@ class BooruManager: ObservableObject {
currentTask?.cancel()
- currentTask = nil
-
- Task {
- await fetchPosts(tags: previousQuery.tags, replace: true)
-
- isNavigatingHistory = false
- }
+ currentTask = Task { isNavigatingHistory = false }
}
func goForwardInHistory() {
@@ -190,13 +184,7 @@ class BooruManager: ObservableObject {
clearCachedPages()
currentTask?.cancel()
- currentTask = nil
-
- Task {
- await fetchPosts(tags: nextQuery.tags, replace: true)
-
- isNavigatingHistory = false
- }
+ currentTask = Task { isNavigatingHistory = false }
}
func fetchAllTags(limit: Int = 0) {
diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift
index 5d08d2c..80130a4 100644
--- a/Sora/Views/Post/Grid/PostGridView.swift
+++ b/Sora/Views/Post/Grid/PostGridView.swift
@@ -77,6 +77,27 @@ struct PostGridView: View {
updateViewState(for: queryID, currentPage: newPage)
}
}
+ .onChange(of: manager.historyIndex) { _, newIndex in
+ guard newIndex >= 0 && newIndex < manager.searchHistory.count else { return }
+
+ let queryID = manager.searchHistory[newIndex].id
+
+ if let state = viewStates[queryID] {
+ manager.posts = state.posts
+ manager.currentPage = state.currentPage
+ } else {
+ manager.posts = []
+ manager.currentPage = 1
+
+ Task {
+ await manager.fetchPosts(
+ page: 1,
+ tags: manager.searchHistory[newIndex].tags,
+ replace: true
+ )
+ }
+ }
+ }
.toolbar {
#if os(macOS)
ToolbarItem {