summaryrefslogtreecommitdiff
path: root/Sora
diff options
context:
space:
mode:
Diffstat (limited to 'Sora')
-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)
}