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

wip: adopt IExtension

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