summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-02-27 19:51:35 -0800
committerFuwn <[email protected]>2025-02-27 19:51:35 -0800
commitb45f4872125745a5db5307fd94dbb62d45a47d51 (patch)
treec63e6c09ffd24b4d48ef2daf3d26acab01096124
parentfeat: Development commit (diff)
downloadsora-testing-b45f4872125745a5db5307fd94dbb62d45a47d51.tar.xz
sora-testing-b45f4872125745a5db5307fd94dbb62d45a47d51.zip
feat: Development commit
-rw-r--r--Sora/Data/Booru/BooruSearchQuery.swift8
-rw-r--r--Sora/Data/Settings/Settings.swift29
-rw-r--r--Sora/Views/Post/Grid/PostGridView.swift12
3 files changed, 48 insertions, 1 deletions
diff --git a/Sora/Data/Booru/BooruSearchQuery.swift b/Sora/Data/Booru/BooruSearchQuery.swift
new file mode 100644
index 0000000..a87e192
--- /dev/null
+++ b/Sora/Data/Booru/BooruSearchQuery.swift
@@ -0,0 +1,8 @@
+import Foundation
+
+struct BooruSearchQuery: Codable, Equatable, Identifiable {
+ var id = UUID()
+ let provider: BooruProvider
+ let tags: [String]
+ let searchedAt: Date
+}
diff --git a/Sora/Data/Settings/Settings.swift b/Sora/Data/Settings/Settings.swift
index fc0a0cc..e708d5b 100644
--- a/Sora/Data/Settings/Settings.swift
+++ b/Sora/Data/Settings/Settings.swift
@@ -37,6 +37,9 @@ class Settings: ObservableObject {
@AppStorage("displayDetailsInformationBar")
var displayDetailsInformationBar = true
+ @AppStorage("searchHistory")
+ private var searchHistoryData = Data()
+
#if os(macOS)
@AppStorage("saveTagsToFile")
var saveTagsToFile = true
@@ -68,6 +71,32 @@ class Settings: ObservableObject {
set { if let data = Self.encodeRatings(newValue) { blurRatingsData = data } }
}
+ var searchHistory: [BooruSearchQuery] {
+ get {
+ if let history = try? JSONDecoder().decode([BooruSearchQuery].self, from: searchHistoryData) {
+ return history
+ }
+
+ return []
+ }
+
+ set {
+ if let data = try? JSONEncoder().encode(newValue) {
+ searchHistoryData = data
+ }
+ }
+ }
+
+ func appendToSearchHistory(_ query: BooruSearchQuery) {
+ self.searchHistory.append(query)
+ }
+
+ func removeFromSearchHistory(_ query: BooruSearchQuery) {
+ if let index = self.searchHistory.firstIndex(of: query) {
+ self.searchHistory.remove(at: index)
+ }
+ }
+
private static func defaultRatingsData() -> Data {
do {
return try JSONEncoder().encode(BooruRating.allCases)
diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift
index 718c177..b355b2f 100644
--- a/Sora/Views/Post/Grid/PostGridView.swift
+++ b/Sora/Views/Post/Grid/PostGridView.swift
@@ -36,7 +36,17 @@ struct PostGridView: View {
)
}
}
- .onSubmit(of: .search, manager.performSearch)
+ .onSubmit(of: .search) {
+ manager.performSearch()
+ settings
+ .appendToSearchHistory(
+ BooruSearchQuery(
+ provider: settings.preferredBooru,
+ tags: manager.tags,
+ searchedAt: Date()
+ )
+ )
+ }
.navigationDestination(for: BooruPost.self) { post in
PostDetailsView(post: post)
}