提交 a05a4fde 编写于 作者: J Joao Moreno

Merge branch 'master' of https://github.com/akamud/vscode into akamud-master

......@@ -54,3 +54,26 @@ export class InstallExtensionAction extends Action {
return true;
}
}
export class ListExtensionsUpdatesAction extends Action {
static ID = 'workbench.extensions.action.listExtensionsUpdates';
static LABEL = nls.localize('showExtensionsUpdates', "Show Extensions Updates");
constructor(
id: string,
label: string,
@IExtensionsService private extensionsService: IExtensionsService,
@IQuickOpenService private quickOpenService: IQuickOpenService
) {
super(id, label, null, true);
}
public run(): Promise {
return this.quickOpenService.show('ext update ');
}
protected isEnabled(): boolean {
return true;
}
}
......@@ -469,6 +469,80 @@ export class GalleryExtensionsHandler extends QuickOpenHandler {
return nls.localize('noExtensionsToInstall', "No extensions found");
}
getAutoFocus(searchValue: string): IAutoFocus {
return { autoFocusFirstEntry: true };
}
}
class ExtensionsUpdateModel implements IModel<IExtensionEntry> {
public dataSource = new DataSource();
public renderer: IRenderer<IExtensionEntry>;
public runner: IRunner<IExtensionEntry>;
public entries: IExtensionEntry[];
constructor(
private galleryExtensions: IExtension[],
private localExtensions: IExtension[],
@IInstantiationService instantiationService: IInstantiationService
) {
this.renderer = instantiationService.createInstance(Renderer);
this.runner = instantiationService.createInstance(InstallRunner);
this.entries = [];
}
public set input(input: string) {
this.entries = this.galleryExtensions
.map(extension => ({ extension, highlights: getHighlights(input, extension) }))
.filter(({ extension, highlights }) => {
const local = this.localExtensions.filter(local => extensionEquals(local, extension))[0];
return local && local.version < extension.version && !!highlights;
})
.map(({ extension, highlights }: { extension: IExtension, highlights: IHighlights }) => {
return {
extension,
highlights,
state: ExtensionState.Outdated
};
})
.sort((a, b) => a.extension.name.localeCompare(b.extension.name));
}
}
export class ExtensionsUpdateHandler extends QuickOpenHandler {
private modelPromise: TPromise<ExtensionsUpdateModel>;
constructor(
@IInstantiationService private instantiationService: IInstantiationService,
@IExtensionsService private extensionsService: IExtensionsService,
@IGalleryService private galleryService: IGalleryService,
@ITelemetryService private telemetryService: ITelemetryService
) {
super();
}
getResults(input: string): TPromise<IModel<IExtensionEntry>> {
if (!this.modelPromise) {
this.telemetryService.publicLog('extensionGallery:open');
this.modelPromise = TPromise.join<any>([this.galleryService.query(), this.extensionsService.getInstalled()])
.then(result => this.instantiationService.createInstance(ExtensionsUpdateModel, result[0], result[1]));
}
return this.modelPromise.then(model => {
model.input = input;
return model;
});
}
onClose(canceled: boolean): void {
this.modelPromise = null;
}
getEmptyLabel(input: string): string {
return nls.localize('noOutdatedExtensions', "No outdated extensions found");
}
getAutoFocus(searchValue: string): IAutoFocus {
return { autoFocusFirstEntry: true };
}
......
......@@ -16,7 +16,7 @@ import { IWorkspaceContextService } from 'vs/workbench/services/workspace/common
import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions';
import wbaregistry = require('vs/workbench/browser/actionRegistry');
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
import { ListExtensionsAction, InstallExtensionAction } from './extensionsActions';
import { ListExtensionsAction, InstallExtensionAction, ListExtensionsUpdatesAction } from './extensionsActions';
import { IQuickOpenRegistry, Extensions, QuickOpenHandlerDescriptor } from 'vs/workbench/browser/quickopen';
import ipc = require('ipc');
......@@ -67,6 +67,18 @@ export class ExtensionsWorkbenchExtension implements IWorkbenchContribution {
true
)
);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ListExtensionsUpdatesAction, ListExtensionsUpdatesAction.ID, ListExtensionsUpdatesAction.LABEL), extensionsCategory);
(<IQuickOpenRegistry>platform.Registry.as(Extensions.Quickopen)).registerQuickOpenHandler(
new QuickOpenHandlerDescriptor(
'vs/workbench/parts/extensions/electron-browser/extensionsQuickOpen',
'ExtensionsUpdateHandler',
'ext update ',
nls.localize('extensionsUpdateCommands', "Extensions Update Commands"),
true
)
);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册