parent
f0f50fe783
commit
2c39e558df
|
@ -10,6 +10,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import Event from 'vs/base/common/event';
|
import Event from 'vs/base/common/event';
|
||||||
import { IPager } from 'vs/base/common/paging';
|
import { IPager } from 'vs/base/common/paging';
|
||||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
import { IRequestContext } from 'vs/base/node/request';
|
||||||
|
|
||||||
export interface IExtensionManifest {
|
export interface IExtensionManifest {
|
||||||
name: string;
|
name: string;
|
||||||
|
@ -99,6 +100,7 @@ export interface IExtensionGalleryService {
|
||||||
isEnabled(): boolean;
|
isEnabled(): boolean;
|
||||||
query(options?: IQueryOptions): TPromise<IPager<IGalleryExtension>>;
|
query(options?: IQueryOptions): TPromise<IPager<IGalleryExtension>>;
|
||||||
download(extension: IGalleryExtension): TPromise<string>;
|
download(extension: IGalleryExtension): TPromise<string>;
|
||||||
|
getAsset(url: string): TPromise<IRequestContext>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type InstallExtensionEvent = { id: string; gallery?: IGalleryExtension; };
|
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 { IRequestService } 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 { 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 { 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';
|
||||||
|
@ -340,13 +340,21 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
|
||||||
const zipPath = path.join(tmpdir(), extension.id);
|
const zipPath = path.join(tmpdir(), extension.id);
|
||||||
|
|
||||||
return this.getCommonHeaders()
|
return this.getCommonHeaders()
|
||||||
.then(headers => this.requestService.request({ url, headers }))
|
.then(headers => this._getAsset({ url, headers }))
|
||||||
.then(context => download(zipPath, context))
|
.then(context => download(zipPath, context))
|
||||||
.then(() => zipPath);
|
.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> {
|
private getLastValidExtensionVersion(extension: IRawGalleryExtension, versions: IRawGalleryExtensionVersion[]): TPromise<IRawGalleryExtensionVersion> {
|
||||||
if (!versions.length) {
|
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)));
|
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 { IViewletService } from 'vs/workbench/services/viewlet/common/viewletService';
|
||||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
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 { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||||
import { IThemeService } from 'vs/workbench/services/themes/common/themeService';
|
import { IThemeService } from 'vs/workbench/services/themes/common/themeService';
|
||||||
import { ExtensionsInput } from './extensionsInput';
|
import { ExtensionsInput } from './extensionsInput';
|
||||||
|
@ -71,7 +69,6 @@ export class ExtensionEditor extends BaseEditor {
|
||||||
@IExtensionGalleryService private galleryService: IExtensionGalleryService,
|
@IExtensionGalleryService private galleryService: IExtensionGalleryService,
|
||||||
@IConfigurationService private configurationService: IConfigurationService,
|
@IConfigurationService private configurationService: IConfigurationService,
|
||||||
@IInstantiationService private instantiationService: IInstantiationService,
|
@IInstantiationService private instantiationService: IInstantiationService,
|
||||||
@IRequestService private requestService: IRequestService,
|
|
||||||
@IViewletService private viewletService: IViewletService,
|
@IViewletService private viewletService: IViewletService,
|
||||||
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
|
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
|
||||||
@IThemeService private themeService: IThemeService,
|
@IThemeService private themeService: IThemeService,
|
||||||
|
@ -176,8 +173,7 @@ export class ExtensionEditor extends BaseEditor {
|
||||||
if (extension.readmeUrl) {
|
if (extension.readmeUrl) {
|
||||||
promise = promise
|
promise = promise
|
||||||
.then(() => addClass(this.body, 'loading'))
|
.then(() => addClass(this.body, 'loading'))
|
||||||
.then(() => this.requestService.request({ url: extension.readmeUrl }))
|
.then(() => this.extensionsWorkbenchService.getReadmeContents(extension))
|
||||||
.then(asText)
|
|
||||||
.then(marked.parse)
|
.then(marked.parse)
|
||||||
.then<void>(body => {
|
.then<void>(body => {
|
||||||
const webview = new WebView(
|
const webview = new WebView(
|
||||||
|
|
|
@ -56,4 +56,5 @@ export interface IExtensionsWorkbenchService {
|
||||||
canInstall(extension: IExtension): boolean;
|
canInstall(extension: IExtension): boolean;
|
||||||
install(extension: IExtension): TPromise<void>;
|
install(extension: IExtension): TPromise<void>;
|
||||||
uninstall(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 semver from 'semver';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import URI from 'vs/base/common/uri';
|
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';
|
import { IExtension, ExtensionState, IExtensionsWorkbenchService } from './extensions';
|
||||||
|
|
||||||
interface IExtensionStateProvider {
|
interface IExtensionStateProvider {
|
||||||
|
@ -415,6 +417,21 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
||||||
this.telemetryService.publicLog(eventName, assign(data, { success, duration }));
|
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 {
|
dispose(): void {
|
||||||
this.disposables = dispose(this.disposables);
|
this.disposables = dispose(this.disposables);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue