Skip to content

Commit

Permalink
Fix #67603
Browse files Browse the repository at this point in the history
  • Loading branch information
sandy081 committed Nov 12, 2020
1 parent 02316b6 commit 33a49a9
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { VIEWLET_ID, IExtensionsWorkbenchService, IExtensionsViewPaneContainer,
import {
OpenExtensionsViewletAction, InstallExtensionsAction, ShowOutdatedExtensionsAction, ShowRecommendedExtensionsAction, ShowRecommendedKeymapExtensionsAction, ShowPopularExtensionsAction,
ShowEnabledExtensionsAction, ShowInstalledExtensionsAction, ShowDisabledExtensionsAction, ShowBuiltInExtensionsAction, UpdateAllAction,
EnableAllAction, EnableAllWorkspaceAction, DisableAllAction, DisableAllWorkspaceAction, CheckForUpdatesAction, ShowLanguageExtensionsAction, EnableAutoUpdateAction, DisableAutoUpdateAction, InstallVSIXAction, ReinstallAction, InstallSpecificVersionOfExtensionAction, ClearExtensionsSearchResultsAction, ConfigureWorkspaceRecommendedExtensionsAction, ConfigureWorkspaceFolderRecommendedExtensionsAction
EnableAllAction, EnableAllWorkspaceAction, DisableAllAction, DisableAllWorkspaceAction, CheckForUpdatesAction, ShowLanguageExtensionsAction, EnableAutoUpdateAction, DisableAutoUpdateAction, InstallVSIXAction, ReinstallAction, InstallSpecificVersionOfExtensionAction, ClearExtensionsSearchResultsAction, ConfigureWorkspaceRecommendedExtensionsAction, ConfigureWorkspaceFolderRecommendedExtensionsAction, RefreshExtensionsAction
} from 'vs/workbench/contrib/extensions/browser/extensionsActions';
import { ExtensionsInput } from 'vs/workbench/contrib/extensions/common/extensionsInput';
import { ExtensionEditor } from 'vs/workbench/contrib/extensions/browser/extensionEditor';
Expand Down Expand Up @@ -773,6 +773,22 @@ class ExtensionsContributions implements IWorkbenchContribution {
}
});

registerAction2(class extends Action2 {
constructor() {
super({
id: RefreshExtensionsAction.ID,
title: { value: RefreshExtensionsAction.LABEL, original: 'Refresh' },
category: ExtensionsLocalizedLabel,
menu: {
id: MenuId.CommandPalette,
}
});
}
run(accessor: ServicesAccessor) {
return runAction(accessor.get(IInstantiationService).createInstance(RefreshExtensionsAction, RefreshExtensionsAction.ID, RefreshExtensionsAction.LABEL));
}
});

