diff options
| author | Stephen Blott | 2015-05-08 11:02:55 +0100 |
|---|---|---|
| committer | Stephen Blott | 2015-05-08 11:02:55 +0100 |
| commit | 3e890adbbf7b6a9671b42536b6ee6221389b9443 (patch) | |
| tree | 3e912e6a2d93bc335a1775e73b52d0a5ac07d002 | |
| parent | 571cb9447552804e57d0f453b9642de55e02f317 (diff) | |
| download | vimium-3e890adbbf7b6a9671b42536b6ee6221389b9443.tar.bz2 | |
Search completion; add debug code to completer dispatch.
| -rw-r--r-- | background_scripts/completion.coffee | 65 |
1 files changed, 36 insertions, 29 deletions
diff --git a/background_scripts/completion.coffee b/background_scripts/completion.coffee index f17ca28c..48039cd2 100644 --- a/background_scripts/completion.coffee +++ b/background_scripts/completion.coffee @@ -465,46 +465,53 @@ class MultiCompleter filter: (queryTerms, onComplete) -> # Allow only one query to run at a time. if @filterInProgress - @mostRecentQuery = { queryTerms: queryTerms, onComplete: onComplete } + @mostRecentQuery = [ queryTerms, onComplete ] return RegexpCache.clear() @mostRecentQuery = null @filterInProgress = true suggestions = [] - completersFinished = 0 continuation = null + activeCompleters = [0...@completers.length] # Call filter() on every source completer and wait for them all to finish before returning results. # At most one of the completers (SearchEngineCompleter) may pass a continuation function, which will be # called after the results of all of the other completers have been posted. Any additional results # from this continuation will be added to the existing results and posted later. We don't call the # continuation if another query is already waiting. - for completer in @completers - do (completer) => - Utils.nextTick => - completer.filter queryTerms, (newSuggestions, cont = null) => - suggestions = suggestions.concat newSuggestions - continuation = cont if cont? - if @completers.length <= ++completersFinished - shouldRunContinuation = continuation? and not @mostRecentQuery - console.log "skip continuation" if continuation? and not shouldRunContinuation - # We don't post results immediately if there are none, and we're going to run a continuation - # (ie. a SearchEngineCompleter). This prevents hiding the vomnibar briefly before showing it - # again, which looks ugly. - unless shouldRunContinuation and suggestions.length == 0 - onComplete - results: @prepareSuggestions queryTerms, suggestions - callerMayCacheResults: not shouldRunContinuation - # Allow subsequent queries to begin. - @filterInProgress = false - if shouldRunContinuation - continuation suggestions, (newSuggestions) => - if 0 < newSuggestions.length - suggestions.push newSuggestions... - onComplete - results: @prepareSuggestions queryTerms, suggestions - callerMayCacheResults: true - else - @filter @mostRecentQuery.queryTerms, @mostRecentQuery.onComplete if @mostRecentQuery + for completer, index in @completers + do (completer, index) => + completer.filter queryTerms, (newSuggestions, newContinuation = null) => + if index not in activeCompleters + # NOTE(smblott) I suspect one of the completers is calling onComplete more than once. (And the + # legacy code had ">=" where "==" should have sufficed.) This is just to track that case down. + console.log "XXXXXXXXXXXXXXX, onComplete called twice!" + console.log completer + activeCompleters = activeCompleters.filter (i) -> i != index + suggestions.push newSuggestions... + continuation = continuation ? newContinuation + if activeCompleters.length == 0 + shouldRunContinuation = continuation? and not @mostRecentQuery + console.log "skip continuation" if continuation? and not shouldRunContinuation + # We don't post results immediately if there are none, and we're going to run a continuation + # (ie. a SearchEngineCompleter). This collapsing the vomnibar briefly before expanding it + # again, which looks ugly. + unless shouldRunContinuation and suggestions.length == 0 + onComplete + results: @prepareSuggestions queryTerms, suggestions + callerMayCacheResults: not shouldRunContinuation + # Allow subsequent queries to begin. + @filterInProgress = false + if shouldRunContinuation + continuation suggestions, (newSuggestions) => + if 0 < newSuggestions.length + suggestions.push newSuggestions... + onComplete + results: @prepareSuggestions queryTerms, suggestions + callerMayCacheResults: true + else + if @mostRecentQuery + console.log "running pending query:", @mostRecentQuery[0] + @filter @mostRecentQuery... prepareSuggestions: (queryTerms, suggestions) -> suggestion.computeRelevancy queryTerms for suggestion in suggestions |
