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

#14841 Listen to enablement changes

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