mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-26 11:38:51 +01:00
#88322 Provide a picker to select extensions to sync
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user