update sync

This commit is contained in:
2026-06-09 19:07:18 -04:00
parent c7dafae806
commit 6c30fd8b63
5 changed files with 92 additions and 7 deletions

View File

@@ -8,6 +8,8 @@ public struct ClipboardNotice: Identifiable, Equatable {
@MainActor
public class MenuBarController: NSObject, ObservableObject, NSWindowDelegate {
public static let minimumSearchCharacters = 3
@Published public var config: SyncConfig
@Published public var isSyncing = false
@Published public var lastSyncTime: Date?
@@ -322,7 +324,7 @@ public class MenuBarController: NSObject, ObservableObject, NSWindowDelegate {
searchTask?.cancel()
let trimmed = query.trimmingCharacters(in: .whitespacesAndNewlines)
guard !trimmed.isEmpty else {
guard trimmed.count >= Self.minimumSearchCharacters else {
searchResults = []
isSearching = false
searchError = nil
@@ -333,11 +335,11 @@ public class MenuBarController: NSObject, ObservableObject, NSWindowDelegate {
searchError = nil
searchTask = Task { [weak self] in
do {
try await Task.sleep(for: .milliseconds(180))
try await Task.sleep(for: .milliseconds(300))
await self?.performSearch(for: trimmed)
} catch {
await MainActor.run {
if self?.searchQuery.trimmingCharacters(in: .whitespacesAndNewlines) == trimmed {
if self?.isCurrentSearchQuery(trimmed) == true {
self?.isSearching = false
}
}
@@ -368,18 +370,24 @@ public class MenuBarController: NSObject, ObservableObject, NSWindowDelegate {
do {
let results = try await apiClient.searchDocuments(query: liveSearchQuery(for: query))
guard !Task.isCancelled else { return }
guard searchQuery.trimmingCharacters(in: .whitespacesAndNewlines) == query else { return }
guard isCurrentSearchQuery(query) else { return }
searchResults = Array(results.prefix(8))
selectedSearchIndex = min(selectedSearchIndex, max(searchResults.count - 1, 0))
searchError = nil
} catch {
guard !Task.isCancelled else { return }
guard isCurrentSearchQuery(query) else { return }
searchResults = []
searchError = error.localizedDescription
}
isSearching = false
}
private func isCurrentSearchQuery(_ query: String) -> Bool {
let trimmed = searchQuery.trimmingCharacters(in: .whitespacesAndNewlines)
return trimmed == query && trimmed.count >= Self.minimumSearchCharacters
}
private func resetSearch() {
searchTask?.cancel()
searchQuery = ""

View File

@@ -184,7 +184,7 @@ public struct StatusPopoverView: View {
.background(Color(NSColor.controlBackgroundColor))
.clipShape(RoundedRectangle(cornerRadius: 8))
if !controller.searchQuery.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
if controller.searchQuery.trimmingCharacters(in: .whitespacesAndNewlines).count >= MenuBarController.minimumSearchCharacters {
searchResultsList
}
}