diff --git a/ServiceLayer/Sources/ServiceLayer/Services/SearchService.swift b/ServiceLayer/Sources/ServiceLayer/Services/SearchService.swift index 6201203..edc4249 100644 --- a/ServiceLayer/Sources/ServiceLayer/Services/SearchService.swift +++ b/ServiceLayer/Sources/ServiceLayer/Services/SearchService.swift @@ -35,8 +35,9 @@ extension SearchService: CollectionService { guard let search = search else { return Empty().eraseToAnyPublisher() } return mastodonAPIClient.request(ResultsEndpoint.search(search)) + .flatMap { results in contentDatabase.insert(results: results).collect().map { _ in results } } .handleEvents(receiveOutput: { resultsSubject.send(($0, search)) }) - .flatMap(contentDatabase.insert(results:)) + .ignoreOutput() .eraseToAnyPublisher() } } diff --git a/ViewModels/Sources/ViewModels/View Models/SearchViewModel.swift b/ViewModels/Sources/ViewModels/View Models/SearchViewModel.swift index a1f3655..df8efda 100644 --- a/ViewModels/Sources/ViewModels/View Models/SearchViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/SearchViewModel.swift @@ -17,7 +17,7 @@ public final class SearchViewModel: CollectionItemsViewModel { super.init(collectionService: searchService, identityContext: identityContext) $query.removeDuplicates() - .throttle(for: .seconds(Self.throttleInterval), scheduler: DispatchQueue.global(), latest: true) + .debounce(for: .seconds(Self.debounceInterval), scheduler: DispatchQueue.global()) .combineLatest($scope.removeDuplicates()) .sink { [weak self] in self?.request( @@ -28,13 +28,6 @@ public final class SearchViewModel: CollectionItemsViewModel { .store(in: &cancellables) } - public override var updates: AnyPublisher { - // Since results are processed through the DB to determine CW expansion state etc they can arrive erratically - super.updates - .throttle(for: .seconds(Self.throttleInterval), scheduler: DispatchQueue.global(), latest: true) - .eraseToAnyPublisher() - } - public override func requestNextPage(fromIndexPath indexPath: IndexPath) { guard scope != .all else { return } @@ -46,7 +39,7 @@ public final class SearchViewModel: CollectionItemsViewModel { } private extension SearchViewModel { - static let throttleInterval: TimeInterval = 0.5 + static let debounceInterval: TimeInterval = 0.25 } private extension SearchScope {