提交 5a216728 编写于 作者: S Sandeep Somavarapu

#14841 Listen to enablement changes

上级 322dff53
......@@ -6,6 +6,7 @@
import { localize } from 'vs/nls';
import { TPromise } from 'vs/base/common/winjs.base';
import { distinct } from 'vs/base/common/arrays';
import Event, { Emitter } from 'vs/base/common/event';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IExtensionManagementService, DidUninstallExtensionEvent, IExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IWorkspaceContextService, IWorkspace } from 'vs/platform/workspace/common/workspace';
......@@ -22,6 +23,9 @@ export class ExtensionEnablementService implements IExtensionEnablementService {
private workspace: IWorkspace;
private disposables: IDisposable[] = [];
private _onEnablementChanged = new Emitter<string>();
public onEnablementChanged: Event<string> = this._onEnablementChanged.event;
constructor(
@IStorageService private storageService: IStorageService,
@IWorkspaceContextService contextService: IWorkspaceContextService,
......@@ -98,7 +102,7 @@ export class ExtensionEnablementService implements IExtensionEnablementService {
private disableExtension(identifier: string, scope: StorageScope): TPromise<boolean> {
let disabledExtensions = this._getDisabledExtensions(scope);
disabledExtensions.push(identifier);
this._setDisabledExtensions(disabledExtensions, scope);
this._setDisabledExtensions(disabledExtensions, scope, identifier);
return TPromise.wrap(true);
}
......@@ -107,7 +111,7 @@ export class ExtensionEnablementService implements IExtensionEnablementService {
const index = disabledExtensions.indexOf(identifier);
if (index !== -1) {
disabledExtensions.splice(index, 1);
this._setDisabledExtensions(disabledExtensions, scope);
this._setDisabledExtensions(disabledExtensions, scope, identifier);
}
return TPromise.wrap(true);
}
......@@ -117,12 +121,13 @@ export class ExtensionEnablementService implements IExtensionEnablementService {
return value ? distinct(value.split(',')) : [];
}
private _setDisabledExtensions(disabledExtensions: string[], scope: StorageScope): void {
private _setDisabledExtensions(disabledExtensions: string[], scope: StorageScope, extension: string): void {
if (disabledExtensions.length) {
this.storageService.store(DISABLED_EXTENSIONS_STORAGE_PATH, disabledExtensions.join(','), scope);
} else {
this.storageService.remove(DISABLED_EXTENSIONS_STORAGE_PATH, scope);
}
this._onEnablementChanged.fire(extension);
}
private onDidUninstallExtension({id, error}: DidUninstallExtensionEvent): void {
......
......@@ -242,7 +242,7 @@ export interface IExtensionEnablementService {
/**
* Event to listen on for extension enablement changes
*/
// onEnablementChanged: Event<string>;
onEnablementChanged: Event<string>;
/**
* Returns all globally disabled extension identifiers.
......
......@@ -319,6 +319,7 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
extensionService.onDidInstallExtension(this.onDidInstallExtension, this, this.disposables);
extensionService.onUninstallExtension(this.onUninstallExtension, this, this.disposables);
extensionService.onDidUninstallExtension(this.onDidUninstallExtension, this, this.disposables);
extensionEnablementService.onEnablementChanged(this.onEnablementChanged, this, this.disposables);
this.syncDelayer = new ThrottledDelayer<void>(ExtensionsWorkbenchService.SyncPeriod);
this.autoUpdateDelayer = new ThrottledDelayer<void>(1000);
......@@ -484,7 +485,6 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
}
return this.doSetEnablement(extension, enable, workspace).then(reload => {
this.updatedDisableFlags(extension);
this.telemetryService.publicLog(enable ? 'extension:enable' : 'extension:disable', extension.telemetryData);
this._onChange.fire();
});
......@@ -599,18 +599,20 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
}
if (!error) {
this.updatedDisableFlags(uninstalling.extension);
this.reportTelemetry(uninstalling, true);
}
this._onChange.fire();
}
private updatedDisableFlags(extension: IExtension) {
const globallyDisabledExtensions = this.extensionEnablementService.getGloballyDisabledExtensions();
const workspaceDisabledExtensions = this.extensionEnablementService.getWorkspaceDisabledExtensions();
extension.disabledGlobally = globallyDisabledExtensions.indexOf(extension.identifier) !== -1;
extension.disabledForWorkspace = workspaceDisabledExtensions.indexOf(extension.identifier) !== -1;
private onEnablementChanged(extensionIdentifier: string) {
const [extension] = this.local.filter(e => e.identifier === extensionIdentifier);
if (extension) {
const globallyDisabledExtensions = this.extensionEnablementService.getGloballyDisabledExtensions();
const workspaceDisabledExtensions = this.extensionEnablementService.getWorkspaceDisabledExtensions();
extension.disabledGlobally = globallyDisabledExtensions.indexOf(extension.identifier) !== -1;
extension.disabledForWorkspace = workspaceDisabledExtensions.indexOf(extension.identifier) !== -1;
}
}
private getExtensionState(extension: Extension): ExtensionState {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册