parent
f0f50fe783
commit
2c39e558df
|
@ -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; };
|
||||
|
|
|
@ -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)));
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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>;
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue