install vsix action
This commit is contained in:
parent
dc172cddf8
commit
7b7719158c
|
@ -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>;
|
||||
|
|
|
@ -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)));
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue