提交 a61546ac 编写于 作者: J Joao Moreno

extension gallery service uses IRequestService2

moves proxy business away from each consumer
上级 a672eeb4
...@@ -25,8 +25,9 @@ import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/ex ...@@ -25,8 +25,9 @@ import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/ex
import { ITelemetryService, combinedAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService, combinedAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { TelemetryService, ITelemetryServiceConfig } from 'vs/platform/telemetry/common/telemetryService'; import { TelemetryService, ITelemetryServiceConfig } from 'vs/platform/telemetry/common/telemetryService';
import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProperties'; import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProperties';
import { IRequestService } from 'vs/platform/request/common/request'; import { IRequestService, IRequestService2 } from 'vs/platform/request/common/request';
import { NodeRequestService } from 'vs/platform/request/node/nodeRequestService'; import { NodeRequestService } from 'vs/platform/request/node/nodeRequestService';
import { RequestService2 } from 'vs/platform/request/node/requestService2';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { NodeConfigurationService } from 'vs/platform/configuration/node/nodeConfigurationService'; import { NodeConfigurationService } from 'vs/platform/configuration/node/nodeConfigurationService';
import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender'; import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender';
...@@ -158,6 +159,7 @@ export function main(argv: ParsedArgs): TPromise<void> { ...@@ -158,6 +159,7 @@ export function main(argv: ParsedArgs): TPromise<void> {
services.set(IEventService, new SyncDescriptor(EventService)); services.set(IEventService, new SyncDescriptor(EventService));
services.set(IConfigurationService, new SyncDescriptor(NodeConfigurationService)); services.set(IConfigurationService, new SyncDescriptor(NodeConfigurationService));
services.set(IRequestService, new SyncDescriptor(NodeRequestService)); services.set(IRequestService, new SyncDescriptor(NodeRequestService));
services.set(IRequestService2, new SyncDescriptor(RequestService2));
services.set(IExtensionManagementService, new SyncDescriptor(ExtensionManagementService)); services.set(IExtensionManagementService, new SyncDescriptor(ExtensionManagementService));
services.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryService)); services.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryService));
......
...@@ -22,6 +22,8 @@ import { ExtensionManagementService } from 'vs/platform/extensionManagement/node ...@@ -22,6 +22,8 @@ import { ExtensionManagementService } from 'vs/platform/extensionManagement/node
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService'; import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { NodeConfigurationService } from 'vs/platform/configuration/node/nodeConfigurationService'; import { NodeConfigurationService } from 'vs/platform/configuration/node/nodeConfigurationService';
import { IRequestService2 } from 'vs/platform/request/common/request';
import { RequestService2 } from 'vs/platform/request/node/requestService2';
import { ITelemetryService, combinedAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService, combinedAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProperties'; import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProperties';
import { TelemetryAppenderChannel } from 'vs/platform/telemetry/common/telemetryIpc'; import { TelemetryAppenderChannel } from 'vs/platform/telemetry/common/telemetryIpc';
...@@ -57,6 +59,7 @@ function main(server: Server): void { ...@@ -57,6 +59,7 @@ function main(server: Server): void {
services.set(IEventService, new SyncDescriptor(EventService)); services.set(IEventService, new SyncDescriptor(EventService));
services.set(IEnvironmentService, new SyncDescriptor(EnvironmentService)); services.set(IEnvironmentService, new SyncDescriptor(EnvironmentService));
services.set(IConfigurationService, new SyncDescriptor(NodeConfigurationService)); services.set(IConfigurationService, new SyncDescriptor(NodeConfigurationService));
services.set(IRequestService2, new SyncDescriptor(RequestService2));
const instantiationService = new InstantiationService(services); const instantiationService = new InstantiationService(services);
......
...@@ -10,11 +10,10 @@ import { TPromise } from 'vs/base/common/winjs.base'; ...@@ -10,11 +10,10 @@ import { TPromise } from 'vs/base/common/winjs.base';
import { IGalleryExtension, IExtensionGalleryService, IQueryOptions, SortBy, SortOrder, IExtensionManifest } from 'vs/platform/extensionManagement/common/extensionManagement'; import { IGalleryExtension, IExtensionGalleryService, IQueryOptions, SortBy, SortOrder, IExtensionManifest } from 'vs/platform/extensionManagement/common/extensionManagement';
import { isUndefined } from 'vs/base/common/types'; import { isUndefined } from 'vs/base/common/types';
import { assign, getOrDefault } from 'vs/base/common/objects'; import { assign, getOrDefault } from 'vs/base/common/objects';
import { IRequestService } from 'vs/platform/request/common/request'; import { IRequestService2 } from 'vs/platform/request/common/request';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IPager } from 'vs/base/common/paging'; import { IPager } from 'vs/base/common/paging';
import { request, download, json, IRequestOptions } from 'vs/base/node/request'; import { download, json } from 'vs/base/node/request';
import { getProxyAgent } from 'vs/base/node/proxy';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import pkg from 'vs/platform/package'; import pkg from 'vs/platform/package';
import product from 'vs/platform/product'; import product from 'vs/platform/product';
...@@ -32,6 +31,11 @@ interface IRawGalleryExtensionVersion { ...@@ -32,6 +31,11 @@ interface IRawGalleryExtensionVersion {
files: IRawGalleryExtensionFile[]; files: IRawGalleryExtensionFile[];
} }
interface IRawGalleryExtensionStatistics {
statisticName: string;
value: number;
}
interface IRawGalleryExtension { interface IRawGalleryExtension {
extensionId: string; extensionId: string;
extensionName: string; extensionName: string;
...@@ -42,9 +46,17 @@ interface IRawGalleryExtension { ...@@ -42,9 +46,17 @@ interface IRawGalleryExtension {
statistics: IRawGalleryExtensionStatistics[]; statistics: IRawGalleryExtensionStatistics[];
} }
interface IRawGalleryExtensionStatistics { interface IRawGalleryQueryResult {
statisticName: string; results: {
value: number; extensions: IRawGalleryExtension[];
resultMetadata: {
metadataType: string;
metadataItems: {
name: string;
count: number;
}[];
}[]
}[];
} }
enum Flags { enum Flags {
...@@ -215,7 +227,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService { ...@@ -215,7 +227,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
} }
constructor( constructor(
@IRequestService private requestService: IRequestService, @IRequestService2 private requestService: IRequestService2,
@ITelemetryService private telemetryService: ITelemetryService, @ITelemetryService private telemetryService: ITelemetryService,
@IConfigurationService private configurationService: IConfigurationService @IConfigurationService private configurationService: IConfigurationService
) { ) {
...@@ -279,19 +291,25 @@ export class ExtensionGalleryService implements IExtensionGalleryService { ...@@ -279,19 +291,25 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
} }
private queryGallery(query: Query): TPromise<{ galleryExtensions: IRawGalleryExtension[], total: number; }> { private queryGallery(query: Query): TPromise<{ galleryExtensions: IRawGalleryExtension[], total: number; }> {
const data = JSON.stringify(query.raw);
const opts = this.request(this.api('/extensionquery'));
return this.getCommonHeaders() return this.getCommonHeaders()
.then(headers => assign(headers, { .then(headers => {
'Content-Type': 'application/json', const data = JSON.stringify(query.raw);
'Accept': 'application/json;api-version=3.0-preview.1',
'Accept-Encoding': 'gzip', headers = assign(headers, {
'Content-Length': data.length 'Content-Type': 'application/json',
})) 'Accept': 'application/json;api-version=3.0-preview.1',
.then(headers => assign(opts, { type: 'POST', data, headers })) 'Accept-Encoding': 'gzip',
.then(() => request(opts)) 'Content-Length': data.length
.then(context => json<any>(context)) });
return this.requestService.request({
type: 'POST',
url: this.api('/extensionquery'),
data,
headers
});
})
.then(context => json<IRawGalleryQueryResult>(context))
.then(result => { .then(result => {
const r = result.results[0]; const r = result.results[0];
const galleryExtensions = r.extensions; const galleryExtensions = r.extensions;
...@@ -320,11 +338,9 @@ export class ExtensionGalleryService implements IExtensionGalleryService { ...@@ -320,11 +338,9 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
return this.getLastValidExtensionVersion(rawExtension, rawExtension.versions).then(rawVersion => { return this.getLastValidExtensionVersion(rawExtension, rawExtension.versions).then(rawVersion => {
const url = `${ getAssetSource(rawVersion.files, AssetType.VSIX) }?install=true`; const url = `${ getAssetSource(rawVersion.files, AssetType.VSIX) }?install=true`;
const zipPath = path.join(tmpdir(), extension.id); const zipPath = path.join(tmpdir(), extension.id);
const opts = this.request(url);
return this.getCommonHeaders() return this.getCommonHeaders()
.then(headers => assign(opts, { headers })) .then(headers => this.requestService.request({ url, headers }))
.then(() => request(opts))
.then(context => download(zipPath, context)) .then(context => download(zipPath, context))
.then(() => zipPath); .then(() => zipPath);
}); });
...@@ -338,9 +354,10 @@ export class ExtensionGalleryService implements IExtensionGalleryService { ...@@ -338,9 +354,10 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
const version = versions[0]; const version = versions[0];
const url = getAssetSource(version.files, AssetType.Manifest); const url = getAssetSource(version.files, AssetType.Manifest);
const opts = assign(this.request(url), { headers: { 'accept-encoding': 'gzip' } });
return request(opts) return this.getCommonHeaders()
.then(headers => assign(headers, { 'accept-encoding': 'gzip' }))
.then(headers => this.requestService.request({ url, headers }))
.then(context => json<IExtensionManifest>(context)) .then(context => json<IExtensionManifest>(context))
.then(manifest => { .then(manifest => {
const desc = { const desc = {
...@@ -356,15 +373,4 @@ export class ExtensionGalleryService implements IExtensionGalleryService { ...@@ -356,15 +373,4 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
return version; return version;
}); });
} }
// Helper for proxy business... shameful.
// This should be pushed down and not rely on the context service
private request(url: string): IRequestOptions {
const httpConfig = this.configurationService.getConfiguration<any>('http') || {};
const proxyUrl = httpConfig.proxy as string;
const strictSSL = httpConfig.proxyStrictSSL as boolean;
const agent = getProxyAgent(url, { proxyUrl, strictSSL });
return { url, agent, strictSSL };
}
} }
\ No newline at end of file
...@@ -30,7 +30,9 @@ import {Update} from 'vs/workbench/electron-browser/update'; ...@@ -30,7 +30,9 @@ import {Update} from 'vs/workbench/electron-browser/update';
import {WorkspaceStats} from 'vs/workbench/services/telemetry/common/workspaceStats'; import {WorkspaceStats} from 'vs/workbench/services/telemetry/common/workspaceStats';
import {IWindowService, WindowService} from 'vs/workbench/services/window/electron-browser/windowService'; import {IWindowService, WindowService} from 'vs/workbench/services/window/electron-browser/windowService';
import {MessageService} from 'vs/workbench/services/message/electron-browser/messageService'; import {MessageService} from 'vs/workbench/services/message/electron-browser/messageService';
import {IRequestService,IRequestService2} from 'vs/platform/request/common/request';
import {RequestService} from 'vs/workbench/services/request/node/requestService'; import {RequestService} from 'vs/workbench/services/request/node/requestService';
import {RequestService2} from 'vs/platform/request/node/requestService2';
import {IConfigurationService} from 'vs/platform/configuration/common/configuration'; import {IConfigurationService} from 'vs/platform/configuration/common/configuration';
import {FileService} from 'vs/workbench/services/files/electron-browser/fileService'; import {FileService} from 'vs/workbench/services/files/electron-browser/fileService';
import {SearchService} from 'vs/workbench/services/search/node/searchService'; import {SearchService} from 'vs/workbench/services/search/node/searchService';
...@@ -57,7 +59,6 @@ import {ILifecycleService} from 'vs/platform/lifecycle/common/lifecycle'; ...@@ -57,7 +59,6 @@ import {ILifecycleService} from 'vs/platform/lifecycle/common/lifecycle';
import {IMarkerService} from 'vs/platform/markers/common/markers'; import {IMarkerService} from 'vs/platform/markers/common/markers';
import {IEnvironmentService} from 'vs/platform/environment/common/environment'; import {IEnvironmentService} from 'vs/platform/environment/common/environment';
import {IMessageService, Severity} from 'vs/platform/message/common/message'; import {IMessageService, Severity} from 'vs/platform/message/common/message';
import {IRequestService} from 'vs/platform/request/common/request';
import {ISearchService} from 'vs/platform/search/common/search'; import {ISearchService} from 'vs/platform/search/common/search';
import {IThreadService} from 'vs/workbench/services/thread/common/threadService'; import {IThreadService} from 'vs/workbench/services/thread/common/threadService';
import {ICommandService} from 'vs/platform/commands/common/commands'; import {ICommandService} from 'vs/platform/commands/common/commands';
...@@ -296,6 +297,9 @@ export class WorkbenchShell { ...@@ -296,6 +297,9 @@ export class WorkbenchShell {
const requestService = disposables.add(instantiationService.createInstance(RequestService)); const requestService = disposables.add(instantiationService.createInstance(RequestService));
serviceCollection.set(IRequestService, requestService); serviceCollection.set(IRequestService, requestService);
const requestService2 = instantiationService.createInstance(RequestService2);
serviceCollection.set(IRequestService2, requestService2);
const markerService = instantiationService.createInstance(MarkerService); const markerService = instantiationService.createInstance(MarkerService);
serviceCollection.set(IMarkerService, markerService); serviceCollection.set(IMarkerService, markerService);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册