move extension url handling to service
This commit is contained in:
parent
e3f46b1466
commit
340f4590cc
|
@ -40,8 +40,6 @@ import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/edi
|
|||
import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService';
|
||||
import { IMessageService, CloseAction } from 'vs/platform/message/common/message';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { IURLService } from 'vs/platform/url/common/url';
|
||||
import URI from 'vs/base/common/uri';
|
||||
import { IActivityService, ProgressBadge, NumberBadge } from 'vs/workbench/services/activity/common/activityService';
|
||||
|
||||
interface SearchInputEvent extends Event {
|
||||
|
@ -70,7 +68,6 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet {
|
|||
@IWorkbenchEditorService private editorService: IWorkbenchEditorService,
|
||||
@IEditorGroupService private editorInputService: IEditorGroupService,
|
||||
@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
|
||||
@IURLService urlService: IURLService,
|
||||
@IExtensionTipsService private tipsService: IExtensionTipsService,
|
||||
@IMessageService private messageService: IMessageService,
|
||||
@IViewletService private viewletService: IViewletService
|
||||
|
@ -78,10 +75,6 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet {
|
|||
super(VIEWLET_ID, telemetryService);
|
||||
this.searchDelayer = new ThrottledDelayer(500);
|
||||
|
||||
chain(urlService.onOpenURL)
|
||||
.filter(uri => /^extension/.test(uri.path))
|
||||
.on(this.onOpenExtensionUrl, this, this.disposables);
|
||||
|
||||
this.disposables.push(viewletService.onDidViewletOpen(this.onViewletOpen, this, this.disposables));
|
||||
}
|
||||
|
||||
|
@ -309,26 +302,6 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet {
|
|||
this.list.reveal(this.list.getFocus()[0]);
|
||||
}
|
||||
|
||||
private onOpenExtensionUrl(uri: URI): void {
|
||||
const match = /^extension\/([^/]+)$/.exec(uri.path);
|
||||
|
||||
if (!match) {
|
||||
return;
|
||||
}
|
||||
|
||||
const extensionId = match[1];
|
||||
|
||||
this.extensionsWorkbenchService.queryGallery({ names: [extensionId] })
|
||||
.done(result => {
|
||||
if (result.total < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
const extension = result.firstPage[0];
|
||||
this.openExtension(extension);
|
||||
});
|
||||
}
|
||||
|
||||
private progress<T>(promise: TPromise<T>): TPromise<T> {
|
||||
const progressRunner = this.progressService.show(true);
|
||||
return always(promise, () => progressRunner.done());
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import 'vs/css!./media/extensionsViewlet';
|
||||
import { localize } from 'vs/nls';
|
||||
import paths = require('vs/base/common/paths');
|
||||
import Event, { Emitter } from 'vs/base/common/event';
|
||||
import Event, { Emitter, chain } from 'vs/base/common/event';
|
||||
import { index } from 'vs/base/common/arrays';
|
||||
import { assign } from 'vs/base/common/objects';
|
||||
import { isUUID } from 'vs/base/common/uuid';
|
||||
|
@ -37,6 +37,8 @@ import { IFileService } from 'vs/platform/files/common/files';
|
|||
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { Content } from 'vs/workbench/parts/extensions/electron-browser/extensionsFileTemplate';
|
||||
import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions';
|
||||
import { IURLService } from 'vs/platform/url/common/url';
|
||||
import { ExtensionsInput } from './extensionsInput';
|
||||
|
||||
interface IExtensionStateProvider {
|
||||
(extension: Extension): ExtensionState;
|
||||
|
@ -266,7 +268,8 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
@IExtensionGalleryService private galleryService: IExtensionGalleryService,
|
||||
@IConfigurationService private configurationService: IConfigurationService,
|
||||
@ITelemetryService private telemetryService: ITelemetryService,
|
||||
@IMessageService private messageService: IMessageService
|
||||
@IMessageService private messageService: IMessageService,
|
||||
@IURLService urlService: IURLService
|
||||
) {
|
||||
this.stateProvider = ext => this.getExtensionState(ext);
|
||||
|
||||
|
@ -277,6 +280,10 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
|
||||
this.syncDelayer = new ThrottledDelayer<void>(ExtensionsWorkbenchService.SyncPeriod);
|
||||
|
||||
chain(urlService.onOpenURL)
|
||||
.filter(uri => /^extension/.test(uri.path))
|
||||
.on(this.onOpenExtensionUrl, this, this.disposables);
|
||||
|
||||
this.queryLocal().done(() => this.eventuallySyncWithGallery(true));
|
||||
}
|
||||
|
||||
|
@ -528,6 +535,31 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService {
|
|||
this.messageService.show(Severity.Error, err);
|
||||
}
|
||||
|
||||
private onOpenExtensionUrl(uri: URI): void {
|
||||
const match = /^extension\/([^/]+)$/.exec(uri.path);
|
||||
|
||||
if (!match) {
|
||||
return;
|
||||
}
|
||||
|
||||
const extensionId = match[1];
|
||||
|
||||
this.queryGallery({ names: [extensionId] })
|
||||
.done(result => {
|
||||
if (result.total < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
const extension = result.firstPage[0];
|
||||
this.openExtension(extension);
|
||||
});
|
||||
}
|
||||
|
||||
private openExtension(extension: IExtension): void {
|
||||
this.editorService.openEditor(this.instantiationService.createInstance(ExtensionsInput, extension))
|
||||
.done(null, err => this.onError(err));
|
||||
}
|
||||
|
||||
openExtensionsFile(sideBySide?: boolean): TPromise<any> {
|
||||
if (!this.contextService.getWorkspace()) {
|
||||
this.messageService.show(Severity.Info, localize('ConfigureWorkspaceRecommendations.noWorkspace', 'Recommendations are only available on a workspace folder.'));
|
||||
|
|
Loading…
Reference in a new issue