@codingame/monaco-vscode-user-data-profile-service-override 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +31 -0
- package/userDataProfile.js +118 -0
- package/vscode/src/vs/platform/userDataProfile/browser/userDataProfile.js +95 -0
- package/vscode/src/vs/platform/userDataProfile/common/userDataProfileStorageService.js +84 -0
- package/vscode/src/vs/platform/userDataSync/common/extensionsMerge.js +331 -0
- package/vscode/src/vs/platform/userDataSync/common/extensionsSync.js +545 -0
- package/vscode/src/vs/platform/userDataSync/common/globalStateMerge.js +102 -0
- package/vscode/src/vs/platform/userDataSync/common/globalStateSync.js +431 -0
- package/vscode/src/vs/platform/userDataSync/common/keybindingsMerge.js +277 -0
- package/vscode/src/vs/platform/userDataSync/common/keybindingsSync.js +328 -0
- package/vscode/src/vs/platform/userDataSync/common/settingsSync.js +322 -0
- package/vscode/src/vs/platform/userDataSync/common/snippetsMerge.js +126 -0
- package/vscode/src/vs/platform/userDataSync/common/snippetsSync.js +478 -0
- package/vscode/src/vs/platform/userDataSync/common/tasksSync.js +245 -0
- package/vscode/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.contribution.js +9 -0
- package/vscode/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.js +495 -0
- package/vscode/src/vs/workbench/contrib/userDataProfile/browser/userDataProfileActions.js +159 -0
- package/vscode/src/vs/workbench/contrib/userDataProfile/browser/userDataProfilePreview.js +24 -0
- package/vscode/src/vs/workbench/services/userData/browser/userDataInit.js +62 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/extensionsResource.js +328 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/globalStateResource.js +144 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/keybindingsResource.js +119 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/media/userDataProfileView.css.js +6 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/settingsResource.js +140 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/snippetsResource.js +155 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/tasksResource.js +118 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/userDataProfileImportExportService.js +1453 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/userDataProfileInit.js +151 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/userDataProfileManagement.js +180 -0
- package/vscode/src/vs/workbench/services/userDataProfile/browser/userDataProfileStorageService.js +39 -0
- package/vscode/src/vs/workbench/services/userDataSync/browser/userDataSyncInit.js +448 -0
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
|
|
2
|
+
import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage.service';
|
|
3
|
+
import { AbstractExtensionsInitializer } from '../../../../platform/userDataSync/common/extensionsSync.js';
|
|
4
|
+
import { UserDataSyncStoreTypeSynchronizer, GlobalStateInitializer } from '../../../../platform/userDataSync/common/globalStateSync.js';
|
|
5
|
+
import { KeybindingsInitializer } from '../../../../platform/userDataSync/common/keybindingsSync.js';
|
|
6
|
+
import { SettingsInitializer } from '../../../../platform/userDataSync/common/settingsSync.js';
|
|
7
|
+
import { SnippetsInitializer } from '../../../../platform/userDataSync/common/snippetsSync.js';
|
|
8
|
+
import { IFileService } from 'vscode/vscode/vs/platform/files/common/files.service';
|
|
9
|
+
import { ILogService } from 'vscode/vscode/vs/platform/log/common/log.service';
|
|
10
|
+
import { UserDataSyncStoreClient } from 'vscode/vscode/vs/platform/userDataSync/common/userDataSyncStoreService';
|
|
11
|
+
import { IProductService } from 'vscode/vscode/vs/platform/product/common/productService.service';
|
|
12
|
+
import { IRequestService } from 'vscode/vscode/vs/platform/request/common/request.service';
|
|
13
|
+
import { IUserDataSyncStoreManagementService, IUserDataSyncLogService } from 'vscode/vscode/vs/platform/userDataSync/common/userDataSync.service';
|
|
14
|
+
import { getCurrentAuthenticationSessionInfo } from 'vscode/vscode/vs/workbench/services/authentication/browser/authenticationService';
|
|
15
|
+
import { getSyncAreaLabel } from 'vscode/vscode/vs/workbench/services/userDataSync/common/userDataSync';
|
|
16
|
+
import { isWeb } from 'vscode/vscode/vs/base/common/platform';
|
|
17
|
+
import { Barrier, Promises } from 'vscode/vscode/vs/base/common/async';
|
|
18
|
+
import { IExtensionManagementService, IGlobalExtensionEnablementService, IExtensionGalleryService } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement.service';
|
|
19
|
+
import { IEnvironmentService } from 'vscode/vscode/vs/platform/environment/common/environment.service';
|
|
20
|
+
import { toExtensionDescription } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions';
|
|
21
|
+
import { IExtensionService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions.service';
|
|
22
|
+
import { areSameExtensions } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagementUtil';
|
|
23
|
+
import { IIgnoredExtensionsManagementService } from 'vscode/vscode/vs/platform/userDataSync/common/ignoredExtensions.service';
|
|
24
|
+
import { DisposableStore } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
25
|
+
import { isEqual } from 'vscode/vscode/vs/base/common/resources';
|
|
26
|
+
import { CancellationToken } from 'vscode/vscode/vs/base/common/cancellation';
|
|
27
|
+
import { IUriIdentityService } from 'vscode/vscode/vs/platform/uriIdentity/common/uriIdentity.service';
|
|
28
|
+
import { IExtensionStorageService } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionStorage.service';
|
|
29
|
+
import { TasksInitializer } from '../../../../platform/userDataSync/common/tasksSync.js';
|
|
30
|
+
import { IUserDataProfilesService } from 'vscode/vscode/vs/platform/userDataProfile/common/userDataProfile.service';
|
|
31
|
+
import { IBrowserWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/browser/environmentService.service';
|
|
32
|
+
import { ISecretStorageService } from 'vscode/vscode/vs/platform/secrets/common/secrets.service';
|
|
33
|
+
|
|
34
|
+
let UserDataSyncInitializer = class UserDataSyncInitializer {
|
|
35
|
+
constructor(environmentService, secretStorageService, userDataSyncStoreManagementService, fileService, userDataProfilesService, storageService, productService, requestService, logService, uriIdentityService) {
|
|
36
|
+
this.environmentService = environmentService;
|
|
37
|
+
this.secretStorageService = secretStorageService;
|
|
38
|
+
this.userDataSyncStoreManagementService = userDataSyncStoreManagementService;
|
|
39
|
+
this.fileService = fileService;
|
|
40
|
+
this.userDataProfilesService = userDataProfilesService;
|
|
41
|
+
this.storageService = storageService;
|
|
42
|
+
this.productService = productService;
|
|
43
|
+
this.requestService = requestService;
|
|
44
|
+
this.logService = logService;
|
|
45
|
+
this.uriIdentityService = uriIdentityService;
|
|
46
|
+
this.initialized = [];
|
|
47
|
+
this.initializationFinished = ( new Barrier());
|
|
48
|
+
this.globalStateUserData = null;
|
|
49
|
+
this.createUserDataSyncStoreClient().then(userDataSyncStoreClient => {
|
|
50
|
+
if (!userDataSyncStoreClient) {
|
|
51
|
+
this.initializationFinished.open();
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
createUserDataSyncStoreClient() {
|
|
56
|
+
if (!this._userDataSyncStoreClientPromise) {
|
|
57
|
+
this._userDataSyncStoreClientPromise = (async () => {
|
|
58
|
+
try {
|
|
59
|
+
if (!isWeb) {
|
|
60
|
+
this.logService.trace(`Skipping initializing user data in desktop`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (!this.storageService.isNew(-1 )) {
|
|
64
|
+
this.logService.trace(`Skipping initializing user data as application was opened before`);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (!this.storageService.isNew(1 )) {
|
|
68
|
+
this.logService.trace(`Skipping initializing user data as workspace was opened before`);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (this.environmentService.options?.settingsSyncOptions?.authenticationProvider && !this.environmentService.options.settingsSyncOptions.enabled) {
|
|
72
|
+
this.logService.trace(`Skipping initializing user data as settings sync is disabled`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
let authenticationSession;
|
|
76
|
+
try {
|
|
77
|
+
authenticationSession = await getCurrentAuthenticationSessionInfo(this.secretStorageService, this.productService);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
this.logService.error(error);
|
|
81
|
+
}
|
|
82
|
+
if (!authenticationSession) {
|
|
83
|
+
this.logService.trace(`Skipping initializing user data as authentication session is not set`);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
await this.initializeUserDataSyncStore(authenticationSession);
|
|
87
|
+
const userDataSyncStore = this.userDataSyncStoreManagementService.userDataSyncStore;
|
|
88
|
+
if (!userDataSyncStore) {
|
|
89
|
+
this.logService.trace(`Skipping initializing user data as sync service is not provided`);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const userDataSyncStoreClient = ( new UserDataSyncStoreClient(
|
|
93
|
+
userDataSyncStore.url,
|
|
94
|
+
this.productService,
|
|
95
|
+
this.requestService,
|
|
96
|
+
this.logService,
|
|
97
|
+
this.environmentService,
|
|
98
|
+
this.fileService,
|
|
99
|
+
this.storageService
|
|
100
|
+
));
|
|
101
|
+
userDataSyncStoreClient.setAuthToken(authenticationSession.accessToken, authenticationSession.providerId);
|
|
102
|
+
const manifest = await userDataSyncStoreClient.manifest(null);
|
|
103
|
+
if (manifest === null) {
|
|
104
|
+
userDataSyncStoreClient.dispose();
|
|
105
|
+
this.logService.trace(`Skipping initializing user data as there is no data`);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
this.logService.info(`Using settings sync service ${( userDataSyncStore.url.toString())} for initialization`);
|
|
109
|
+
return userDataSyncStoreClient;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
this.logService.error(error);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
})();
|
|
116
|
+
}
|
|
117
|
+
return this._userDataSyncStoreClientPromise;
|
|
118
|
+
}
|
|
119
|
+
async initializeUserDataSyncStore(authenticationSession) {
|
|
120
|
+
const userDataSyncStore = this.userDataSyncStoreManagementService.userDataSyncStore;
|
|
121
|
+
if (!userDataSyncStore?.canSwitch) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const disposables = ( new DisposableStore());
|
|
125
|
+
try {
|
|
126
|
+
const userDataSyncStoreClient = disposables.add(( new UserDataSyncStoreClient(
|
|
127
|
+
userDataSyncStore.url,
|
|
128
|
+
this.productService,
|
|
129
|
+
this.requestService,
|
|
130
|
+
this.logService,
|
|
131
|
+
this.environmentService,
|
|
132
|
+
this.fileService,
|
|
133
|
+
this.storageService
|
|
134
|
+
)));
|
|
135
|
+
userDataSyncStoreClient.setAuthToken(authenticationSession.accessToken, authenticationSession.providerId);
|
|
136
|
+
this.globalStateUserData = await userDataSyncStoreClient.readResource("globalState" , null);
|
|
137
|
+
if (this.globalStateUserData) {
|
|
138
|
+
const userDataSyncStoreType = ( new UserDataSyncStoreTypeSynchronizer(
|
|
139
|
+
userDataSyncStoreClient,
|
|
140
|
+
this.storageService,
|
|
141
|
+
this.environmentService,
|
|
142
|
+
this.fileService,
|
|
143
|
+
this.logService
|
|
144
|
+
)).getSyncStoreType(this.globalStateUserData);
|
|
145
|
+
if (userDataSyncStoreType) {
|
|
146
|
+
await this.userDataSyncStoreManagementService.switch(userDataSyncStoreType);
|
|
147
|
+
if (!isEqual(userDataSyncStore.url, this.userDataSyncStoreManagementService.userDataSyncStore?.url)) {
|
|
148
|
+
this.logService.info('Switched settings sync store');
|
|
149
|
+
this.globalStateUserData = null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
disposables.dispose();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async whenInitializationFinished() {
|
|
159
|
+
await this.initializationFinished.wait();
|
|
160
|
+
}
|
|
161
|
+
async requiresInitialization() {
|
|
162
|
+
this.logService.trace(`UserDataInitializationService#requiresInitialization`);
|
|
163
|
+
const userDataSyncStoreClient = await this.createUserDataSyncStoreClient();
|
|
164
|
+
return !!userDataSyncStoreClient;
|
|
165
|
+
}
|
|
166
|
+
async initializeRequiredResources() {
|
|
167
|
+
this.logService.trace(`UserDataInitializationService#initializeRequiredResources`);
|
|
168
|
+
return this.initialize(["settings" , "globalState" ]);
|
|
169
|
+
}
|
|
170
|
+
async initializeOtherResources(instantiationService) {
|
|
171
|
+
try {
|
|
172
|
+
this.logService.trace(`UserDataInitializationService#initializeOtherResources`);
|
|
173
|
+
await Promise.allSettled([this.initialize(["keybindings" , "snippets" , "tasks" ]), this.initializeExtensions(instantiationService)]);
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
this.initializationFinished.open();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async initializeExtensions(instantiationService) {
|
|
180
|
+
try {
|
|
181
|
+
await Promise.all([this.initializeInstalledExtensions(instantiationService), this.initializeNewExtensions(instantiationService)]);
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
this.initialized.push("extensions" );
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async initializeInstalledExtensions(instantiationService) {
|
|
188
|
+
if (!this.initializeInstalledExtensionsPromise) {
|
|
189
|
+
this.initializeInstalledExtensionsPromise = (async () => {
|
|
190
|
+
this.logService.trace(`UserDataInitializationService#initializeInstalledExtensions`);
|
|
191
|
+
const extensionsPreviewInitializer = await this.getExtensionsPreviewInitializer(instantiationService);
|
|
192
|
+
if (extensionsPreviewInitializer) {
|
|
193
|
+
await instantiationService.createInstance(InstalledExtensionsInitializer, extensionsPreviewInitializer).initialize();
|
|
194
|
+
}
|
|
195
|
+
})();
|
|
196
|
+
}
|
|
197
|
+
return this.initializeInstalledExtensionsPromise;
|
|
198
|
+
}
|
|
199
|
+
async initializeNewExtensions(instantiationService) {
|
|
200
|
+
if (!this.initializeNewExtensionsPromise) {
|
|
201
|
+
this.initializeNewExtensionsPromise = (async () => {
|
|
202
|
+
this.logService.trace(`UserDataInitializationService#initializeNewExtensions`);
|
|
203
|
+
const extensionsPreviewInitializer = await this.getExtensionsPreviewInitializer(instantiationService);
|
|
204
|
+
if (extensionsPreviewInitializer) {
|
|
205
|
+
await instantiationService.createInstance(NewExtensionsInitializer, extensionsPreviewInitializer).initialize();
|
|
206
|
+
}
|
|
207
|
+
})();
|
|
208
|
+
}
|
|
209
|
+
return this.initializeNewExtensionsPromise;
|
|
210
|
+
}
|
|
211
|
+
getExtensionsPreviewInitializer(instantiationService) {
|
|
212
|
+
if (!this.extensionsPreviewInitializerPromise) {
|
|
213
|
+
this.extensionsPreviewInitializerPromise = (async () => {
|
|
214
|
+
const userDataSyncStoreClient = await this.createUserDataSyncStoreClient();
|
|
215
|
+
if (!userDataSyncStoreClient) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
const userData = await userDataSyncStoreClient.readResource("extensions" , null);
|
|
219
|
+
return instantiationService.createInstance(ExtensionsPreviewInitializer, userData);
|
|
220
|
+
})();
|
|
221
|
+
}
|
|
222
|
+
return this.extensionsPreviewInitializerPromise;
|
|
223
|
+
}
|
|
224
|
+
async initialize(syncResources) {
|
|
225
|
+
const userDataSyncStoreClient = await this.createUserDataSyncStoreClient();
|
|
226
|
+
if (!userDataSyncStoreClient) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
await Promises.settled(( syncResources.map(async (syncResource) => {
|
|
230
|
+
try {
|
|
231
|
+
if (this.initialized.includes(syncResource)) {
|
|
232
|
+
this.logService.info(`${getSyncAreaLabel(syncResource)} initialized already.`);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
this.initialized.push(syncResource);
|
|
236
|
+
this.logService.trace(`Initializing ${getSyncAreaLabel(syncResource)}`);
|
|
237
|
+
const initializer = this.createSyncResourceInitializer(syncResource);
|
|
238
|
+
const userData = await userDataSyncStoreClient.readResource(syncResource, syncResource === "globalState" ? this.globalStateUserData : null);
|
|
239
|
+
await initializer.initialize(userData);
|
|
240
|
+
this.logService.info(`Initialized ${getSyncAreaLabel(syncResource)}`);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
this.logService.info(`Error while initializing ${getSyncAreaLabel(syncResource)}`);
|
|
244
|
+
this.logService.error(error);
|
|
245
|
+
}
|
|
246
|
+
})));
|
|
247
|
+
}
|
|
248
|
+
createSyncResourceInitializer(syncResource) {
|
|
249
|
+
switch (syncResource) {
|
|
250
|
+
case "settings" : return ( new SettingsInitializer(
|
|
251
|
+
this.fileService,
|
|
252
|
+
this.userDataProfilesService,
|
|
253
|
+
this.environmentService,
|
|
254
|
+
this.logService,
|
|
255
|
+
this.storageService,
|
|
256
|
+
this.uriIdentityService
|
|
257
|
+
));
|
|
258
|
+
case "keybindings" : return ( new KeybindingsInitializer(
|
|
259
|
+
this.fileService,
|
|
260
|
+
this.userDataProfilesService,
|
|
261
|
+
this.environmentService,
|
|
262
|
+
this.logService,
|
|
263
|
+
this.storageService,
|
|
264
|
+
this.uriIdentityService
|
|
265
|
+
));
|
|
266
|
+
case "tasks" : return ( new TasksInitializer(
|
|
267
|
+
this.fileService,
|
|
268
|
+
this.userDataProfilesService,
|
|
269
|
+
this.environmentService,
|
|
270
|
+
this.logService,
|
|
271
|
+
this.storageService,
|
|
272
|
+
this.uriIdentityService
|
|
273
|
+
));
|
|
274
|
+
case "snippets" : return ( new SnippetsInitializer(
|
|
275
|
+
this.fileService,
|
|
276
|
+
this.userDataProfilesService,
|
|
277
|
+
this.environmentService,
|
|
278
|
+
this.logService,
|
|
279
|
+
this.storageService,
|
|
280
|
+
this.uriIdentityService
|
|
281
|
+
));
|
|
282
|
+
case "globalState" : return ( new GlobalStateInitializer(
|
|
283
|
+
this.storageService,
|
|
284
|
+
this.fileService,
|
|
285
|
+
this.userDataProfilesService,
|
|
286
|
+
this.environmentService,
|
|
287
|
+
this.logService,
|
|
288
|
+
this.uriIdentityService
|
|
289
|
+
));
|
|
290
|
+
}
|
|
291
|
+
throw ( new Error(`Cannot create initializer for ${syncResource}`));
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
UserDataSyncInitializer = ( __decorate([
|
|
295
|
+
( __param(0, IBrowserWorkbenchEnvironmentService)),
|
|
296
|
+
( __param(1, ISecretStorageService)),
|
|
297
|
+
( __param(2, IUserDataSyncStoreManagementService)),
|
|
298
|
+
( __param(3, IFileService)),
|
|
299
|
+
( __param(4, IUserDataProfilesService)),
|
|
300
|
+
( __param(5, IStorageService)),
|
|
301
|
+
( __param(6, IProductService)),
|
|
302
|
+
( __param(7, IRequestService)),
|
|
303
|
+
( __param(8, ILogService)),
|
|
304
|
+
( __param(9, IUriIdentityService))
|
|
305
|
+
], UserDataSyncInitializer));
|
|
306
|
+
let ExtensionsPreviewInitializer = class ExtensionsPreviewInitializer extends AbstractExtensionsInitializer {
|
|
307
|
+
constructor(extensionsData, extensionManagementService, ignoredExtensionsManagementService, fileService, userDataProfilesService, environmentService, logService, storageService, uriIdentityService) {
|
|
308
|
+
super(extensionManagementService, ignoredExtensionsManagementService, fileService, userDataProfilesService, environmentService, logService, storageService, uriIdentityService);
|
|
309
|
+
this.extensionsData = extensionsData;
|
|
310
|
+
this.preview = null;
|
|
311
|
+
}
|
|
312
|
+
getPreview() {
|
|
313
|
+
if (!this.previewPromise) {
|
|
314
|
+
this.previewPromise = super.initialize(this.extensionsData).then(() => this.preview);
|
|
315
|
+
}
|
|
316
|
+
return this.previewPromise;
|
|
317
|
+
}
|
|
318
|
+
initialize() {
|
|
319
|
+
throw ( new Error('should not be called directly'));
|
|
320
|
+
}
|
|
321
|
+
async doInitialize(remoteUserData) {
|
|
322
|
+
const remoteExtensions = await this.parseExtensions(remoteUserData);
|
|
323
|
+
if (!remoteExtensions) {
|
|
324
|
+
this.logService.info('Skipping initializing extensions because remote extensions does not exist.');
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
const installedExtensions = await this.extensionManagementService.getInstalled();
|
|
328
|
+
this.preview = this.generatePreview(remoteExtensions, installedExtensions);
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
ExtensionsPreviewInitializer = ( __decorate([
|
|
332
|
+
( __param(1, IExtensionManagementService)),
|
|
333
|
+
( __param(2, IIgnoredExtensionsManagementService)),
|
|
334
|
+
( __param(3, IFileService)),
|
|
335
|
+
( __param(4, IUserDataProfilesService)),
|
|
336
|
+
( __param(5, IEnvironmentService)),
|
|
337
|
+
( __param(6, IUserDataSyncLogService)),
|
|
338
|
+
( __param(7, IStorageService)),
|
|
339
|
+
( __param(8, IUriIdentityService))
|
|
340
|
+
], ExtensionsPreviewInitializer));
|
|
341
|
+
let InstalledExtensionsInitializer = class InstalledExtensionsInitializer {
|
|
342
|
+
constructor(extensionsPreviewInitializer, extensionEnablementService, extensionStorageService, logService) {
|
|
343
|
+
this.extensionsPreviewInitializer = extensionsPreviewInitializer;
|
|
344
|
+
this.extensionEnablementService = extensionEnablementService;
|
|
345
|
+
this.extensionStorageService = extensionStorageService;
|
|
346
|
+
this.logService = logService;
|
|
347
|
+
}
|
|
348
|
+
async initialize() {
|
|
349
|
+
const preview = await this.extensionsPreviewInitializer.getPreview();
|
|
350
|
+
if (!preview) {
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
for (const installedExtension of preview.installedExtensions) {
|
|
354
|
+
const syncExtension = preview.remoteExtensions.find(({ identifier }) => areSameExtensions(identifier, installedExtension.identifier));
|
|
355
|
+
if (syncExtension?.state) {
|
|
356
|
+
const extensionState = this.extensionStorageService.getExtensionState(installedExtension, true) || {};
|
|
357
|
+
( Object.keys(syncExtension.state)).forEach(key => extensionState[key] = syncExtension.state[key]);
|
|
358
|
+
this.extensionStorageService.setExtensionState(installedExtension, extensionState, true);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
if (preview.disabledExtensions.length) {
|
|
362
|
+
for (const identifier of preview.disabledExtensions) {
|
|
363
|
+
this.logService.trace(`Disabling extension...`, identifier.id);
|
|
364
|
+
await this.extensionEnablementService.disableExtension(identifier);
|
|
365
|
+
this.logService.info(`Disabling extension`, identifier.id);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
InstalledExtensionsInitializer = ( __decorate([
|
|
371
|
+
( __param(1, IGlobalExtensionEnablementService)),
|
|
372
|
+
( __param(2, IExtensionStorageService)),
|
|
373
|
+
( __param(3, IUserDataSyncLogService))
|
|
374
|
+
], InstalledExtensionsInitializer));
|
|
375
|
+
let NewExtensionsInitializer = class NewExtensionsInitializer {
|
|
376
|
+
constructor(extensionsPreviewInitializer, extensionService, extensionStorageService, galleryService, extensionManagementService, logService) {
|
|
377
|
+
this.extensionsPreviewInitializer = extensionsPreviewInitializer;
|
|
378
|
+
this.extensionService = extensionService;
|
|
379
|
+
this.extensionStorageService = extensionStorageService;
|
|
380
|
+
this.galleryService = galleryService;
|
|
381
|
+
this.extensionManagementService = extensionManagementService;
|
|
382
|
+
this.logService = logService;
|
|
383
|
+
}
|
|
384
|
+
async initialize() {
|
|
385
|
+
const preview = await this.extensionsPreviewInitializer.getPreview();
|
|
386
|
+
if (!preview) {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
const newlyEnabledExtensions = [];
|
|
390
|
+
const targetPlatform = await this.extensionManagementService.getTargetPlatform();
|
|
391
|
+
const galleryExtensions = await this.galleryService.getExtensions(preview.newExtensions, { targetPlatform, compatible: true }, CancellationToken.None);
|
|
392
|
+
for (const galleryExtension of galleryExtensions) {
|
|
393
|
+
try {
|
|
394
|
+
const extensionToSync = preview.remoteExtensions.find(({ identifier }) => areSameExtensions(identifier, galleryExtension.identifier));
|
|
395
|
+
if (!extensionToSync) {
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
398
|
+
if (extensionToSync.state) {
|
|
399
|
+
this.extensionStorageService.setExtensionState(galleryExtension, extensionToSync.state, true);
|
|
400
|
+
}
|
|
401
|
+
this.logService.trace(`Installing extension...`, galleryExtension.identifier.id);
|
|
402
|
+
const local = await this.extensionManagementService.installFromGallery(galleryExtension, {
|
|
403
|
+
isMachineScoped: false,
|
|
404
|
+
donotIncludePackAndDependencies: true,
|
|
405
|
+
installGivenVersion: !!extensionToSync.version,
|
|
406
|
+
installPreReleaseVersion: extensionToSync.preRelease
|
|
407
|
+
});
|
|
408
|
+
if (!( preview.disabledExtensions.some(identifier => areSameExtensions(identifier, galleryExtension.identifier)))) {
|
|
409
|
+
newlyEnabledExtensions.push(local);
|
|
410
|
+
}
|
|
411
|
+
this.logService.info(`Installed extension.`, galleryExtension.identifier.id);
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
this.logService.error(error);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
const canEnabledExtensions = newlyEnabledExtensions.filter(e => this.extensionService.canAddExtension(toExtensionDescription(e)));
|
|
418
|
+
if (!(await this.areExtensionsRunning(canEnabledExtensions))) {
|
|
419
|
+
await ( new Promise((c, e) => {
|
|
420
|
+
const disposable = this.extensionService.onDidChangeExtensions(async () => {
|
|
421
|
+
try {
|
|
422
|
+
if (await this.areExtensionsRunning(canEnabledExtensions)) {
|
|
423
|
+
disposable.dispose();
|
|
424
|
+
c();
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
catch (error) {
|
|
428
|
+
e(error);
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
}));
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
async areExtensionsRunning(extensions) {
|
|
435
|
+
await this.extensionService.whenInstalledExtensionsRegistered();
|
|
436
|
+
const runningExtensions = this.extensionService.extensions;
|
|
437
|
+
return extensions.every(e => ( runningExtensions.some(r => areSameExtensions({ id: r.identifier.value }, e.identifier))));
|
|
438
|
+
}
|
|
439
|
+
};
|
|
440
|
+
NewExtensionsInitializer = ( __decorate([
|
|
441
|
+
( __param(1, IExtensionService)),
|
|
442
|
+
( __param(2, IExtensionStorageService)),
|
|
443
|
+
( __param(3, IExtensionGalleryService)),
|
|
444
|
+
( __param(4, IExtensionManagementService)),
|
|
445
|
+
( __param(5, IUserDataSyncLogService))
|
|
446
|
+
], NewExtensionsInitializer));
|
|
447
|
+
|
|
448
|
+
export { UserDataSyncInitializer };
|