registerAction2(class extends Action2 {
constructor() {
super({
Expand Down
28 changes: 25 additions & 3 deletions src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1717,11 +1717,11 @@ export class ShowInstalledExtensionsAction extends Action {
super(id, label, undefined, true);
}

run(refresh?: boolean): Promise<void> {
run(): Promise<void> {
return this.viewletService.openViewlet(VIEWLET_ID, true)
.then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer)
.then(viewlet => {
viewlet.search('@installed ', refresh);
viewlet.search('@installed ');
viewlet.focus();
});
}
Expand Down Expand Up @@ -1793,6 +1793,28 @@ export class ClearExtensionsInputAction extends ClearExtensionsSearchResultsActi

}

export class RefreshExtensionsAction extends Action {

static readonly ID = 'workbench.extensions.action.refreshExtension';
static readonly LABEL = localize('refreshExtension', "Refresh");

constructor(
id: string,
label: string,
@IViewsService private readonly viewsService: IViewsService
) {
super(id, label, 'codicon-refresh', true);
}

async run(): Promise<void> {
const viewPaneContainer = this.viewsService.getActiveViewPaneContainerWithId(VIEWLET_ID);
if (viewPaneContainer) {
const extensionsViewPaneContainer = viewPaneContainer as IExtensionsViewPaneContainer;
extensionsViewPaneContainer.refresh();
}
}
}

export class ShowBuiltInExtensionsAction extends Action {

static readonly ID = 'workbench.extensions.action.listBuiltInExtensions';
Expand Down Expand Up @@ -1923,7 +1945,7 @@ export class ShowRecommendedExtensionsAction extends Action {
return this.viewletService.openViewlet(VIEWLET_ID, true)
.then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer)
.then(viewlet => {
viewlet.search('@recommended ', true);
viewlet.search('@recommended ');
viewlet.focus();
});
}
Expand Down
21 changes: 11 additions & 10 deletions src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import {
ClearExtensionsInputAction, ChangeSortAction, UpdateAllAction, CheckForUpdatesAction, DisableAllAction, EnableAllAction,
EnableAutoUpdateAction, DisableAutoUpdateAction, ShowBuiltInExtensionsAction, InstallVSIXAction, SearchCategoryAction,
RecentlyPublishedExtensionsAction, ShowInstalledExtensionsAction, ShowOutdatedExtensionsAction, ShowDisabledExtensionsAction,
ShowEnabledExtensionsAction, PredefinedExtensionFilterAction
ShowEnabledExtensionsAction, PredefinedExtensionFilterAction, RefreshExtensionsAction
} from 'vs/workbench/contrib/extensions/browser/extensionsActions';
import { IExtensionManagementService, IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IWorkbenchExtensionEnablementService, IExtensionManagementServerService, IExtensionManagementServer } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
Expand Down Expand Up @@ -541,6 +541,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE

return [
new SubmenuAction('workbench.extensions.action.filterExtensions', localize('filterExtensions', "Filter Extensions..."), filterActions, 'codicon-filter'),
this.instantiationService.createInstance(RefreshExtensionsAction, RefreshExtensionsAction.ID, RefreshExtensionsAction.LABEL),
this.instantiationService.createInstance(ClearExtensionsInputAction, ClearExtensionsInputAction.ID, ClearExtensionsInputAction.LABEL, this.onSearchChange, this.searchBox ? this.searchBox.getValue() : ''),
];
}
Expand All @@ -565,16 +566,16 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
return actions;
}

search(value: string, refresh: boolean = false): void {
if (this.searchBox) {
if (this.searchBox.getValue() !== value) {
this.searchBox.setValue(value);
} else if (refresh) {
this.doSearch();
}
search(value: string): void {
if (this.searchBox && this.searchBox.getValue() !== value) {
this.searchBox.setValue(value);
}
}

refresh(): void {
this.doSearch(true);
}

private triggerSearch(): void {
this.searchDelayer.trigger(() => this.doSearch(), this.searchBox && this.searchBox.getValue() ? 500 : 0).then(undefined, err => this.onError(err));
}
Expand All @@ -601,7 +602,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
super.saveState();
}

private doSearch(): Promise<void> {
private doSearch(refresh?: boolean): Promise<void> {
const value = this.normalizedQuery();
const isRecommendedExtensionsQuery = ExtensionsListView.isRecommendedExtensionsQuery(value);
this.searchInstalledExtensionsContextKey.set(ExtensionsListView.isInstalledExtensionsQuery(value));
Expand All @@ -615,7 +616,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
this.defaultViewsContextKey.set(!value);

return this.progress(Promise.all(this.panes.map(view =>
(<ExtensionsListView>view).show(this.normalizedQuery())
(<ExtensionsListView>view).show(this.normalizedQuery(), refresh)
.then(model => this.alertSearchResult(model.length, view.id))
))).then(() => undefined);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,9 @@ export class ExtensionsListView extends ViewPane {
}
}

async show(query: string): Promise<IPagedModel<IExtension>> {
async show(query: string, refresh?: boolean): Promise<IPagedModel<IExtension>> {
if (this.queryRequest) {
if (this.queryRequest.query === query) {
if (!refresh && this.queryRequest.query === query) {
return this.queryRequest.request;
}
this.queryRequest.request.cancel();
Expand Down
3 changes: 2 additions & 1 deletion src/vs/workbench/contrib/extensions/common/extensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ import { IViewPaneContainer } from 'vs/workbench/common/views';
export const VIEWLET_ID = 'workbench.view.extensions';

export interface IExtensionsViewPaneContainer extends IViewPaneContainer {
search(text: string, refresh?: boolean): void;
search(text: string): void;
refresh(): void;
}

export const enum ExtensionState {
Expand Down

0 comments on commit 33a49a9

Please sign in to comment.