Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/extensionManagement/common/extensionGalleryManifestServiceIpc.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { Barrier } from '../../../base/common/async.js';
7
import { Emitter, Event } from '../../../base/common/event.js';
8
import { IPCServer } from '../../../base/parts/ipc/common/ipc.js';
9
import { IProductService } from '../../product/common/productService.js';
10
import { IExtensionGalleryManifest, IExtensionGalleryManifestService, ExtensionGalleryManifestStatus } from './extensionGalleryManifest.js';
11
import { ExtensionGalleryManifestService } from './extensionGalleryManifestService.js';
12
13
export class ExtensionGalleryManifestIPCService extends ExtensionGalleryManifestService implements IExtensionGalleryManifestService {
14
15
declare readonly _serviceBrand: undefined;
16
17
private _onDidChangeExtensionGalleryManifest = this._register(new Emitter<IExtensionGalleryManifest | null>());
18
override readonly onDidChangeExtensionGalleryManifest = this._onDidChangeExtensionGalleryManifest.event;
19
20
private _onDidChangeExtensionGalleryManifestStatus = this._register(new Emitter<ExtensionGalleryManifestStatus>());
21
override readonly onDidChangeExtensionGalleryManifestStatus = this._onDidChangeExtensionGalleryManifestStatus.event;
22
23
private _extensionGalleryManifest: IExtensionGalleryManifest | null | undefined;
24
private readonly barrier = new Barrier();
25
26
override get extensionGalleryManifestStatus(): ExtensionGalleryManifestStatus {
27
return this._extensionGalleryManifest ? ExtensionGalleryManifestStatus.Available : ExtensionGalleryManifestStatus.Unavailable;
28
}
29
30
constructor(
31
server: IPCServer<any>,
32
@IProductService productService: IProductService
33
) {
34
super(productService);
35
server.registerChannel('extensionGalleryManifest', {
36
listen: () => Event.None,
37
call: async (context: any, command: string, args?: any): Promise<any> => {
38
switch (command) {
39
case 'setExtensionGalleryManifest': return Promise.resolve(this.setExtensionGalleryManifest(args[0]));
40
}
41
throw new Error('Invalid call');
42
}
43
});
44
}
45
46
override async getExtensionGalleryManifest(): Promise<IExtensionGalleryManifest | null> {
47
await this.barrier.wait();
48
return this._extensionGalleryManifest ?? null;
49
}
50
51
private setExtensionGalleryManifest(manifest: IExtensionGalleryManifest | null): void {
52
this._extensionGalleryManifest = manifest;
53
this._onDidChangeExtensionGalleryManifest.fire(manifest);
54
this._onDidChangeExtensionGalleryManifestStatus.fire(this.extensionGalleryManifestStatus);
55
this.barrier.open();
56
}
57
58
}
59
60