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

lint: fix extension management layer breakage

#15293
上级 5d949f10
......@@ -5,12 +5,11 @@
'use strict';
import nls = require('vs/nls');
import { localize } from 'vs/nls';
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 const EXTENSION_IDENTIFIER_PATTERN = '^[a-z0-9A-Z][a-z0-9\-A-Z]*\\.[a-z0-9A-Z][a-z0-9\-A-Z]*$';
export const EXTENSION_IDENTIFIER_REGEX = new RegExp(EXTENSION_IDENTIFIER_PATTERN);
......@@ -202,7 +201,8 @@ export interface IExtensionGalleryService {
getRequestHeaders(): TPromise<{ [key: string]: string; }>;
query(options?: IQueryOptions): TPromise<IPager<IGalleryExtension>>;
download(extension: IGalleryExtension): TPromise<string>;
getAsset(url: string): TPromise<IRequestContext>;
getReadme(extension: IGalleryExtension): TPromise<string>;
getManifest(extension: IGalleryExtension): TPromise<IExtensionManifest>;
loadCompatibleVersion(extension: IGalleryExtension): TPromise<IGalleryExtension>;
getAllDependencies(extension: IGalleryExtension): TPromise<IGalleryExtension[]>;
}
......@@ -288,5 +288,5 @@ export interface IExtensionTipsService {
getWorkspaceRecommendations(): string[];
}
export const ExtensionsLabel = nls.localize('extensions', "Extensions");
export const ExtensionsLabel = localize('extensions', "Extensions");
export const ExtensionsChannelId = 'extensions';
\ No newline at end of file
......@@ -17,7 +17,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 { IRequestOptions, IRequestContext, download, asJson } from 'vs/base/node/request';
import { IRequestOptions, IRequestContext, download, asJson, asText } 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';
......@@ -371,15 +371,30 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
const startTime = new Date().getTime();
const log = duration => this.telemetryService.publicLog('galleryService:downloadVSIX', assign(data, { duration }));
return this._getAsset({ url })
return this.getAsset({ url })
.then(context => download(zipPath, context))
.then(() => log(new Date().getTime() - startTime))
.then(() => zipPath);
});
}
getAsset(url: string): TPromise<IRequestContext> {
return this._getAsset({ url });
getReadme(extension: IGalleryExtension): TPromise<string> {
const url = extension.assets.readme;
if (!url) {
return TPromise.wrapError('not available');
}
return this.getAsset({ url })
.then(asText);
}
getManifest(extension: IGalleryExtension): TPromise<IExtensionManifest> {
const url = extension.assets.manifest;
return this.getAsset({ url })
.then(asText)
.then(JSON.parse);
}
getAllDependencies(extension: IGalleryExtension): TPromise<IGalleryExtension[]> {
......@@ -469,7 +484,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
* Always try with the `redirect=true` query string.
* If that does not return 200, try without it.
*/
private _getAsset(options: IRequestOptions): TPromise<IRequestContext> {
private getAsset(options: IRequestOptions): TPromise<IRequestContext> {
const parsedUrl = url.parse(options.url, true);
parsedUrl.search = undefined;
parsedUrl.query['redirect'] = 'true';
......@@ -525,7 +540,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
const url = getAssetSource(version.files, AssetType.Manifest);
const headers = { 'Accept-Encoding': 'gzip' };
return this._getAsset({ url, headers })
return this.getAsset({ url, headers })
.then(context => asJson<IExtensionManifest>(context))
.then(manifest => {
const engine = manifest.engines.vscode;
......
......@@ -6,7 +6,6 @@
'use strict';
import { readFile } from 'vs/base/node/pfs';
import { asText } from 'vs/base/node/request';
import * as semver from 'semver';
import * as path from 'path';
import Event, { Emitter, chain } from 'vs/base/common/event';
......@@ -100,14 +99,6 @@ class Extension implements IExtension {
return this.local ? this.local.manifest.description : this.gallery.description;
}
private get readmeUrl(): string {
if (this.local && this.local.readmeUrl) {
return this.local.readmeUrl;
}
return this.gallery && this.gallery.assets.readme;
}
private get changelogUrl(): string {
if (this.local && this.local.changelogUrl) {
return this.local.changelogUrl;
......@@ -180,25 +171,20 @@ class Extension implements IExtension {
return TPromise.as(this.local.manifest);
}
return this.galleryService.getAsset(this.gallery.assets.manifest)
.then(asText)
.then(raw => JSON.parse(raw) as IExtensionManifest);
return this.galleryService.getManifest(this.gallery);
}
getReadme(): TPromise<string> {
const readmeUrl = this.readmeUrl;
if (!readmeUrl) {
return TPromise.wrapError('not available');
if (this.local && this.local.readmeUrl) {
const uri = URI.parse(this.local.readmeUrl);
return readFile(uri.fsPath, 'utf8');
}
const uri = URI.parse(readmeUrl);
if (uri.scheme === 'file') {
return readFile(uri.fsPath, 'utf8');
if (this.gallery) {
return this.galleryService.getReadme(this.gallery);
}
return this.galleryService.getAsset(readmeUrl).then(asText);
return TPromise.wrapError('not available');
}
getChangelog(): TPromise<string> {
......@@ -214,6 +200,7 @@ class Extension implements IExtension {
return readFile(uri.fsPath, 'utf8');
}
// TODO@Joao
return TPromise.wrapError('not available');
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册