提交 6cdd5a9a 编写于 作者: B Benjamin Pasero

support to work with search results even when search was canceled

上级 046b87e0
...@@ -1124,6 +1124,8 @@ export class SearchViewlet extends Viewlet { ...@@ -1124,6 +1124,8 @@ export class SearchViewlet extends Viewlet {
this.queryBuilder.text(content, options) this.queryBuilder.text(content, options)
.then(query => this.onQueryTriggered(query, patternExcludes, patternIncludes), errors.onUnexpectedError); .then(query => this.onQueryTriggered(query, patternExcludes, patternIncludes), errors.onUnexpectedError);
this.findInput.focus(); // focus back to input field
} }
private onQueryTriggered(query: ISearchQuery, excludePattern: string, includePattern: string): void { private onQueryTriggered(query: ISearchQuery, excludePattern: string, includePattern: string): void {
...@@ -1165,17 +1167,23 @@ export class SearchViewlet extends Viewlet { ...@@ -1165,17 +1167,23 @@ export class SearchViewlet extends Viewlet {
let timerEvent = timer.start(timer.Topic.WORKBENCH, 'Search'); let timerEvent = timer.start(timer.Topic.WORKBENCH, 'Search');
let isDone = false; let isDone = false;
let onComplete = (complete: ISearchComplete) => { let onComplete = (completed?: ISearchComplete) => {
timerEvent.stop(); timerEvent.stop();
isDone = true; isDone = true;
// Complete up to 100% as needed // Complete up to 100% as needed
progressRunner.worked(progressTotal - progressWorked); if (completed) {
setTimeout(() => progressRunner.done(), 200); progressRunner.worked(progressTotal - progressWorked);
setTimeout(() => progressRunner.done(), 200);
} else {
progressRunner.done();
}
// Show the final results // Show the final results
this.viewModel = this.viewModel || this.instantiationService.createInstance(SearchResult, query.contentPattern); this.viewModel = this.viewModel || this.instantiationService.createInstance(SearchResult, query.contentPattern);
this.viewModel.append(complete.results); if (completed) {
this.viewModel.append(completed.results);
}
this.tree.refresh().then(() => { this.tree.refresh().then(() => {
autoExpand(true); autoExpand(true);
...@@ -1190,7 +1198,7 @@ export class SearchViewlet extends Viewlet { ...@@ -1190,7 +1198,7 @@ export class SearchViewlet extends Viewlet {
this.actionRegistry['collapseAll'].enabled = hasResults; this.actionRegistry['collapseAll'].enabled = hasResults;
this.actionRegistry['clearSearchResults'].enabled = hasResults; this.actionRegistry['clearSearchResults'].enabled = hasResults;
if (complete.limitHit) { if (completed && completed.limitHit) {
this.findInput.showMessage({ this.findInput.showMessage({
content: nls.localize('searchMaxResultsWarning', "The result set only contains a subset of all matches. Please be more specific in your search to narrow down the results."), content: nls.localize('searchMaxResultsWarning', "The result set only contains a subset of all matches. Please be more specific in your search to narrow down the results."),
type: MessageType.WARNING type: MessageType.WARNING
...@@ -1202,7 +1210,9 @@ export class SearchViewlet extends Viewlet { ...@@ -1202,7 +1210,9 @@ export class SearchViewlet extends Viewlet {
let hasIncludes = !!includePattern; let hasIncludes = !!includePattern;
let message: string; let message: string;
if (hasIncludes && hasExcludes) { if (!completed) {
message = nls.localize('searchCanceled', "Search was canceled before any results could be found - ");
} else if (hasIncludes && hasExcludes) {
message = nls.localize('noResultsIncludesExcludes', "No results found matching '{0}' excluding '{1}' - ", includePattern, excludePattern); message = nls.localize('noResultsIncludesExcludes', "No results found matching '{0}' excluding '{1}' - ", includePattern, excludePattern);
} else if (hasIncludes) { } else if (hasIncludes) {
message = nls.localize('noResultsIncludes', "No results found matching '{0}' - ", includePattern); message = nls.localize('noResultsIncludes', "No results found matching '{0}' - ", includePattern);
...@@ -1216,10 +1226,19 @@ export class SearchViewlet extends Viewlet { ...@@ -1216,10 +1226,19 @@ export class SearchViewlet extends Viewlet {
this.results.hide(); this.results.hide();
let div = this.messages.empty().show().asContainer().div({ 'class': 'message', text: message }); let div = this.messages.empty().show().asContainer().div({ 'class': 'message', text: message });
if (hasIncludes || hasExcludes) { if (!completed) {
$(div).a({
'class': ['pointer', 'prominent'],
text: nls.localize('rerunSearch.message', "Search again")
}).on(dom.EventType.CLICK, (e: MouseEvent) => {
dom.EventHelper.stop(e, false);
this.onQueryChanged(true);
});
} else if (hasIncludes || hasExcludes) {
$(div).a({ $(div).a({
'class': ['pointer', 'prominent'], 'class': ['pointer', 'prominent'],
text: nls.localize('rerunSearch.message', "Search again in all files") text: nls.localize('rerunSearchInAll.message', "Search again in all files")
}).on(dom.EventType.CLICK, (e: MouseEvent) => { }).on(dom.EventType.CLICK, (e: MouseEvent) => {
dom.EventHelper.stop(e, false); dom.EventHelper.stop(e, false);
...@@ -1248,13 +1267,15 @@ export class SearchViewlet extends Viewlet { ...@@ -1248,13 +1267,15 @@ export class SearchViewlet extends Viewlet {
}; };
let onError = (e: any) => { let onError = (e: any) => {
this.loading = false; if (errors.isPromiseCanceledError(e)) {
isDone = true; onComplete(null);
progressRunner.done(); } else {
progressTimer.stop(); this.loading = false;
doneTimer.stop(); isDone = true;
progressRunner.done();
progressTimer.stop();
doneTimer.stop();
if (!e || e.message !== 'Canceled') {
this.messageService.show(2 /* ERROR */, e); this.messageService.show(2 /* ERROR */, e);
} }
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册