提交 9c94be39 编写于 作者: J Joao Moreno

wip: adopt IExtension

上级 877cd914
......@@ -7,14 +7,16 @@
import { TPromise } from 'vs/base/common/winjs.base';
import { EditorInput } from 'vs/workbench/common/editor';
import { ILocalExtension, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
// TODO@joao: layer breaker
import { IExtension } from '../electron-browser/extensionsModel';
export class ExtensionsInput extends EditorInput {
static get ID() { return 'workbench.extensions.input2'; }
get extension(): ILocalExtension | IGalleryExtension { return this._extension; }
get extension(): IExtension { return this._extension; }
constructor(private _extension: ILocalExtension | IGalleryExtension) {
constructor(private _extension: IExtension) {
super();
}
......@@ -23,14 +25,7 @@ export class ExtensionsInput extends EditorInput {
}
getName(): string {
const local = this.extension as ILocalExtension;
const gallery = this.extension as IGalleryExtension;
if (local.path) {
return local.manifest.displayName || local.manifest.name;
} else {
return gallery.displayName || gallery.name;
}
return this.extension.displayName;
}
matches(other: any): boolean {
......@@ -39,7 +34,9 @@ export class ExtensionsInput extends EditorInput {
}
const otherExtensionInput = other as ExtensionsInput;
return this.extension.id === otherExtensionInput.extension.id;
// TODO@joao is this correct?
return this.extension === otherExtensionInput.extension;
}
resolve(refresh?: boolean): TPromise<any> {
......
......@@ -15,7 +15,8 @@ import { append, emmet as $, addClass, removeClass } from 'vs/base/browser/dom';
import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ILocalExtension, IGalleryExtension, IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
// import { IExtension } from './extensionsModel';
import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
import { ExtensionsInput } from '../common/extensionsInput';
import { text as downloadText, IRequestOptions } from 'vs/base/node/request';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
......@@ -62,15 +63,13 @@ export class ExtensionEditor extends BaseEditor {
this.body.innerHTML = '';
let promise = TPromise.as<void>(null);
const extension = input.extension;
const local = extension as ILocalExtension;
const gallery = extension as IGalleryExtension;
if (local.path) {
// const extension = input.extension;
if (1 === 1/*local.path*/) {
// TODO@joao
} else {
const [version] = gallery.versions;
const version = null/*gallery.versions[0]*/;
const headers = version.downloadHeaders;
addClass(this.body, 'loading');
......
......@@ -9,10 +9,10 @@ import { append, emmet as $, addClass, removeClass } from 'vs/base/browser/dom';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IDelegate } from 'vs/base/browser/ui/list/list';
import { IPagedRenderer } from 'vs/base/browser/ui/list/listPaging';
import { ILocalExtension, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IExtension } from './extensionsModel';
export interface ITemplateData {
extension: ILocalExtension | IGalleryExtension;
extension: IExtension;
element: HTMLElement;
icon: HTMLImageElement;
name: HTMLElement;
......@@ -21,12 +21,12 @@ export interface ITemplateData {
description: HTMLElement;
}
export class Delegate implements IDelegate<ILocalExtension | IGalleryExtension> {
export class Delegate implements IDelegate<IExtension> {
getHeight() { return 62; }
getTemplateId() { return 'extension'; }
}
export class Renderer implements IPagedRenderer<ILocalExtension | IGalleryExtension, ITemplateData> {
export class Renderer implements IPagedRenderer<IExtension, ITemplateData> {
private _templates: ITemplateData[];
get templates(): ITemplateData[] { return this._templates; }
......@@ -64,49 +64,14 @@ export class Renderer implements IPagedRenderer<ILocalExtension | IGalleryExtens
data.description.textContent = '';
}
renderElement(extension: ILocalExtension | IGalleryExtension, index: number, data: ITemplateData): void {
const local = extension as ILocalExtension;
const galleryExtension = extension as IGalleryExtension;
if (local.path) {
return this.renderExtension(local, data);
} else {
return this.renderGalleryExtension(galleryExtension, data);
}
}
private renderExtension(extension: ILocalExtension, data: ITemplateData): void {
let iconUrl: string;
let publisher = extension.manifest.publisher;
if (extension.manifest.icon) {
iconUrl = `file://${ extension.path }/${ extension.manifest.icon }`;
}
if (extension.metadata) {
publisher = extension.metadata.publisherDisplayName || publisher;
}
renderElement(extension: IExtension, index: number, data: ITemplateData): void {
data.extension = extension;
removeClass(data.element, 'loading');
data.icon.src = iconUrl || require.toUrl('./media/defaultIcon.png');
data.name.textContent = extension.manifest.displayName || extension.manifest.name;
data.version.textContent = ` ${ extension.manifest.version }`;
data.author.textContent = ` ${ publisher }`;
data.description.textContent = extension.manifest.description;
}
private renderGalleryExtension(extension: IGalleryExtension, data: ITemplateData): void {
const version = extension.versions[0];
const publisher = extension.publisherDisplayName || extension.publisher;
const iconUrl = version.iconUrl;
data.extension = extension;
removeClass(data.element, 'loading');
data.icon.src = iconUrl || require.toUrl('./media/defaultIcon.png');
data.name.textContent = extension.displayName || extension.name;
data.version.textContent = ` ${ version.version }`;
data.author.textContent = ` ${ publisher }`;
data.icon.src = extension.iconUrl;
data.name.textContent = extension.displayName;
data.version.textContent = extension.version;
data.author.textContent = extension.publisherDisplayName;
data.description.textContent = extension.description;
}
......
......@@ -9,7 +9,7 @@ import 'vs/css!./media/extensionsViewlet';
import Event, { Emitter } from 'vs/base/common/event';
import { TPromise } from 'vs/base/common/winjs.base';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { IPager } from 'vs/base/common/paging';
import { IPager, mapPager } from 'vs/base/common/paging';
import { IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension, IQueryOptions } from 'vs/platform/extensionManagement/common/extensionManagement';
export enum ExtensionState {
......@@ -21,8 +21,9 @@ export enum ExtensionState {
export interface IExtension {
name: string;
publisher: string;
displayName: string;
publisher: string;
publisherDisplayName: string;
version: string;
description: string;
iconUrl: string;
......@@ -30,10 +31,10 @@ export interface IExtension {
class Extension implements IExtension {
local: ILocalExtension;
gallery: IGalleryExtension;
constructor() {
constructor(
public local: ILocalExtension,
public gallery: IGalleryExtension = null
) {
}
......@@ -41,7 +42,19 @@ class Extension implements IExtension {
return this.local ? this.local.manifest.name : this.gallery.name;
}
get displayName(): string {
if (this.local) {
return this.local.manifest.displayName || this.local.manifest.name;
}
return this.gallery.displayName || this.gallery.name;
}
get publisher(): string {
return this.local ? this.local.manifest.publisher : this.gallery.publisher;
}
get publisherDisplayName(): string {
if (this.local) {
if (this.local.metadata && this.local.metadata.publisherDisplayName) {
return this.local.metadata.publisherDisplayName;
......@@ -53,14 +66,6 @@ class Extension implements IExtension {
return this.gallery.publisherDisplayName || this.gallery.publisher;
}
get displayName(): string {
if (this.local) {
return this.local.manifest.displayName || this.local.manifest.name;
}
return this.gallery.displayName || this.gallery.name;
}
get version(): string {
return this.local ? this.local.manifest.version : this.gallery.versions[0].version;
}
......@@ -99,12 +104,14 @@ export class ExtensionsModel {
// todo
}
getInstalled(): IExtension[] {
throw new Error('not implemented');
getInstalled(): TPromise<IExtension[]> {
return this.extensionService.getInstalled()
.then(result => result.map(local => new Extension(local)));
}
queryGallery(options: IQueryOptions = {}): TPromise<IPager<IExtension>> {
throw new Error('not implemented');
return this.galleryService.query(options)
.then(result => mapPager(result, gallery => new Extension(null, gallery)));
}
getState(extension: IExtension): ExtensionState {
......
......@@ -18,7 +18,8 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { PagedList } from 'vs/base/browser/ui/list/listPaging';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { Delegate, Renderer } from './extensionsList';
import { IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
import { ExtensionsModel, IExtension } from './extensionsModel';
import { IExtensionManagementService, IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
import { ExtensionsInput } from '../common/extensionsInput';
import { IProgressService } from 'vs/platform/progress/common/progress';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
......@@ -32,7 +33,8 @@ export class ExtensionsViewlet extends Viewlet {
private root: HTMLElement;
private searchBox: HTMLInputElement;
private extensionsBox: HTMLElement;
private list: PagedList<ILocalExtension | IGalleryExtension>;
private model: ExtensionsModel;
private list: PagedList<IExtension>;
constructor(
@ITelemetryService telemetryService: ITelemetryService,
......@@ -45,6 +47,7 @@ export class ExtensionsViewlet extends Viewlet {
super(ExtensionsViewlet.ID, telemetryService);
this.searchDelayer = new ThrottledDelayer(500);
this.disposables = [];
this.model = instantiationService.createInstance(ExtensionsModel);
}
create(parent: Builder): TPromise<void> {
......@@ -100,13 +103,13 @@ export class ExtensionsViewlet extends Viewlet {
private doSearch(text: string = ''): TPromise<any> {
const progressRunner = this.progressService.show(true);
let promise: TPromise<PagedModel<ILocalExtension | IGalleryExtension>>;
let promise: TPromise<PagedModel<IExtension>>;
if (text) {
promise = this.galleryService.query({ text })
promise = this.model.queryGallery({ text })
.then(result => new PagedModel(result));
} else {
promise = this.extensionService.getInstalled()
promise = this.model.getInstalled()
.then(result => new SinglePagePagedModel(result));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册