summaryrefslogtreecommitdiff
path: root/Sora/Data
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-03-15 05:38:13 -0700
committerFuwn <[email protected]>2025-03-15 05:38:13 -0700
commit704bb9be1d4bdd8b9360fc1d58d6b58bc2c1d9c1 (patch)
tree60090b645c7c7cebd58e55444a3037dac435f72a /Sora/Data
parentfeat: Development commit (diff)
downloadsora-testing-704bb9be1d4bdd8b9360fc1d58d6b58bc2c1d9c1.tar.xz
sora-testing-704bb9be1d4bdd8b9360fc1d58d6b58bc2c1d9c1.zip
feat: Development commit
Diffstat (limited to 'Sora/Data')
-rw-r--r--Sora/Data/Booru/BooruManager.swift58
-rw-r--r--Sora/Data/Booru/BooruSearchQuery.swift16
2 files changed, 71 insertions, 3 deletions
diff --git a/Sora/Data/Booru/BooruManager.swift b/Sora/Data/Booru/BooruManager.swift
index 1121fc1..3955b70 100644
--- a/Sora/Data/Booru/BooruManager.swift
+++ b/Sora/Data/Booru/BooruManager.swift
@@ -15,6 +15,8 @@ class BooruManager: ObservableObject {
@Published var domain: String
@Published private(set) var postIndexMap: [String: Int] = [:]
@Published var provider: BooruProvider
+ @Published private var historyIndex: Int = 0
+ @Published var searchHistory: [BooruSearchQuery] = []
// MARK: - Private Properties
private var currentTask: Task<Void, Never>?
@@ -42,6 +44,10 @@ class BooruManager: ObservableObject {
self.domain = provider.domain
pageCache.countLimit = 50
pageCache.totalCostLimit = 50 * 1_024 * 1_024
+
+ self.searchHistory.append(
+ BooruSearchQuery(provider: provider, tags: [])
+ )
}
// MARK: - Public Methods
@@ -99,9 +105,16 @@ class BooruManager: ObservableObject {
}
func performSearch(settings: SettingsManager? = nil) {
- settings?.appendToSearchHistory(
- BooruSearchQuery(provider: settings!.preferredBooru, tags: tags, searchedAt: Date())
+ let query = BooruSearchQuery(
+ provider: settings?.preferredBooru ?? provider,
+ tags: tags
)
+
+ settings?.appendToSearchHistory(query)
+ searchHistory.append(query)
+
+ historyIndex = searchHistory.count - 1
+
currentTask?.cancel()
Task { await fetchPosts(page: 1, tags: tags, replace: true) }
@@ -114,6 +127,47 @@ class BooruManager: ObservableObject {
await fetchPosts(page: currentPage + 1, tags: tags)
currentPage += 1
+
+ if historyIndex >= 0 && historyIndex < searchHistory.count {
+ var currentQuery = searchHistory[historyIndex]
+
+ currentQuery.page = currentPage
+ searchHistory[historyIndex] = currentQuery
+ }
+ }
+ }
+
+ func goBackInHistory() {
+ guard historyIndex > 0 else { return }
+
+ historyIndex -= 1
+
+ let previousQuery = searchHistory[historyIndex]
+
+ searchText = previousQuery.tags.joined(separator: " ")
+ currentPage = previousQuery.page
+
+ Task {
+ await fetchPosts(
+ page: currentPage,
+ tags: previousQuery.tags,
+ replace: true
+ )
+ }
+ }
+
+ func goForwardInHistory() {
+ guard historyIndex < searchHistory.count - 1 else { return }
+
+ historyIndex += 1
+
+ let nextQuery = searchHistory[historyIndex]
+
+ searchText = nextQuery.tags.joined(separator: " ")
+ currentPage = nextQuery.page
+
+ Task {
+ await fetchPosts(page: currentPage, tags: nextQuery.tags, replace: true)
}
}
diff --git a/Sora/Data/Booru/BooruSearchQuery.swift b/Sora/Data/Booru/BooruSearchQuery.swift
index ddab4eb..b554fbf 100644
--- a/Sora/Data/Booru/BooruSearchQuery.swift
+++ b/Sora/Data/Booru/BooruSearchQuery.swift
@@ -1,8 +1,22 @@
import Foundation
struct BooruSearchQuery: Codable, Equatable, Identifiable, Hashable {
- var id = UUID()
+ var id: UUID
let provider: BooruProvider
let tags: [String]
let searchedAt: Date
+ var page: Int
+
+ init(
+ provider: BooruProvider,
+ tags: [String],
+ searchedAt: Date = Date(),
+ page: Int = 1
+ ) {
+ self.id = UUID()
+ self.provider = provider
+ self.tags = tags
+ self.searchedAt = searchedAt
+ self.page = page
+ }
}