install vsix action

This commit is contained in:
Joao Moreno 2016-09-15 18:38:04 +02:00
parent dc172cddf8
commit 7b7719158c
4 changed files with 40 additions and 4 deletions

View file

@ -57,6 +57,7 @@ export interface IExtensionsWorkbenchService {
queryLocal(): TPromise<IExtension[]>;
queryGallery(options?: IQueryOptions): TPromise<IPager<IExtension>>;
canInstall(extension: IExtension): boolean;
install(vsix: string): TPromise<void>;
install(extension: IExtension): TPromise<void>;
uninstall(extension: IExtension): TPromise<void>;
openExtensionsFile(sideBySide?: boolean): TPromise<void>;

View file

@ -20,7 +20,9 @@ import { ToggleViewletAction } from 'vs/workbench/browser/viewlet';
import { IViewletService } from 'vs/workbench/services/viewlet/common/viewletService';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import { Query } from '../common/extensionQuery';
import { shell } from 'electron';
import { shell, remote } from 'electron';
const dialog = remote.dialog;
export class InstallAction extends Action {
@ -565,4 +567,31 @@ export class ConfigureWorkspaceRecommendedExtensionsAction extends Action {
public run(event: any): TPromise<any> {
return this.extensionsService.openExtensionsFile();
}
}
export class InstallVSIXAction extends Action {
static ID = 'workbench.extensions.action.installVSIX';
static LABEL = localize('installVSIX', "Install from VSIX...");
constructor(
id = InstallVSIXAction.ID,
label = InstallVSIXAction.LABEL,
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService
) {
super(id, label, 'extension-action install-vsix', true);
}
run(): TPromise<any> {
const result = dialog.showOpenDialog(remote.getCurrentWindow(), {
filters: [{ name: 'VSIX Extensions', extensions: ['vsix'] }],
properties: ['openFile']
});
if (!result) {
return TPromise.as(null);
}
return TPromise.join(result.map(vsix => this.extensionsWorkbenchService.install(vsix)));
}
}

View file

@ -30,7 +30,7 @@ import { PagedList } from 'vs/base/browser/ui/list/listPaging';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { Delegate, Renderer } from './extensionsList';
import { IExtensionsWorkbenchService, IExtension, IExtensionsViewlet, VIEWLET_ID, ExtensionState } from './extensions';
import { ShowRecommendedExtensionsAction, ShowWorkspaceRecommendedExtensionsAction, ShowPopularExtensionsAction, ShowInstalledExtensionsAction, ShowOutdatedExtensionsAction, ClearExtensionsInputAction, ChangeSortAction, UpdateAllAction } from './extensionsActions';
import { ShowRecommendedExtensionsAction, ShowWorkspaceRecommendedExtensionsAction, ShowPopularExtensionsAction, ShowInstalledExtensionsAction, ShowOutdatedExtensionsAction, ClearExtensionsInputAction, ChangeSortAction, UpdateAllAction, InstallVSIXAction } from './extensionsActions';
import { IExtensionManagementService, IExtensionGalleryService, IExtensionTipsService, SortBy, SortOrder, IQueryOptions } from 'vs/platform/extensionManagement/common/extensionManagement';
import { ExtensionsInput } from './extensionsInput';
import { Query } from '../common/extensionQuery';
@ -175,7 +175,9 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet {
this.instantiationService.createInstance(ChangeSortAction, 'extensions.sort.rating', localize('sort by rating', "Sort By: Rating"), this.onSearchChange, 'rating', undefined),
new Separator(),
this.instantiationService.createInstance(ChangeSortAction, 'extensions.sort..asc', localize('ascending', "Sort Order: ↑"), this.onSearchChange, undefined, 'asc'),
this.instantiationService.createInstance(ChangeSortAction, 'extensions.sort..desc', localize('descending', "Sort Order: ↓"), this.onSearchChange, undefined, 'desc')
this.instantiationService.createInstance(ChangeSortAction, 'extensions.sort..desc', localize('descending', "Sort Order: ↓"), this.onSearchChange, undefined, 'desc'),
new Separator(),
this.instantiationService.createInstance(InstallVSIXAction, InstallVSIXAction.ID, InstallVSIXAction.LABEL)
];
}

View file

@ -367,7 +367,11 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
return !!(extension as Extension).gallery;
}
install(extension: IExtension): TPromise<void> {
install(extension: string | IExtension): TPromise<void> {
if (typeof extension === 'string') {
return this.extensionService.install(extension);
}
if (!(extension instanceof Extension)) {
return;
}