isolate gallery.getAsset

fixes #10609
This commit is contained in:
Joao Moreno 2016-08-17 17:17:42 +02:00
parent f0f50fe783
commit 2c39e558df
5 changed files with 31 additions and 7 deletions

View file

@ -10,6 +10,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
import Event from 'vs/base/common/event';
import { IPager } from 'vs/base/common/paging';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IRequestContext } from 'vs/base/node/request';
export interface IExtensionManifest {
name: string;
@ -99,6 +100,7 @@ export interface IExtensionGalleryService {
isEnabled(): boolean;
query(options?: IQueryOptions): TPromise<IPager<IGalleryExtension>>;
download(extension: IGalleryExtension): TPromise<string>;
getAsset(url: string): TPromise<IRequestContext>;
}
export type InstallExtensionEvent = { id: string; gallery?: IGalleryExtension; };

View file

@ -13,7 +13,7 @@ import { assign, getOrDefault } from 'vs/base/common/objects';
import { IRequestService } from 'vs/platform/request/common/request';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IPager } from 'vs/base/common/paging';
import { download, asJson } from 'vs/base/node/request';
import { IRequestOptions, IRequestContext, download, asJson } from 'vs/base/node/request';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import pkg from 'vs/platform/package';
import product from 'vs/platform/product';
@ -340,13 +340,21 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
const zipPath = path.join(tmpdir(), extension.id);
return this.getCommonHeaders()
.then(headers => this.requestService.request({ url, headers }))
.then(headers => this._getAsset({ url, headers }))
.then(context => download(zipPath, context))
.then(() => zipPath);
});
});
}
getAsset(url: string): TPromise<IRequestContext> {
return this._getAsset({ url });
}
private _getAsset(options: IRequestOptions): TPromise<IRequestContext> {
return this.requestService.request(options);
}
private getLastValidExtensionVersion(extension: IRawGalleryExtension, versions: IRawGalleryExtensionVersion[]): TPromise<IRawGalleryExtensionVersion> {
if (!versions.length) {
return TPromise.wrapError(new Error(localize('noCompatible', "Couldn't find a compatible version of {0} with this version of Code.", extension.displayName || extension.extensionName)));

View file

@ -18,8 +18,6 @@ import { IViewlet } from 'vs/workbench/common/viewlet';
import { IViewletService } from 'vs/workbench/services/viewlet/common/viewletService';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { asText } from 'vs/base/node/request';
import { IRequestService } from 'vs/platform/request/common/request';
import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IThemeService } from 'vs/workbench/services/themes/common/themeService';
import { ExtensionsInput } from './extensionsInput';
@ -71,7 +69,6 @@ export class ExtensionEditor extends BaseEditor {
@IExtensionGalleryService private galleryService: IExtensionGalleryService,
@IConfigurationService private configurationService: IConfigurationService,
@IInstantiationService private instantiationService: IInstantiationService,
@IRequestService private requestService: IRequestService,
@IViewletService private viewletService: IViewletService,
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
@IThemeService private themeService: IThemeService,
@ -176,8 +173,7 @@ export class ExtensionEditor extends BaseEditor {
if (extension.readmeUrl) {
promise = promise
.then(() => addClass(this.body, 'loading'))
.then(() => this.requestService.request({ url: extension.readmeUrl }))
.then(asText)
.then(() => this.extensionsWorkbenchService.getReadmeContents(extension))
.then(marked.parse)
.then<void>(body => {
const webview = new WebView(

View file

@ -56,4 +56,5 @@ export interface IExtensionsWorkbenchService {
canInstall(extension: IExtension): boolean;
install(extension: IExtension): TPromise<void>;
uninstall(extension: IExtension): TPromise<void>;
getReadmeContents(extension: IExtension): TPromise<string>;
}

View file

@ -18,6 +18,8 @@ import { IExtensionManagementService, IExtensionGalleryService, IExtensionTipsSe
import * as semver from 'semver';
import * as path from 'path';
import URI from 'vs/base/common/uri';
import { readFile } from 'vs/base/node/pfs';
import { asText } from 'vs/base/node/request';
import { IExtension, ExtensionState, IExtensionsWorkbenchService } from './extensions';
interface IExtensionStateProvider {
@ -415,6 +417,21 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
this.telemetryService.publicLog(eventName, assign(data, { success, duration }));
}
getReadmeContents(extension: IExtension): TPromise<string> {
if (!extension.readmeUrl) {
return TPromise.as('');
}
const uri = URI.parse(extension.readmeUrl);
if (uri.scheme === 'file') {
return readFile(uri.fsPath, 'utf8');
}
return this.galleryService.getAsset(extension.readmeUrl)
.then(asText);
}
dispose(): void {
this.disposables = dispose(this.disposables);
}