#88322 Provide a picker to select extensions to sync

This commit is contained in:
Sandeep Somavarapu
2020-01-16 08:03:08 +01:00
parent 30f2cec795
commit a46a5dba98
5 changed files with 56 additions and 0 deletions

View File

@@ -12,6 +12,13 @@ import { URI } from 'vs/base/common/uri';
import { ITextModelService } from 'vs/editor/common/services/resolverService';
import { ITextResourcePropertiesService, ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfigurationService';
import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
import type { IExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { DisposableStore } from 'vs/base/common/lifecycle';
import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
import { CancellationToken } from 'vs/base/common/cancellation';
import { localize } from 'vs/nls';
import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
class UserDataSyncUtilService implements IUserDataSyncUtilService {
@@ -23,6 +30,8 @@ class UserDataSyncUtilService implements IUserDataSyncUtilService {
@ITextResourcePropertiesService private readonly textResourcePropertiesService: ITextResourcePropertiesService,
@ITextResourceConfigurationService private readonly textResourceConfigurationService: ITextResourceConfigurationService,
@IConfigurationService private readonly configurationService: IConfigurationService,
@IQuickInputService private readonly quickInputService: IQuickInputService,
@IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService
) { }
public async updateConfigurationValue(key: string, value: any): Promise<void> {
@@ -52,6 +61,39 @@ class UserDataSyncUtilService implements IUserDataSyncUtilService {
tabSize: this.textResourceConfigurationService.getValue(resource, 'editor.tabSize')
};
}
async ignoreExtensionsToSync(extensionIdentifiers: IExtensionIdentifier[]): Promise<void> {
return new Promise(async (c, e) => {
const disposables: DisposableStore = new DisposableStore();
const quickPick = this.quickInputService.createQuickPick<{ identifier: IExtensionIdentifier, label: string, description: string }>();
disposables.add(quickPick);
quickPick.title = localize('select extensions', "Sync: Select Extensions to Sync");
quickPick.placeholder = localize('choose extensions to sync', "Choose extensions to sync");
quickPick.canSelectMany = true;
quickPick.ignoreFocusOut = true;
quickPick.busy = true;
quickPick.show();
const queryResult = await this.extensionGalleryService.query({ names: extensionIdentifiers.map(e => e.id), pageSize: extensionIdentifiers.length }, CancellationToken.None);
const items = queryResult.firstPage.map(e => ({
identifier: e.identifier,
label: e.identifier.id,
description: e.displayName
}));
quickPick.busy = false;
quickPick.items = items;
quickPick.selectedItems = items;
disposables.add(quickPick.onDidAccept(async () => {
const ignoredExtensions: string[] = this.configurationService.getValue<string[]>('sync.ignoredExtensions').filter(id => quickPick.selectedItems.every(({ identifier }) => !areSameExtensions(identifier, { id })));
ignoredExtensions.push(...items.filter(item => quickPick.selectedItems.indexOf(item) === -1).map(({ identifier }) => identifier.id));
await this.configurationService.updateValue('sync.ignoredExtensions', ignoredExtensions);
quickPick.hide();
}));
disposables.add(quickPick.onDidHide(() => {
disposables.dispose();
c();
}));
});
}
}
registerSingleton(IUserDataSyncUtilService, UserDataSyncUtilService);