summaryrefslogtreecommitdiff
path: root/Sora/Views
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-07-02 04:04:53 -0700
committerFuwn <[email protected]>2025-07-02 04:04:53 -0700
commitdc6695672f85a137c7b98d5b091ec410750e06b2 (patch)
tree8928680102c6fb8af98ab8010409bfd13d1c2815 /Sora/Views
parentfeat: Development commit (diff)
downloadsora-testing-dc6695672f85a137c7b98d5b091ec410750e06b2.tar.xz
sora-testing-dc6695672f85a137c7b98d5b091ec410750e06b2.zip
feat: Development commit
Diffstat (limited to 'Sora/Views')
-rw-r--r--Sora/Views/MainView.swift17
-rw-r--r--Sora/Views/Post/Grid/PostGridView.swift22
-rw-r--r--Sora/Views/Settings/Section/SettingsSearchView.swift13
3 files changed, 18 insertions, 34 deletions
diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift
index bb31d4e..dd73c49 100644
--- a/Sora/Views/MainView.swift
+++ b/Sora/Views/MainView.swift
@@ -12,11 +12,6 @@ struct MainView: View {
.onChange(of: settings.preferredBooru) { _, newState in
updateManager(newState)
}
- .onChange(of: settings.searchSuggestionsMode) { _, newState in
- if newState != .disabled {
- refreshTags()
- }
- }
.onChange(of: manager.historyIndex) { _, _ in
manager.selectedPost = nil
}
@@ -114,8 +109,6 @@ struct MainView: View {
)
manager.searchText = previousSearchText
- refreshTags()
-
Task(priority: .userInitiated) {
if manager.searchText.isEmpty {
await manager.fetchPosts()
@@ -132,22 +125,12 @@ struct MainView: View {
.first { $0.provider == settings.preferredBooru }
)
- refreshTags()
-
Task(priority: .userInitiated) {
if manager.posts.isEmpty {
await manager.fetchPosts()
}
}
}
-
- private func refreshTags() {
- if settings.searchSuggestionsMode != .disabled {
- manager.initializeTags()
- } else {
- manager.updateTagsCacheSize()
- }
- }
}
#Preview {
diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift
index 9c7e5b6..97604e5 100644
--- a/Sora/Views/Post/Grid/PostGridView.swift
+++ b/Sora/Views/Post/Grid/PostGridView.swift
@@ -11,6 +11,8 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length
@State private var isSearchablePresented = false
@State private var cachedSuggestions: [Either<BooruTag, BooruSearchQuery>] = []
@State private var suppressNextSearchSubmit = false
+ @State private var searchTask: Task<Void, Never>?
+ @State private var suggestions: [BooruTag] = []
@Environment(\.isSearching)
private var isSearching
@@ -131,10 +133,22 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length
)
}
}
- .onAppear {
+ .onChange(of: manager.searchText) { _, newValue in
if settings.searchSuggestionsMode == .tags {
- cachedSuggestions = manager.allTags.map { tag in
- Either<BooruTag, BooruSearchQuery>.left(tag)
+ searchTask?.cancel()
+
+ searchTask = Task {
+ try? await Task.sleep(nanoseconds: 300_000_000)
+
+ guard !Task.isCancelled else { return }
+
+ let searchTag = newValue.split(separator: " ").last.map(String.init) ?? ""
+
+ if !searchTag.isEmpty {
+ suggestions = await manager.searchTags(name: searchTag)
+ } else {
+ suggestions = []
+ }
}
}
}
@@ -343,7 +357,7 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length
private func searchSuggestionsItems() -> [Either<BooruTag, BooruSearchQuery>] {
switch settings.searchSuggestionsMode {
case .tags:
- return cachedSuggestions
+ return suggestions.map { .left($0) }
case .history:
return settings.searchHistory.map { .right($0) }
diff --git a/Sora/Views/Settings/Section/SettingsSearchView.swift b/Sora/Views/Settings/Section/SettingsSearchView.swift
index 062efad..34b123b 100644
--- a/Sora/Views/Settings/Section/SettingsSearchView.swift
+++ b/Sora/Views/Settings/Section/SettingsSearchView.swift
@@ -3,12 +3,6 @@ import SwiftUI
struct SettingsSearchView: View {
@EnvironmentObject var settings: SettingsManager
- #if os(macOS)
- var manager = BooruManager(.yandere)
- #else
- @EnvironmentObject var manager: BooruManager
- #endif
-
var body: some View {
Picker("Suggestion Mode", selection: $settings.searchSuggestionsMode) {
ForEach(SettingsSearchSuggestionsMode.allCases, id: \.self) { type in
@@ -16,13 +10,6 @@ struct SettingsSearchView: View {
}
}
- Button(
- "Clear Cached Tags (\(manager.cacheSize ?? "Unknown size"))"
- ) {
- manager.clearCachedTags()
- }
- .trailingFrame()
-
Button("Clear History") {
settings.searchHistory.removeAll()
}