viewsWelcomeContribution.ts 2.4 KB
Newer Older
1 2 3 4 5 6 7 8 9
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { IExtensionPoint } from 'vs/workbench/services/extensions/common/extensionsRegistry';
10
import { ViewsWelcomeExtensionPoint, ViewWelcome, viewsWelcomeExtensionPointDescriptor } from './viewsWelcomeExtensionPoint';
11 12
import { Registry } from 'vs/platform/registry/common/platform';
import { Extensions as ViewContainerExtensions, IViewsRegistry } from 'vs/workbench/common/views';
13
import { localize } from 'vs/nls';
14 15 16 17 18 19 20 21 22 23 24 25

const viewsRegistry = Registry.as<IViewsRegistry>(ViewContainerExtensions.ViewsRegistry);

export class ViewsWelcomeContribution extends Disposable implements IWorkbenchContribution {

	private viewWelcomeContents = new Map<ViewWelcome, IDisposable>();

	constructor(extensionPoint: IExtensionPoint<ViewsWelcomeExtensionPoint>) {
		super();

		extensionPoint.setHandler((_, { added, removed }) => {
			for (const contribution of removed) {
26 27 28 29 30
				// Proposed API check
				if (!contribution.description.enableProposedApi) {
					continue;
				}

31 32 33 34 35 36 37 38 39 40
				for (const welcome of contribution.value) {
					const disposable = this.viewWelcomeContents.get(welcome);

					if (disposable) {
						disposable.dispose();
					}
				}
			}

			for (const contribution of added) {
41 42 43 44 45 46
				// Proposed API check
				if (!contribution.description.enableProposedApi) {
					contribution.collector.error(localize('proposedAPI.invalid', "The '{0}' contribution is a proposed API and is only available when running out of dev or with the following command line switch: --enable-proposed-api {1}", viewsWelcomeExtensionPointDescriptor.extensionPoint, contribution.description.identifier.value));
					continue;
				}

47
				for (const welcome of contribution.value) {
J
Joao Moreno 已提交
48
					const disposable = viewsRegistry.registerViewWelcomeContent(welcome.view, {
49 50 51 52 53 54 55 56 57 58
						content: welcome.contents,
						when: ContextKeyExpr.deserialize(welcome.when)
					});

					this.viewWelcomeContents.set(welcome, disposable);
				}
			}
		});
	}
}