diff options
| -rw-r--r-- | Sora/Data/Booru/BooruManager.swift | 16 | ||||
| -rw-r--r-- | Sora/Views/Post/Grid/PostGridView.swift | 21 |
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 { |