Skip to content

Commit 121bb10

Browse files
committed
Simplify extension management:
- Remove server options while managing extension
1 parent 5de43b5 commit 121bb10

13 files changed

Lines changed: 80 additions & 580 deletions

File tree

src/vs/platform/extensionManagement/common/extensionManagement.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'
1313
import { ILocalization } from 'vs/platform/localizations/common/localizations';
1414
import URI from 'vs/base/common/uri';
1515
import { IWorkspaceFolder, IWorkspace } from 'vs/platform/workspace/common/workspace';
16+
import { Schemas } from 'vs/base/common/network';
1617

1718
export const EXTENSION_IDENTIFIER_PATTERN = '^([a-z0-9A-Z][a-z0-9\-A-Z]*)\\.([a-z0-9A-Z][a-z0-9\-A-Z]*)$';
1819
export const EXTENSION_IDENTIFIER_REGEX = new RegExp(EXTENSION_IDENTIFIER_PATTERN);
@@ -317,6 +318,7 @@ export interface IExtensionManagementService {
317318
}
318319

319320
export const IExtensionManagementServerService = createDecorator<IExtensionManagementServerService>('extensionManagementServerService');
321+
export const localExtensionManagementServerLocation: URI = URI.from({ scheme: Schemas.file });
320322

321323
export interface IExtensionManagementServer {
322324
extensionManagementService: IExtensionManagementService;

src/vs/platform/extensionManagement/common/multiExtensionManagement.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
77
import { Event, EventMultiplexer } from 'vs/base/common/event';
88
import {
99
IExtensionManagementService, ILocalExtension, IGalleryExtension, LocalExtensionType, InstallExtensionEvent, DidInstallExtensionEvent, IExtensionIdentifier, DidUninstallExtensionEvent, IReportedExtension, IGalleryMetadata,
10-
IExtensionManagementServerService, IExtensionManagementServer
10+
IExtensionManagementServerService, IExtensionManagementServer, localExtensionManagementServerLocation
1111
} from 'vs/platform/extensionManagement/common/extensionManagement';
1212
import { flatten } from 'vs/base/common/arrays';
1313

@@ -50,15 +50,15 @@ export class MulitExtensionManagementService implements IExtensionManagementServ
5050
}
5151

5252
install(zipPath: string): TPromise<void> {
53-
return this.servers[0].extensionManagementService.install(zipPath);
53+
return this.extensionManagementServerService.getExtensionManagementServer(localExtensionManagementServerLocation).extensionManagementService.install(zipPath);
5454
}
5555

5656
installFromGallery(extension: IGalleryExtension): TPromise<void> {
57-
return TPromise.join(this.servers.map(server => server.extensionManagementService.installFromGallery(extension))).then(() => null);
57+
return TPromise.join(this.servers.map(({ extensionManagementService }) => extensionManagementService.installFromGallery(extension))).then(() => null);
5858
}
5959

6060
getExtensionsReport(): TPromise<IReportedExtension[]> {
61-
return this.servers[0].extensionManagementService.getExtensionsReport();
61+
return this.extensionManagementServerService.getExtensionManagementServer(localExtensionManagementServerLocation).extensionManagementService.getExtensionsReport();
6262
}
6363

