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

Fix #60834

上级 299050a8
...@@ -966,7 +966,6 @@ export class ReloadAction extends Action { ...@@ -966,7 +966,6 @@ export class ReloadAction extends Action {
get extension(): IExtension { return this._extension; } get extension(): IExtension { return this._extension; }
set extension(extension: IExtension) { this._extension = extension; this.update(); } set extension(extension: IExtension) { this._extension = extension; this.update(); }
reloadMessage: string = '';
private throttler: Throttler; private throttler: Throttler;
constructor( constructor(
...@@ -991,7 +990,6 @@ export class ReloadAction extends Action { ...@@ -991,7 +990,6 @@ export class ReloadAction extends Action {
this.throttler.queue(() => { this.throttler.queue(() => {
this.enabled = false; this.enabled = false;
this.tooltip = ''; this.tooltip = '';
this.reloadMessage = '';
if (!this.extension) { if (!this.extension) {
return Promise.resolve<void>(null); return Promise.resolve<void>(null);
} }
...@@ -999,15 +997,20 @@ export class ReloadAction extends Action { ...@@ -999,15 +997,20 @@ export class ReloadAction extends Action {
if (state === ExtensionState.Installing || state === ExtensionState.Uninstalling) { if (state === ExtensionState.Installing || state === ExtensionState.Uninstalling) {
return Promise.resolve<void>(null); 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() return this.extensionService.getExtensions()
.then(runningExtensions => this.computeReloadState(runningExtensions)); .then(runningExtensions => this.computeReloadState(runningExtensions, installed));
}).then(() => { }).then(() => {
this.class = this.enabled ? ReloadAction.EnabledClass : ReloadAction.DisabledClass; this.class = this.enabled ? ReloadAction.EnabledClass : ReloadAction.DisabledClass;
this.label = this.useLongLabel ? this.tooltip : localize('reloadAction', "Reload");
}); });
} }
private computeReloadState(runningExtensions: IExtensionDescription[]): void { private computeReloadState(runningExtensions: IExtensionDescription[], installed: IExtension): void {
const installed = this.extensionsWorkbenchService.local.filter(e => e.id === this.extension.id)[0];
const isUninstalled = this.extension.state === ExtensionState.Uninstalled; const isUninstalled = this.extension.state === ExtensionState.Uninstalled;
const isDisabled = this.extension.local ? !this.extensionEnablementService.isEnabled(this.extension.local) : false; const isDisabled = this.extension.local ? !this.extensionEnablementService.isEnabled(this.extension.local) : false;
const runningExtension = runningExtensions.filter(e => areSameExtensions(e, this.extension))[0]; const runningExtension = runningExtensions.filter(e => areSameExtensions(e, this.extension))[0];
...@@ -1018,15 +1021,13 @@ export class ReloadAction extends Action { ...@@ -1018,15 +1021,13 @@ export class ReloadAction extends Action {
if (isDifferentVersionRunning && !isDisabled) { if (isDifferentVersionRunning && !isDisabled) {
// Requires reload to run the updated extension // Requires reload to run the updated extension
this.enabled = true; this.enabled = true;
this.setTooltip(localize('postUpdateTooltip', "Reload to Update")); this.tooltip = localize('postUpdateTooltip', "Reload to Update");
this.reloadMessage = localize('postUpdateMessage', "Reload this window to activate the updated extension '{0}'?", this.extension.displayName);
return; return;
} }
if (isDisabled) { if (isDisabled) {
// Requires reload to disable the extension // Requires reload to disable the extension
this.enabled = true; this.enabled = true;
this.setTooltip(localize('postDisableTooltip', "Reload to Deactivate")); this.tooltip = localize('postDisableTooltip', "Reload to Deactivate");
this.reloadMessage = localize('postDisableMessage', "Reload this window to deactivate the extension '{0}'?", this.extension.displayName);
return; return;
} }
} else { } else {
...@@ -1036,8 +1037,7 @@ export class ReloadAction extends Action { ...@@ -1036,8 +1037,7 @@ export class ReloadAction extends Action {
if (extensionServer && extensionServer.authority === localServer.authority && !isDisabled) { if (extensionServer && extensionServer.authority === localServer.authority && !isDisabled) {
// Requires reload to enable the extension // Requires reload to enable the extension
this.enabled = true; this.enabled = true;
this.setTooltip(localize('postEnableTooltip', "Reload to Activate")); this.tooltip = localize('postEnableTooltip', "Reload to Activate");
this.reloadMessage = localize('postEnableMessage', "Reload this window to activate the extension '{0}'?", this.extension.displayName);
return; return;
} }
} }
...@@ -1047,19 +1047,11 @@ export class ReloadAction extends Action { ...@@ -1047,19 +1047,11 @@ export class ReloadAction extends Action {
if (isUninstalled && runningExtension) { if (isUninstalled && runningExtension) {
// Requires reload to deactivate the extension // Requires reload to deactivate the extension
this.enabled = true; this.enabled = true;
this.setTooltip(localize('postUninstallTooltip', "Reload to Deactivate")); this.tooltip = localize('postUninstallTooltip', "Reload to Deactivate");
this.reloadMessage = localize('postUninstallMessage', "Reload this window to deactivate the uninstalled extension '{0}'?", this.extension.displayName);
return; return;
} }
} }
private setTooltip(text: string) {
if (this.useLongLabel) {
this.label = text;
} else {
this.tooltip = text;
}
}
run(): Promise<any> { run(): Promise<any> {
return Promise.resolve(this.windowService.reloadWindow()); return Promise.resolve(this.windowService.reloadWindow());
} }
......
...@@ -11,7 +11,7 @@ import * as ExtensionsActions from 'vs/workbench/parts/extensions/electron-brows ...@@ -11,7 +11,7 @@ import * as ExtensionsActions from 'vs/workbench/parts/extensions/electron-brows
import { ExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/node/extensionsWorkbenchService'; import { ExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/node/extensionsWorkbenchService';
import { import {
IExtensionManagementService, IExtensionGalleryService, IExtensionEnablementService, IExtensionTipsService, ILocalExtension, LocalExtensionType, IGalleryExtension, 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'; } from 'vs/platform/extensionManagement/common/extensionManagement';
import { getGalleryExtensionId, getGalleryExtensionIdFromLocal } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; import { getGalleryExtensionId, getGalleryExtensionIdFromLocal } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { ExtensionManagementService, getLocalExtensionIdFromGallery, getLocalExtensionIdFromManifest } from 'vs/platform/extensionManagement/node/extensionManagementService'; import { ExtensionManagementService, getLocalExtensionIdFromGallery, getLocalExtensionIdFromManifest } from 'vs/platform/extensionManagement/node/extensionManagementService';
...@@ -1166,7 +1166,6 @@ suite('ExtensionsActions Test', () => { ...@@ -1166,7 +1166,6 @@ suite('ExtensionsActions Test', () => {
.then(() => { .then(() => {
assert.ok(testObject.enabled); assert.ok(testObject.enabled);
assert.equal('Reload to Deactivate', testObject.tooltip); 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', () => { ...@@ -1201,7 +1200,6 @@ suite('ExtensionsActions Test', () => {
.then(() => { .then(() => {
assert.ok(testObject.enabled); assert.ok(testObject.enabled);
assert.equal('Reload to Activate', testObject.tooltip); 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', () => { ...@@ -1244,13 +1242,43 @@ suite('ExtensionsActions Test', () => {
.then(() => { .then(() => {
assert.ok(testObject.enabled); assert.ok(testObject.enabled);
assert.equal('Reload to Activate', testObject.tooltip); 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`, () => { test(`RecommendToFolderAction`, () => {
// TODO: Implement test // TODO: Implement test
}); });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册