提交 a158a8d4 编写于 作者: S Sandeep Somavarapu

Fix #60834

上级 299050a8
......@@ -966,7 +966,6 @@ export class ReloadAction extends Action {
get extension(): IExtension { return this._extension; }
set extension(extension: IExtension) { this._extension = extension; this.update(); }
reloadMessage: string = '';
private throttler: Throttler;
constructor(
......@@ -991,7 +990,6 @@ export class ReloadAction extends Action {
this.throttler.queue(() => {
this.enabled = false;
this.tooltip = '';
this.reloadMessage = '';
if (!this.extension) {
return Promise.resolve<void>(null);
}
......@@ -999,15 +997,20 @@ export class ReloadAction extends Action {
if (state === ExtensionState.Installing || state === ExtensionState.Uninstalling) {
return Promise.resolve<void>(null);
}
const installed = this.extensionsWorkbenchService.local.filter(e => e.id === this.extension.id)[0];
const local = this.extension.local || (installed && installed.local);
if (local && local.manifest && local.manifest.contributes && local.manifest.contributes.localizations && local.manifest.contributes.localizations.length > 0) {
return Promise.resolve<void>(null);
}
return this.extensionService.getExtensions()
.then(runningExtensions => this.computeReloadState(runningExtensions));
.then(runningExtensions => this.computeReloadState(runningExtensions, installed));
}).then(() => {
this.class = this.enabled ? ReloadAction.EnabledClass : ReloadAction.DisabledClass;
this.label = this.useLongLabel ? this.tooltip : localize('reloadAction', "Reload");
});
}
private computeReloadState(runningExtensions: IExtensionDescription[]): void {
const installed = this.extensionsWorkbenchService.local.filter(e => e.id === this.extension.id)[0];
private computeReloadState(runningExtensions: IExtensionDescription[], installed: IExtension): void {
const isUninstalled = this.extension.state === ExtensionState.Uninstalled;
const isDisabled = this.extension.local ? !this.extensionEnablementService.isEnabled(this.extension.local) : false;
const runningExtension = runningExtensions.filter(e => areSameExtensions(e, this.extension))[0];
......@@ -1018,15 +1021,13 @@ export class ReloadAction extends Action {
if (isDifferentVersionRunning && !isDisabled) {
// Requires reload to run the updated extension
this.enabled = true;
this.setTooltip(localize('postUpdateTooltip', "Reload to Update"));
this.reloadMessage = localize('postUpdateMessage', "Reload this window to activate the updated extension '{0}'?", this.extension.displayName);
this.tooltip = localize('postUpdateTooltip', "Reload to Update");
return;
}
if (isDisabled) {
// Requires reload to disable the extension
this.enabled = true;
this.setTooltip(localize('postDisableTooltip', "Reload to Deactivate"));
this.reloadMessage = localize('postDisableMessage', "Reload this window to deactivate the extension '{0}'?", this.extension.displayName);
this.tooltip = localize('postDisableTooltip', "Reload to Deactivate");
return;
}
} else {
......@@ -1036,8 +1037,7 @@ export class ReloadAction extends Action {
if (extensionServer && extensionServer.authority === localServer.authority && !isDisabled) {
// Requires reload to enable the extension
this.enabled = true;
this.setTooltip(localize('postEnableTooltip', "Reload to Activate"));
this.reloadMessage = localize('postEnableMessage', "Reload this window to activate the extension '{0}'?", this.extension.displayName);
this.tooltip = localize('postEnableTooltip', "Reload to Activate");
return;
}
}
......@@ -1047,19 +1047,11 @@ export class ReloadAction extends Action {
if (isUninstalled && runningExtension) {
// Requires reload to deactivate the extension
this.enabled = true;
this.setTooltip(localize('postUninstallTooltip', "Reload to Deactivate"));
this.reloadMessage = localize('postUninstallMessage', "Reload this window to deactivate the uninstalled extension '{0}'?", this.extension.displayName);
this.tooltip = localize('postUninstallTooltip', "Reload to Deactivate");
return;
}
}
private setTooltip(text: string) {
if (this.useLongLabel) {
this.label = text;
} else {
this.tooltip = text;
}
}
run(): Promise<any> {
return Promise.resolve(this.windowService.reloadWindow());
}
......
......@@ -11,7 +11,7 @@ import * as ExtensionsActions from 'vs/workbench/parts/extensions/electron-brows
import { ExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/node/extensionsWorkbenchService';
import {
IExtensionManagementService, IExtensionGalleryService, IExtensionEnablementService, IExtensionTipsService, ILocalExtension, LocalExtensionType, IGalleryExtension,
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IExtensionIdentifier, EnablementState, InstallOperation, IExtensionManagementServerService, IExtensionManagementServer
DidInstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionEvent, IExtensionIdentifier, EnablementState, InstallOperation, IExtensionManagementServerService, IExtensionManagementServer, IExtensionContributions
} from 'vs/platform/extensionManagement/common/extensionManagement';
import { getGalleryExtensionId, getGalleryExtensionIdFromLocal } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { ExtensionManagementService, getLocalExtensionIdFromGallery, getLocalExtensionIdFromManifest } from 'vs/platform/extensionManagement/node/extensionManagementService';
......@@ -1166,7 +1166,6 @@ suite('ExtensionsActions Test', () => {
.then(() => {
assert.ok(testObject.enabled);
assert.equal('Reload to Deactivate', testObject.tooltip);
assert.equal(`Reload this window to deactivate the extension 'a'?`, testObject.reloadMessage);
});
});
});
......@@ -1201,7 +1200,6 @@ suite('ExtensionsActions Test', () => {
.then(() => {
assert.ok(testObject.enabled);
assert.equal('Reload to Activate', testObject.tooltip);
assert.equal(`Reload this window to activate the extension 'a'?`, testObject.reloadMessage);
});
});
});
......@@ -1244,13 +1242,43 @@ suite('ExtensionsActions Test', () => {
.then(() => {
assert.ok(testObject.enabled);
assert.equal('Reload to Activate', testObject.tooltip);
assert.equal(`Reload this window to activate the extension 'a'?`, testObject.reloadMessage);
});
});
});
});
test('Test ReloadAction when a localization extension is newly installed', async () => {
instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ id: 'pub.b', extensionLocation: URI.file('pub.b') }]);
const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction, false);
const gallery = aGalleryExtension('a');
instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
const paged = await instantiationService.get(IExtensionsWorkbenchService).queryGallery();
testObject.extension = paged.firstPage[0];
assert.ok(!testObject.enabled);
installEvent.fire({ identifier: gallery.identifier, gallery });
didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', { ...gallery, ...{ contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } } }, gallery) });
assert.ok(!testObject.enabled);
});
test('Test ReloadAction when a localization extension is updated while running', async () => {
instantiationService.stubPromise(IExtensionService, 'getExtensions', [{ id: 'pub.a', version: '1.0.1', extensionLocation: URI.file('pub.a') }]);
const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction, false);
const local = aLocalExtension('a', { version: '1.0.1', contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } });
const workbenchService = instantiationService.get(IExtensionsWorkbenchService);
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]);
const extensions = await workbenchService.queryLocal();
testObject.extension = extensions[0];
const gallery = aGalleryExtension('a', { uuid: local.identifier.id, version: '1.0.2' });
installEvent.fire({ identifier: gallery.identifier, gallery });
didInstallEvent.fire({ identifier: gallery.identifier, gallery, operation: InstallOperation.Install, local: aLocalExtension('a', { ...gallery, ...{ contributes: <IExtensionContributions>{ localizations: [{ languageId: 'de', translations: [] }] } } }, gallery) });
assert.ok(!testObject.enabled);
});
test(`RecommendToFolderAction`, () => {
// TODO: Implement test
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册