6464
private getServer(extension: ILocalExtension): IExtensionManagementServer {

src/vs/workbench/parts/extensions/common/extensions.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'
88
import { Event } from 'vs/base/common/event';
99
import { TPromise } from 'vs/base/common/winjs.base';
1010
import { IPager } from 'vs/base/common/paging';
11-
import { IQueryOptions, IExtensionManifest, LocalExtensionType, EnablementState, ILocalExtension, IGalleryExtension, ExtensionRecommendationSource } from 'vs/platform/extensionManagement/common/extensionManagement';
11+
import { IQueryOptions, IExtensionManifest, LocalExtensionType, EnablementState, ILocalExtension, IGalleryExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
1212
import { IViewContainersRegistry, ViewContainer, Extensions as ViewContainerExtensions } from 'vs/workbench/common/views';
1313
import { Registry } from 'vs/platform/registry/common/platform';
1414

@@ -61,7 +61,6 @@ export interface IExtension {
6161
locals?: ILocalExtension[];
6262
gallery?: IGalleryExtension;
6363
isMalicious: boolean;
64-
recommendationSources: ExtensionRecommendationSource[];
6564
}
6665

6766
export interface IExtensionDependencies {

src/vs/workbench/parts/extensions/common/extensionsInput.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@ import { TPromise } from 'vs/base/common/winjs.base';
1010
import { EditorInput } from 'vs/workbench/common/editor';
1111
import { IExtension } from 'vs/workbench/parts/extensions/common/extensions';
1212
import URI from 'vs/base/common/uri';
13-
import { IExtensionManagementServerService, IExtensionManagementServer } from 'vs/platform/extensionManagement/common/extensionManagement';
1413

1514
export class ExtensionsInput extends EditorInput {
1615

1716
static readonly ID = 'workbench.extensions.input2';
1817
get extension(): IExtension { return this._extension; }
19-
get servers(): IExtensionManagementServer[] { return this.extensionManagementServerService.extensionManagementServers; }
2018

2119
constructor(
2220
private _extension: IExtension,
23-
@IExtensionManagementServerService private extensionManagementServerService: IExtensionManagementServerService
2421
) {
2522
super();
2623
}

src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { IExtensionsWorkbenchService, IExtensionsViewlet, VIEWLET_ID, IExtension
3030
import { RatingsWidget, InstallCountWidget } from 'vs/workbench/parts/extensions/browser/extensionsWidgets';
3131
import { EditorOptions } from 'vs/workbench/common/editor';
3232
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
33-
import { CombinedInstallAction, UpdateAction, EnableAction, DisableAction, ReloadAction, MaliciousStatusLabelAction, DisabledStatusLabelAction, MultiServerInstallAction, MultiServerUpdateAction, IgnoreExtensionRecommendationAction, UndoIgnoreExtensionRecommendationAction } from 'vs/workbench/parts/extensions/electron-browser/extensionsActions';
33+
import { CombinedInstallAction, UpdateAction, EnableAction, DisableAction, ReloadAction, MaliciousStatusLabelAction, DisabledStatusLabelAction, IgnoreExtensionRecommendationAction, UndoIgnoreExtensionRecommendationAction } from 'vs/workbench/parts/extensions/electron-browser/extensionsActions';
3434
import { WebviewElement } from 'vs/workbench/parts/webview/electron-browser/webviewElement';
3535
import { KeybindingIO } from 'vs/workbench/services/keybinding/common/keybindingIO';
3636
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
@@ -250,12 +250,6 @@ export class ExtensionEditor extends BaseEditor {
250250
if (action.id === DisableAction.ID) {
251251
return (<DisableAction>action).actionItem;
252252
}
253-
if (action.id === MultiServerInstallAction.ID) {
254-
return (<MultiServerInstallAction>action).actionItem;
255-
}
256-
if (action.id === MultiServerUpdateAction.ID) {
257-
return (<MultiServerUpdateAction>action).actionItem;
258-
}
259253
return null;
260254
}
261255
});
@@ -286,7 +280,6 @@ export class ExtensionEditor extends BaseEditor {
286280
setInput(input: ExtensionsInput, options: EditorOptions, token: CancellationToken): Thenable<void> {
287281
this.editorLoadComplete = false;
288282
const extension = input.extension;
289-
const servers = input.servers;
290283

291284
this.transientDisposables = dispose(this.transientDisposables);
292285

@@ -377,7 +370,7 @@ export class ExtensionEditor extends BaseEditor {
377370
const maliciousStatusAction = this.instantiationService.createInstance(MaliciousStatusLabelAction, true);
378371
const disabledStatusAction = this.instantiationService.createInstance(DisabledStatusLabelAction);
379372
const installAction = this.instantiationService.createInstance(CombinedInstallAction);
380-
const updateAction = servers.length === 1 ? this.instantiationService.createInstance(UpdateAction) : this.instantiationService.createInstance(MultiServerUpdateAction);
373+
const updateAction = this.instantiationService.createInstance(UpdateAction);
381374
const enableAction = this.instantiationService.createInstance(EnableAction);
382375
const disableAction = this.instantiationService.createInstance(DisableAction);
383376
const reloadAction = this.instantiationService.createInstance(ReloadAction);

src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { match } from 'vs/base/common/glob';
1212
import * as json from 'vs/base/common/json';
1313
import {
1414
IExtensionManagementService, IExtensionGalleryService, IExtensionTipsService, ExtensionRecommendationReason, LocalExtensionType, EXTENSION_IDENTIFIER_PATTERN,
15-
IExtensionsConfigContent, RecommendationChangeNotification, IExtensionRecommendation, ExtensionRecommendationSource, IExtensionManagementServerService, InstallOperation
15+
IExtensionsConfigContent, RecommendationChangeNotification, IExtensionRecommendation, ExtensionRecommendationSource, InstallOperation
1616
} from 'vs/platform/extensionManagement/common/extensionManagement';
1717
import { IModelService } from 'vs/editor/common/services/modelService';
1818
import { ITextModel } from 'vs/editor/common/model';
@@ -23,7 +23,7 @@ import { ShowRecommendedExtensionsAction, InstallWorkspaceRecommendedExtensionsA
2323
import Severity from 'vs/base/common/severity';
2424
import { IWorkspaceContextService, IWorkspaceFolder, IWorkspace, IWorkspaceFoldersChangeEvent, WorkbenchState } from 'vs/platform/workspace/common/workspace';
2525
import { IFileService } from 'vs/platform/files/common/files';
26-
import { IExtensionsConfiguration, ConfigurationKey, ShowRecommendationsOnlyOnDemandKey, IExtensionsViewlet } from 'vs/workbench/parts/extensions/common/extensions';
26+
import { IExtensionsConfiguration, ConfigurationKey, ShowRecommendationsOnlyOnDemandKey, IExtensionsViewlet, IExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/common/extensions';
2727
import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
2828
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
2929
import * as pfs from 'vs/base/node/pfs';
@@ -104,7 +104,7 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe
104104
@IViewletService private viewletService: IViewletService,
105105
@INotificationService private notificationService: INotificationService,
106106
@IExtensionManagementService private extensionManagementService: IExtensionManagementService,
107-
@IExtensionManagementServerService private extensionManagementServiceService: IExtensionManagementServerService,
107+
@IExtensionsWorkbenchService private extensionWorkbenchService: IExtensionsWorkbenchService,
108108
@IExperimentService private experimentService: IExperimentService,
109109
) {
110110
super();
@@ -545,9 +545,8 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe
545545
const importantRecommendationsIgnoreList = <string[]>JSON.parse(this.storageService.get('extensionsAssistant/importantRecommendationsIgnore', StorageScope.GLOBAL, '[]'));
546546
recommendationsToSuggest = recommendationsToSuggest.filter(id => importantRecommendationsIgnoreList.indexOf(id) === -1 && this.isExtensionAllowedToBeRecommended(id));
547547

548-
const server = this.extensionManagementServiceService.getExtensionManagementServer(model.uri);
549-
const importantTipsPromise = recommendationsToSuggest.length === 0 ? TPromise.as(null) : server.extensionManagementService.getInstalled(LocalExtensionType.User).then(local => {
550-
const localExtensions = local.map(e => `${e.manifest.publisher.toLowerCase()}.${e.manifest.name.toLowerCase()}`);
548+
const importantTipsPromise = recommendationsToSuggest.length === 0 ? TPromise.as(null) : this.extensionWorkbenchService.queryLocal().then(local => {
549+
const localExtensions = local.map(e => e.id);
551550
recommendationsToSuggest = recommendationsToSuggest.filter(id => localExtensions.every(local => local !== id.toLowerCase()));
552551
if (!recommendationsToSuggest.length) {
553552
return;
@@ -575,9 +574,7 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe
575574
}
576575
*/
577576
this.telemetryService.publicLog('extensionRecommendations:popup', { userReaction: 'install', extensionId: name });
578-
579-
const installAction = this.instantiationService.createInstance(InstallRecommendedExtensionAction, id, server);
580-
installAction.run().then(() => installAction.dispose());
577+
this.instantiationService.createInstance(InstallRecommendedExtensionAction, id).run();
581578
}
582579
}, {
583580
label: localize('showRecommendations', "Show Recommendations"),

src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ import { ExtensionHostProfileService } from 'vs/workbench/parts/extensions/elect
4545

4646
// Singletons
4747
registerSingleton(IExtensionGalleryService, ExtensionGalleryService);
48-
registerSingleton(IExtensionTipsService, ExtensionTipsService);
4948
registerSingleton(IExtensionsWorkbenchService, ExtensionsWorkbenchService);
49+
registerSingleton(IExtensionTipsService, ExtensionTipsService);
5050
registerSingleton(IExtensionHostProfileService, ExtensionHostProfileService);
5151

5252
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);

0 commit comments

Comments
 (0)