@codingame/monaco-vscode-edit-sessions-service-override 11.1.2 → 12.0.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 +2 -1
- package/index.js +21 -1
- package/package.json +21 -7
- package/vscode/src/vs/workbench/contrib/editSessions/browser/editSessions.contribution.d.ts +96 -0
- package/vscode/src/vs/workbench/contrib/editSessions/browser/editSessions.contribution.js +171 -173
- package/vscode/src/vs/workbench/contrib/editSessions/browser/editSessionsFileSystemProvider.d.ts +24 -0
- package/vscode/src/vs/workbench/contrib/editSessions/browser/editSessionsFileSystemProvider.js +4 -3
- package/vscode/src/vs/workbench/contrib/editSessions/browser/editSessionsStorageService.d.ts +80 -0
- package/vscode/src/vs/workbench/contrib/editSessions/browser/editSessionsStorageService.js +72 -78
- package/vscode/src/vs/workbench/contrib/editSessions/browser/editSessionsViews.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/editSessions/browser/editSessionsViews.js +58 -68
- package/vscode/src/vs/workbench/contrib/editSessions/common/editSessions.d.ts +52 -0
- package/vscode/src/vs/workbench/contrib/editSessions/common/editSessions.js +13 -12
- package/vscode/src/vs/workbench/contrib/editSessions/common/editSessionsLogService.d.ts +15 -0
- package/vscode/src/vs/workbench/contrib/editSessions/common/editSessionsLogService.js +7 -6
- package/vscode/src/vs/workbench/contrib/editSessions/common/editSessionsStorageClient.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/editSessions/common/editSessionsStorageClient.js +2 -1
- package/vscode/src/vs/workbench/contrib/editSessions/common/workspaceStateSync.d.ts +33 -0
- package/vscode/src/vs/workbench/contrib/editSessions/common/workspaceStateSync.js +10 -7
- package/vscode/src/vs/workbench/services/workspaces/common/editSessionIdentityService.d.ts +21 -0
- package/vscode/src/vs/workbench/services/workspaces/common/editSessionIdentityService.js +3 -1
- package/vscode/src/vs/workbench/services/workspaces/common/workspaceIdentityService.d.ts +13 -0
- package/vscode/src/vs/workbench/services/workspaces/common/workspaceIdentityService.js +3 -1
- package/editSessions.js +0 -20
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
|
+
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6';
|
|
2
3
|
import { Disposable, MutableDisposable, DisposableStore } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
3
4
|
import { Extensions as Extensions$1 } from 'vscode/vscode/vs/workbench/common/contributions';
|
|
4
5
|
import { Registry } from 'vscode/vscode/vs/platform/registry/common/platform';
|
|
6
|
+
import { ShutdownReason, LifecyclePhase } from 'vscode/vscode/vs/workbench/services/lifecycle/common/lifecycle';
|
|
5
7
|
import { ILifecycleService } from 'vscode/vscode/vs/workbench/services/lifecycle/common/lifecycle.service';
|
|
6
8
|
import { registerAction2, Action2, MenuRegistry, MenuId } from 'vscode/vscode/vs/platform/actions/common/actions';
|
|
7
9
|
import { localize2, localize } from 'vscode/vscode/vs/nls';
|
|
@@ -9,19 +11,21 @@ import { EDIT_SESSION_SYNC_CATEGORY, EDIT_SESSIONS_SHOW_VIEW, EDIT_SESSIONS_PEND
|
|
|
9
11
|
import { IEditSessionsStorageService, IEditSessionsLogService } from 'vscode/vscode/vs/workbench/contrib/editSessions/common/editSessions.service';
|
|
10
12
|
import { ISCMService } from 'vscode/vscode/vs/workbench/contrib/scm/common/scm.service';
|
|
11
13
|
import { IFileService } from 'vscode/vscode/vs/platform/files/common/files.service';
|
|
14
|
+
import { WorkbenchState } from 'vscode/vscode/vs/platform/workspace/common/workspace';
|
|
12
15
|
import { IWorkspaceContextService } from 'vscode/vscode/vs/platform/workspace/common/workspace.service';
|
|
13
16
|
import { URI } from 'vscode/vscode/vs/base/common/uri';
|
|
14
17
|
import { basename, joinPath, relativePath } from 'vscode/vscode/vs/base/common/resources';
|
|
15
18
|
import { encodeBase64 } from 'vscode/vscode/vs/base/common/buffer';
|
|
16
19
|
import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration.service';
|
|
20
|
+
import { ProgressLocation } from 'vscode/vscode/vs/platform/progress/common/progress';
|
|
17
21
|
import { IProgressService } from 'vscode/vscode/vs/platform/progress/common/progress.service';
|
|
18
22
|
import './editSessionsStorageService.js';
|
|
19
|
-
import
|
|
20
|
-
import { UserDataSyncStoreError } from 'vscode/vscode/vs/platform/userDataSync/common/userDataSync';
|
|
23
|
+
import 'vscode/vscode/vs/platform/instantiation/common/extensions';
|
|
24
|
+
import { UserDataSyncStoreError, UserDataSyncErrorCode } from 'vscode/vscode/vs/platform/userDataSync/common/userDataSync';
|
|
21
25
|
import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
22
26
|
import 'vscode/vscode/vs/platform/notification/common/notification';
|
|
23
27
|
import { INotificationService } from 'vscode/vscode/vs/platform/notification/common/notification.service';
|
|
24
|
-
import { getFileNamesMessage } from 'vscode/vscode/vs/platform/dialogs/common/dialogs';
|
|
28
|
+
import { getFileNamesMessage } from '@codingame/monaco-vscode-d6e33d82-c101-549d-a885-0807ab3e0cfb-common/vscode/vs/platform/dialogs/common/dialogs';
|
|
25
29
|
import { IDialogService, IFileDialogService } from 'vscode/vscode/vs/platform/dialogs/common/dialogs.service';
|
|
26
30
|
import { IProductService } from 'vscode/vscode/vs/platform/product/common/productService.service';
|
|
27
31
|
import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener.service';
|
|
@@ -33,15 +37,16 @@ import { ExtensionsRegistry } from 'vscode/vscode/vs/workbench/services/extensio
|
|
|
33
37
|
import { ContextKeyExpr } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
|
|
34
38
|
import { IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/contextkey.service';
|
|
35
39
|
import { ICommandService } from 'vscode/vscode/vs/platform/commands/common/commands.service';
|
|
36
|
-
import { getVirtualWorkspaceLocation } from 'vscode/vscode/vs/platform/workspace/common/virtualWorkspace';
|
|
40
|
+
import { getVirtualWorkspaceLocation } from '@codingame/monaco-vscode-d6e33d82-c101-549d-a885-0807ab3e0cfb-common/vscode/vs/platform/workspace/common/virtualWorkspace';
|
|
37
41
|
import { Schemas } from 'vscode/vscode/vs/base/common/network';
|
|
38
42
|
import { IsWebContext } from 'vscode/vscode/vs/platform/contextkey/common/contextkeys';
|
|
39
43
|
import { isProposedApiEnabled } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions';
|
|
40
44
|
import { IExtensionService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions.service';
|
|
41
45
|
import '../common/editSessionsLogService.js';
|
|
42
|
-
import { Extensions } from 'vscode/vscode/vs/workbench/common/views';
|
|
46
|
+
import { Extensions, ViewContainerLocation } from 'vscode/vscode/vs/workbench/common/views';
|
|
43
47
|
import { IViewsService } from 'vscode/vscode/vs/workbench/services/views/common/viewsService.service';
|
|
44
|
-
import {
|
|
48
|
+
import { SyncDescriptor } from 'vscode/vscode/vs/platform/instantiation/common/descriptors';
|
|
49
|
+
import { ViewPaneContainer } from '@codingame/monaco-vscode-9e888134-1a6f-58d9-b0e6-0fc047448366-common/vscode/vs/workbench/browser/parts/views/viewPaneContainer';
|
|
45
50
|
import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
|
|
46
51
|
import { EditSessionsDataViews } from './editSessionsViews.js';
|
|
47
52
|
import { EditSessionsFileSystemProvider } from './editSessionsFileSystemProvider.js';
|
|
@@ -53,8 +58,9 @@ import { EditSessionIdentityMatch } from 'vscode/vscode/vs/platform/workspace/co
|
|
|
53
58
|
import { IEditSessionIdentityService } from 'vscode/vscode/vs/platform/workspace/common/editSessions.service';
|
|
54
59
|
import { ThemeIcon } from 'vscode/vscode/vs/base/common/themables';
|
|
55
60
|
import { IOutputService } from 'vscode/vscode/vs/workbench/services/output/common/output.service';
|
|
61
|
+
import { StorageScope, StorageTarget } from 'vscode/vscode/vs/platform/storage/common/storage';
|
|
56
62
|
import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage.service';
|
|
57
|
-
import { NumberBadge } from 'vscode/vscode/vs/workbench/services/activity/common/activity';
|
|
63
|
+
import { NumberBadge } from '@codingame/monaco-vscode-a7c9ae3c-16d2-5d17-86b2-981be7094566-common/vscode/vs/workbench/services/activity/common/activity';
|
|
58
64
|
import { IActivityService } from 'vscode/vscode/vs/workbench/services/activity/common/activity.service';
|
|
59
65
|
import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService.service';
|
|
60
66
|
import { Codicon } from 'vscode/vscode/vs/base/common/codicons';
|
|
@@ -68,29 +74,29 @@ import { EditSessionsStoreClient } from '../common/editSessionsStorageClient.js'
|
|
|
68
74
|
import { IUriIdentityService } from 'vscode/vscode/vs/platform/uriIdentity/common/uriIdentity.service';
|
|
69
75
|
import { IWorkspaceIdentityService } from 'vscode/vscode/vs/workbench/services/workspaces/common/workspaceIdentityService.service';
|
|
70
76
|
import { hashAsync } from 'vscode/vscode/vs/base/common/hash';
|
|
71
|
-
import Severity
|
|
77
|
+
import Severity from 'vscode/vscode/vs/base/common/severity';
|
|
72
78
|
|
|
73
79
|
var EditSessionsContribution_1;
|
|
74
80
|
const continueWorkingOnCommand = {
|
|
75
81
|
id: '_workbench.editSessions.actions.continueEditSession',
|
|
76
|
-
title: ( localize2(
|
|
77
|
-
precondition: (
|
|
82
|
+
title: ( localize2(5639, 'Continue Working On...')),
|
|
83
|
+
precondition: ( WorkspaceFolderCountContext.notEqualsTo('0')),
|
|
78
84
|
f1: true
|
|
79
85
|
};
|
|
80
86
|
const openLocalFolderCommand = {
|
|
81
87
|
id: '_workbench.editSessions.actions.continueEditSession.openLocalFolder',
|
|
82
|
-
title: ( localize2(
|
|
88
|
+
title: ( localize2(5640, 'Open In Local Folder')),
|
|
83
89
|
category: EDIT_SESSION_SYNC_CATEGORY,
|
|
84
|
-
precondition: (
|
|
90
|
+
precondition: ( ContextKeyExpr.and(( IsWebContext.toNegated()), VirtualWorkspaceContext))
|
|
85
91
|
};
|
|
86
92
|
const showOutputChannelCommand = {
|
|
87
93
|
id: 'workbench.editSessions.actions.showOutputChannel',
|
|
88
|
-
title: ( localize2(
|
|
94
|
+
title: ( localize2(5641, "Show Log")),
|
|
89
95
|
category: EDIT_SESSION_SYNC_CATEGORY
|
|
90
96
|
};
|
|
91
97
|
const installAdditionalContinueOnOptionsCommand = {
|
|
92
98
|
id: 'workbench.action.continueOn.extensions',
|
|
93
|
-
title: ( localize(
|
|
99
|
+
title: ( localize(5642, 'Install additional development environment options')),
|
|
94
100
|
};
|
|
95
101
|
registerAction2(class extends Action2 {
|
|
96
102
|
constructor() {
|
|
@@ -100,9 +106,9 @@ registerAction2(class extends Action2 {
|
|
|
100
106
|
return accessor.get(IExtensionsWorkbenchService).openSearch('@tag:continueOn');
|
|
101
107
|
}
|
|
102
108
|
});
|
|
103
|
-
const resumeProgressOptionsTitle = `[${( localize(
|
|
109
|
+
const resumeProgressOptionsTitle = `[${( localize(5643, 'Resuming working changes...'))}](command:${showOutputChannelCommand.id})`;
|
|
104
110
|
const resumeProgressOptions = {
|
|
105
|
-
location:
|
|
111
|
+
location: ProgressLocation.Window,
|
|
106
112
|
type: 'syncing',
|
|
107
113
|
};
|
|
108
114
|
const queryParamName = 'editSessionId';
|
|
@@ -142,25 +148,17 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
142
148
|
this.uriIdentityService = uriIdentityService;
|
|
143
149
|
this.workspaceIdentityService = workspaceIdentityService;
|
|
144
150
|
this.continueEditSessionOptions = [];
|
|
145
|
-
this.accountsMenuBadgeDisposable = this._register((
|
|
146
|
-
this.registeredCommands = (
|
|
151
|
+
this.accountsMenuBadgeDisposable = this._register(( new MutableDisposable()));
|
|
152
|
+
this.registeredCommands = ( new Set());
|
|
147
153
|
this.shouldShowViewsContext = EDIT_SESSIONS_SHOW_VIEW.bindTo(this.contextKeyService);
|
|
148
154
|
this.pendingEditSessionsContext = EDIT_SESSIONS_PENDING.bindTo(this.contextKeyService);
|
|
149
155
|
this.pendingEditSessionsContext.set(false);
|
|
150
156
|
if (!this.productService['editSessions.store']?.url) {
|
|
151
157
|
return;
|
|
152
158
|
}
|
|
153
|
-
this.editSessionsStorageClient = (
|
|
154
|
-
(URI.parse(this.productService['editSessions.store'].url)),
|
|
155
|
-
this.productService,
|
|
156
|
-
this.requestService,
|
|
157
|
-
this.logService,
|
|
158
|
-
this.environmentService,
|
|
159
|
-
this.fileService,
|
|
160
|
-
this.storageService
|
|
161
|
-
)));
|
|
159
|
+
this.editSessionsStorageClient = ( new EditSessionsStoreClient(( URI.parse(this.productService['editSessions.store'].url)), this.productService, this.requestService, this.logService, this.environmentService, this.fileService, this.storageService));
|
|
162
160
|
this.editSessionsStorageService.storeClient = this.editSessionsStorageClient;
|
|
163
|
-
this.workspaceStateSynchronizer = (
|
|
161
|
+
this.workspaceStateSynchronizer = ( new WorkspaceStateSynchroniser(
|
|
164
162
|
this.userDataProfilesService.defaultProfile,
|
|
165
163
|
undefined,
|
|
166
164
|
this.editSessionsStorageClient,
|
|
@@ -173,15 +171,15 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
173
171
|
this.uriIdentityService,
|
|
174
172
|
this.workspaceIdentityService,
|
|
175
173
|
this.editSessionsStorageService
|
|
176
|
-
))
|
|
174
|
+
));
|
|
177
175
|
this.autoResumeEditSession();
|
|
178
176
|
this.registerActions();
|
|
179
177
|
this.registerViews();
|
|
180
178
|
this.registerContributedEditSessionOptions();
|
|
181
|
-
this._register(this.fileService.registerProvider(EditSessionsFileSystemProvider.SCHEMA, (
|
|
179
|
+
this._register(this.fileService.registerProvider(EditSessionsFileSystemProvider.SCHEMA, ( new EditSessionsFileSystemProvider(this.editSessionsStorageService))));
|
|
182
180
|
this.lifecycleService.onWillShutdown((e) => {
|
|
183
|
-
if (e.reason !==
|
|
184
|
-
e.join(this.autoStoreEditSession(), { id: 'autoStoreWorkingChanges', label: ( localize(
|
|
181
|
+
if (e.reason !== ShutdownReason.RELOAD && this.editSessionsStorageService.isSignedIn && this.configurationService.getValue('workbench.experimental.cloudChanges.autoStore') === 'onShutdown' && !isWeb) {
|
|
182
|
+
e.join(this.autoStoreEditSession(), { id: 'autoStoreWorkingChanges', label: ( localize(5644, 'Storing current working changes...')) });
|
|
185
183
|
}
|
|
186
184
|
});
|
|
187
185
|
this._register(this.editSessionsStorageService.onDidSignIn(() => this.updateAccountsMenuBadge()));
|
|
@@ -198,7 +196,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
198
196
|
await this.progressService.withProgress(resumeProgressOptions, async (progress) => await this.resumeEditSession(undefined, true, undefined, undefined, progress));
|
|
199
197
|
}
|
|
200
198
|
else if (shouldAutoResumeOnReload) {
|
|
201
|
-
const hasApplicationLaunchedFromContinueOnFlow = this.storageService.getBoolean(EditSessionsContribution_1.APPLICATION_LAUNCHED_VIA_CONTINUE_ON_STORAGE_KEY,
|
|
199
|
+
const hasApplicationLaunchedFromContinueOnFlow = this.storageService.getBoolean(EditSessionsContribution_1.APPLICATION_LAUNCHED_VIA_CONTINUE_ON_STORAGE_KEY, StorageScope.APPLICATION, false);
|
|
202
200
|
this.logService.info(`Prompting to enable cloud changes, has application previously launched from Continue On flow: ${hasApplicationLaunchedFromContinueOnFlow}`);
|
|
203
201
|
const handlePendingEditSessions = () => {
|
|
204
202
|
this.logService.info('Showing badge to enable cloud changes in accounts menu...');
|
|
@@ -208,14 +206,14 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
208
206
|
disposable.dispose();
|
|
209
207
|
this.logService.info('Showing badge to enable cloud changes in accounts menu succeeded, resuming cloud changes...');
|
|
210
208
|
await this.progressService.withProgress(resumeProgressOptions, async (progress) => await this.resumeEditSession(undefined, true, undefined, undefined, progress));
|
|
211
|
-
this.storageService.remove(EditSessionsContribution_1.APPLICATION_LAUNCHED_VIA_CONTINUE_ON_STORAGE_KEY,
|
|
209
|
+
this.storageService.remove(EditSessionsContribution_1.APPLICATION_LAUNCHED_VIA_CONTINUE_ON_STORAGE_KEY, StorageScope.APPLICATION);
|
|
212
210
|
this.environmentService.continueOn = undefined;
|
|
213
211
|
});
|
|
214
212
|
};
|
|
215
213
|
if ((this.environmentService.continueOn !== undefined) &&
|
|
216
214
|
!this.editSessionsStorageService.isSignedIn &&
|
|
217
215
|
hasApplicationLaunchedFromContinueOnFlow === false) {
|
|
218
|
-
this.storageService.store(EditSessionsContribution_1.APPLICATION_LAUNCHED_VIA_CONTINUE_ON_STORAGE_KEY, true,
|
|
216
|
+
this.storageService.store(EditSessionsContribution_1.APPLICATION_LAUNCHED_VIA_CONTINUE_ON_STORAGE_KEY, true, StorageScope.APPLICATION, StorageTarget.MACHINE);
|
|
219
217
|
this.logService.info('Prompting to enable cloud changes...');
|
|
220
218
|
await this.editSessionsStorageService.initialize('read');
|
|
221
219
|
if (this.editSessionsStorageService.isSignedIn) {
|
|
@@ -239,31 +237,31 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
239
237
|
if (this.editSessionsStorageService.isSignedIn) {
|
|
240
238
|
return this.accountsMenuBadgeDisposable.clear();
|
|
241
239
|
}
|
|
242
|
-
const badge = (
|
|
240
|
+
const badge = ( new NumberBadge(1, () => ( localize(5645, 'Check for pending cloud changes'))));
|
|
243
241
|
this.accountsMenuBadgeDisposable.value = this.activityService.showAccountsActivity({ badge });
|
|
244
242
|
}
|
|
245
243
|
async autoStoreEditSession() {
|
|
246
|
-
const cancellationTokenSource = (
|
|
244
|
+
const cancellationTokenSource = ( new CancellationTokenSource());
|
|
247
245
|
await this.progressService.withProgress({
|
|
248
|
-
location:
|
|
246
|
+
location: ProgressLocation.Window,
|
|
249
247
|
type: 'syncing',
|
|
250
|
-
title: ( localize(
|
|
248
|
+
title: ( localize(5646, 'Storing working changes...'))
|
|
251
249
|
}, async () => this.storeEditSession(false, cancellationTokenSource.token), () => {
|
|
252
250
|
cancellationTokenSource.cancel();
|
|
253
251
|
cancellationTokenSource.dispose();
|
|
254
252
|
});
|
|
255
253
|
}
|
|
256
254
|
registerViews() {
|
|
257
|
-
const container = (
|
|
255
|
+
const container = ( Registry.as(Extensions.ViewContainersRegistry)).registerViewContainer({
|
|
258
256
|
id: EDIT_SESSIONS_CONTAINER_ID,
|
|
259
257
|
title: EDIT_SESSIONS_TITLE,
|
|
260
|
-
ctorDescriptor: (
|
|
258
|
+
ctorDescriptor: ( new SyncDescriptor(
|
|
261
259
|
ViewPaneContainer,
|
|
262
260
|
[EDIT_SESSIONS_CONTAINER_ID, { mergeViewWithContainerWhenSingleView: true }]
|
|
263
|
-
))
|
|
261
|
+
)),
|
|
264
262
|
icon: EDIT_SESSIONS_VIEW_ICON,
|
|
265
263
|
hideIfEmpty: true
|
|
266
|
-
},
|
|
264
|
+
}, ViewContainerLocation.Sidebar, { doNotRegisterOpenCommand: true });
|
|
267
265
|
this._register(this.instantiationService.createInstance(EditSessionsDataViews, container));
|
|
268
266
|
}
|
|
269
267
|
registerActions() {
|
|
@@ -291,7 +289,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
291
289
|
constructor() {
|
|
292
290
|
super({
|
|
293
291
|
id: 'workbench.editSessions.actions.showEditSessions',
|
|
294
|
-
title: ( localize2(
|
|
292
|
+
title: ( localize2(5647, 'Show Cloud Changes')),
|
|
295
293
|
category: EDIT_SESSION_SYNC_CATEGORY,
|
|
296
294
|
f1: true
|
|
297
295
|
});
|
|
@@ -322,13 +320,13 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
322
320
|
let ref;
|
|
323
321
|
if (shouldStoreEditSession) {
|
|
324
322
|
that.telemetryService.publicLog2('continueOn.editSessions.store');
|
|
325
|
-
const cancellationTokenSource = (
|
|
323
|
+
const cancellationTokenSource = ( new CancellationTokenSource());
|
|
326
324
|
try {
|
|
327
325
|
ref = await that.progressService.withProgress({
|
|
328
|
-
location:
|
|
326
|
+
location: ProgressLocation.Notification,
|
|
329
327
|
cancellable: true,
|
|
330
328
|
type: 'syncing',
|
|
331
|
-
title: ( localize(
|
|
329
|
+
title: ( localize(5648, 'Storing your working changes...'))
|
|
332
330
|
}, async () => {
|
|
333
331
|
const ref = await that.storeEditSession(false, cancellationTokenSource.token);
|
|
334
332
|
if (ref !== undefined) {
|
|
@@ -358,11 +356,11 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
358
356
|
uri = uri.with({
|
|
359
357
|
query: uri.query.length > 0 ? (uri.query + `&${queryParamName}=${encodedRef}&continueOn=1`) : `${queryParamName}=${encodedRef}&continueOn=1`
|
|
360
358
|
});
|
|
361
|
-
that.logService.info(`Opening ${(
|
|
359
|
+
that.logService.info(`Opening ${( uri.toString())}`);
|
|
362
360
|
await that.openerService.open(uri, { openExternal: true });
|
|
363
361
|
}
|
|
364
362
|
else if (!shouldStoreEditSession && uri !== 'noDestinationUri') {
|
|
365
|
-
that.logService.info(`Opening ${(
|
|
363
|
+
that.logService.info(`Opening ${( uri.toString())}`);
|
|
366
364
|
await that.openerService.open(uri, { openExternal: true });
|
|
367
365
|
}
|
|
368
366
|
else if (ref === undefined && shouldStoreEditSession) {
|
|
@@ -377,7 +375,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
377
375
|
constructor() {
|
|
378
376
|
super({
|
|
379
377
|
id: 'workbench.editSessions.actions.resumeLatest',
|
|
380
|
-
title: ( localize2(
|
|
378
|
+
title: ( localize2(5649, 'Resume Latest Changes from Cloud')),
|
|
381
379
|
category: EDIT_SESSION_SYNC_CATEGORY,
|
|
382
380
|
f1: true,
|
|
383
381
|
});
|
|
@@ -390,7 +388,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
390
388
|
constructor() {
|
|
391
389
|
super({
|
|
392
390
|
id: 'workbench.editSessions.actions.resumeFromSerializedPayload',
|
|
393
|
-
title: ( localize2(
|
|
391
|
+
title: ( localize2(5650, 'Resume Changes from Serialized Data')),
|
|
394
392
|
category: 'Developer',
|
|
395
393
|
f1: true,
|
|
396
394
|
});
|
|
@@ -410,16 +408,16 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
410
408
|
constructor() {
|
|
411
409
|
super({
|
|
412
410
|
id: 'workbench.editSessions.actions.storeCurrent',
|
|
413
|
-
title: ( localize2(
|
|
411
|
+
title: ( localize2(5651, 'Store Working Changes in Cloud')),
|
|
414
412
|
category: EDIT_SESSION_SYNC_CATEGORY,
|
|
415
413
|
f1: true,
|
|
416
414
|
});
|
|
417
415
|
}
|
|
418
416
|
async run(accessor) {
|
|
419
|
-
const cancellationTokenSource = (
|
|
417
|
+
const cancellationTokenSource = ( new CancellationTokenSource());
|
|
420
418
|
await that.progressService.withProgress({
|
|
421
|
-
location:
|
|
422
|
-
title: ( localize(
|
|
419
|
+
location: ProgressLocation.Notification,
|
|
420
|
+
title: ( localize(5652, 'Storing working changes...'))
|
|
423
421
|
}, async () => {
|
|
424
422
|
that.telemetryService.publicLog2('editSessions.store');
|
|
425
423
|
await that.storeEditSession(true, cancellationTokenSource.token);
|
|
@@ -432,7 +430,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
432
430
|
}
|
|
433
431
|
async resumeEditSession(ref, silent, forceApplyUnrelatedChange, applyPartialMatch, progress, serializedData) {
|
|
434
432
|
await this.remoteAgentService.getEnvironment();
|
|
435
|
-
if (this.contextService.getWorkbenchState() ===
|
|
433
|
+
if (this.contextService.getWorkbenchState() === WorkbenchState.EMPTY) {
|
|
436
434
|
return;
|
|
437
435
|
}
|
|
438
436
|
this.logService.info(ref !== undefined ? `Resuming changes from cloud with ref ${ref}...` : 'Checking for pending cloud changes...');
|
|
@@ -441,14 +439,14 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
441
439
|
}
|
|
442
440
|
this.telemetryService.publicLog2('editSessions.resume');
|
|
443
441
|
performance.mark('code/willResumeEditSessionFromIdentifier');
|
|
444
|
-
progress?.report({ message: ( localize(
|
|
442
|
+
progress?.report({ message: ( localize(5653, 'Checking for pending cloud changes...')) });
|
|
445
443
|
const data = serializedData ? { content: serializedData, ref: '' } : await this.editSessionsStorageService.read('editSessions', ref);
|
|
446
444
|
if (!data) {
|
|
447
445
|
if (ref === undefined && !silent) {
|
|
448
|
-
this.notificationService.info(( localize(
|
|
446
|
+
this.notificationService.info(( localize(5654, 'There are no changes to resume from the cloud.')));
|
|
449
447
|
}
|
|
450
448
|
else if (ref !== undefined) {
|
|
451
|
-
this.notificationService.warn(( localize(
|
|
449
|
+
this.notificationService.warn(( localize(5655, 'Could not resume changes from the cloud for ID {0}.', ref)));
|
|
452
450
|
}
|
|
453
451
|
this.logService.info(ref !== undefined ? `Aborting resuming changes from cloud as no edit session content is available to be applied from ref ${ref}.` : `Aborting resuming edit session as no edit session content is available to be applied`);
|
|
454
452
|
return;
|
|
@@ -458,7 +456,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
458
456
|
ref = data.ref;
|
|
459
457
|
if (editSession.version > EditSessionSchemaVersion) {
|
|
460
458
|
this.notificationService.error(( localize(
|
|
461
|
-
|
|
459
|
+
5656,
|
|
462
460
|
"Please upgrade to a newer version of {0} to resume your working changes from the cloud.",
|
|
463
461
|
this.productService.nameLong
|
|
464
462
|
)));
|
|
@@ -472,19 +470,19 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
472
470
|
}
|
|
473
471
|
if (conflictingChanges.length > 0) {
|
|
474
472
|
const { confirmed } = await this.dialogService.confirm({
|
|
475
|
-
type: Severity
|
|
473
|
+
type: Severity.Warning,
|
|
476
474
|
message: conflictingChanges.length > 1 ?
|
|
477
475
|
( localize(
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
476
|
+
5657,
|
|
477
|
+
'Resuming your working changes from the cloud will overwrite the following {0} files. Do you want to proceed?',
|
|
478
|
+
conflictingChanges.length
|
|
479
|
+
)) :
|
|
482
480
|
( localize(
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
detail: conflictingChanges.length > 1 ? getFileNamesMessage((
|
|
481
|
+
5658,
|
|
482
|
+
'Resuming your working changes from the cloud will overwrite {0}. Do you want to proceed?',
|
|
483
|
+
basename(conflictingChanges[0].uri)
|
|
484
|
+
)),
|
|
485
|
+
detail: conflictingChanges.length > 1 ? getFileNamesMessage(( conflictingChanges.map((c) => c.uri))) : undefined
|
|
488
486
|
});
|
|
489
487
|
if (!confirmed) {
|
|
490
488
|
return;
|
|
@@ -505,8 +503,8 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
505
503
|
this.telemetryService.publicLog2('editSessions.resume.outcome', { hashedId: hashedEditSessionId(ref), outcome: 'resumeSucceeded' });
|
|
506
504
|
}
|
|
507
505
|
catch (ex) {
|
|
508
|
-
this.logService.error('Failed to resume edit session, reason: ', (
|
|
509
|
-
this.notificationService.error(( localize(
|
|
506
|
+
this.logService.error('Failed to resume edit session, reason: ', ( ex.toString()));
|
|
507
|
+
this.notificationService.error(( localize(5659, "Failed to resume your working changes from the cloud.")));
|
|
510
508
|
}
|
|
511
509
|
performance.mark('code/didResumeEditSessionFromIdentifier');
|
|
512
510
|
}
|
|
@@ -514,7 +512,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
514
512
|
const changes = [];
|
|
515
513
|
const conflictingChanges = [];
|
|
516
514
|
const workspaceFolders = this.contextService.getWorkspace().folders;
|
|
517
|
-
const cancellationTokenSource = (
|
|
515
|
+
const cancellationTokenSource = ( new CancellationTokenSource());
|
|
518
516
|
for (const folder of editSession.folders) {
|
|
519
517
|
let folderRoot;
|
|
520
518
|
if (folder.canonicalIdentity) {
|
|
@@ -534,10 +532,10 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
534
532
|
else if (match === EditSessionIdentityMatch.Partial &&
|
|
535
533
|
this.configurationService.getValue('workbench.experimental.cloudChanges.partialMatches.enabled') === true) {
|
|
536
534
|
if (!applyPartialMatch) {
|
|
537
|
-
this.notificationService.prompt(Severity
|
|
538
|
-
|
|
535
|
+
this.notificationService.prompt(Severity.Info, ( localize(
|
|
536
|
+
5660,
|
|
539
537
|
'You have pending working changes in the cloud for this workspace. Would you like to resume them?'
|
|
540
|
-
)), [{ label: ( localize(
|
|
538
|
+
)), [{ label: ( localize(5661, 'Resume')), run: () => this.resumeEditSession(ref, false, undefined, true) }]);
|
|
541
539
|
}
|
|
542
540
|
else {
|
|
543
541
|
folderRoot = f;
|
|
@@ -554,12 +552,12 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
554
552
|
this.logService.info(`Skipping applying ${folder.workingChanges.length} changes from edit session with ref ${ref} as no matching workspace folder was found.`);
|
|
555
553
|
return { changes: [], conflictingChanges: [], contributedStateHandlers: [] };
|
|
556
554
|
}
|
|
557
|
-
const localChanges = (
|
|
555
|
+
const localChanges = ( new Set());
|
|
558
556
|
for (const repository of this.scmService.repositories) {
|
|
559
557
|
if (repository.provider.rootUri !== undefined &&
|
|
560
558
|
this.contextService.getWorkspaceFolder(repository.provider.rootUri)?.name === folder.name) {
|
|
561
559
|
const repositoryChanges = this.getChangedResources(repository);
|
|
562
|
-
repositoryChanges.forEach((change) => localChanges.add((
|
|
560
|
+
repositoryChanges.forEach((change) => localChanges.add(( change.toString())));
|
|
563
561
|
}
|
|
564
562
|
}
|
|
565
563
|
for (const change of folder.workingChanges) {
|
|
@@ -573,7 +571,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
573
571
|
return { changes, conflictingChanges };
|
|
574
572
|
}
|
|
575
573
|
async willChangeLocalContents(localChanges, uriWithIncomingChanges, incomingChange) {
|
|
576
|
-
if (!(
|
|
574
|
+
if (!( localChanges.has(( uriWithIncomingChanges.toString())))) {
|
|
577
575
|
return false;
|
|
578
576
|
}
|
|
579
577
|
const { contents, type } = incomingChange;
|
|
@@ -589,7 +587,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
589
587
|
return await this.fileService.exists(uriWithIncomingChanges);
|
|
590
588
|
}
|
|
591
589
|
default:
|
|
592
|
-
throw (
|
|
590
|
+
throw ( new Error('Unhandled change type.'));
|
|
593
591
|
}
|
|
594
592
|
}
|
|
595
593
|
async storeEditSession(fromStoreCommand, cancellationToken) {
|
|
@@ -606,7 +604,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
606
604
|
for (const uri of trackedUris) {
|
|
607
605
|
const workspaceFolder = this.contextService.getWorkspaceFolder(uri);
|
|
608
606
|
if (!workspaceFolder) {
|
|
609
|
-
this.logService.info(`Skipping working change ${(
|
|
607
|
+
this.logService.info(`Skipping working change ${( uri.toString())} as no associated workspace folder was found.`);
|
|
610
608
|
continue;
|
|
611
609
|
}
|
|
612
610
|
await this.editSessionIdentityService.onWillCreateEditSessionIdentity(workspaceFolder, cancellationToken);
|
|
@@ -623,7 +621,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
623
621
|
const contents = encodeBase64((await this.fileService.readFile(uri)).value);
|
|
624
622
|
editSessionSize += contents.length;
|
|
625
623
|
if (editSessionSize > this.editSessionsStorageService.SIZE_LIMIT) {
|
|
626
|
-
this.notificationService.error(( localize(
|
|
624
|
+
this.notificationService.error(( localize(5662, 'Your working changes exceed the size limit and cannot be stored.')));
|
|
627
625
|
return undefined;
|
|
628
626
|
}
|
|
629
627
|
workingChanges.push({ type: ChangeType.Addition, fileType: FileType.File, contents: contents, relativeFilePath: relativeFilePath });
|
|
@@ -643,7 +641,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
643
641
|
this.logService.info('Skipped storing working changes in the cloud as there are no edits to store.');
|
|
644
642
|
if (fromStoreCommand) {
|
|
645
643
|
this.notificationService.info(( localize(
|
|
646
|
-
|
|
644
|
+
5663,
|
|
647
645
|
'Skipped storing working changes in the cloud as there are no edits to store.'
|
|
648
646
|
)));
|
|
649
647
|
}
|
|
@@ -657,16 +655,16 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
657
655
|
return ref;
|
|
658
656
|
}
|
|
659
657
|
catch (ex) {
|
|
660
|
-
this.logService.error(`Failed to store edit session, reason: `, (
|
|
658
|
+
this.logService.error(`Failed to store edit session, reason: `, ( ex.toString()));
|
|
661
659
|
if (ex instanceof UserDataSyncStoreError) {
|
|
662
660
|
switch (ex.code) {
|
|
663
|
-
case
|
|
661
|
+
case UserDataSyncErrorCode.TooLarge:
|
|
664
662
|
this.telemetryService.publicLog2('editSessions.upload.failed', { reason: 'TooLarge' });
|
|
665
|
-
this.notificationService.error(( localize(
|
|
663
|
+
this.notificationService.error(( localize(5662, 'Your working changes exceed the size limit and cannot be stored.')));
|
|
666
664
|
break;
|
|
667
665
|
default:
|
|
668
666
|
this.telemetryService.publicLog2('editSessions.upload.failed', { reason: 'unknown' });
|
|
669
|
-
this.notificationService.error(( localize(
|
|
667
|
+
this.notificationService.error(( localize(5664, 'Your working changes cannot be stored.')));
|
|
670
668
|
break;
|
|
671
669
|
}
|
|
672
670
|
}
|
|
@@ -677,7 +675,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
677
675
|
return repository.provider.groups.reduce((resources, resourceGroups) => {
|
|
678
676
|
resourceGroups.resources.forEach((resource) => resources.add(resource.sourceUri));
|
|
679
677
|
return resources;
|
|
680
|
-
}, (
|
|
678
|
+
}, ( new Set()));
|
|
681
679
|
}
|
|
682
680
|
hasEditSession() {
|
|
683
681
|
for (const repository of this.scmService.repositories) {
|
|
@@ -696,25 +694,25 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
696
694
|
return false;
|
|
697
695
|
}
|
|
698
696
|
if (this.hasEditSession()) {
|
|
699
|
-
const disposables = (
|
|
697
|
+
const disposables = ( new DisposableStore());
|
|
700
698
|
const quickpick = disposables.add(this.quickInputService.createQuickPick());
|
|
701
|
-
quickpick.placeholder = ( localize(
|
|
699
|
+
quickpick.placeholder = ( localize(5665, "Select whether to bring your working changes with you"));
|
|
702
700
|
quickpick.ok = false;
|
|
703
701
|
quickpick.ignoreFocusOut = true;
|
|
704
|
-
const withCloudChanges = { label: ( localize(
|
|
705
|
-
const withoutCloudChanges = { label: ( localize(
|
|
702
|
+
const withCloudChanges = { label: ( localize(5666, "Yes, continue with my working changes")) };
|
|
703
|
+
const withoutCloudChanges = { label: ( localize(5667, "No, continue without my working changes")) };
|
|
706
704
|
quickpick.items = [withCloudChanges, withoutCloudChanges];
|
|
707
|
-
const continueWithCloudChanges = await (
|
|
705
|
+
const continueWithCloudChanges = await ( new Promise((resolve, reject) => {
|
|
708
706
|
disposables.add(quickpick.onDidAccept(() => {
|
|
709
707
|
resolve(quickpick.selectedItems[0] === withCloudChanges);
|
|
710
708
|
disposables.dispose();
|
|
711
709
|
}));
|
|
712
710
|
disposables.add(quickpick.onDidHide(() => {
|
|
713
|
-
reject((
|
|
711
|
+
reject(( new CancellationError()));
|
|
714
712
|
disposables.dispose();
|
|
715
713
|
}));
|
|
716
714
|
quickpick.show();
|
|
717
|
-
}))
|
|
715
|
+
}));
|
|
718
716
|
if (!continueWithCloudChanges) {
|
|
719
717
|
this.telemetryService.publicLog2('continueOn.editSessions.canStore.outcome', { outcome: 'didNotEnableEditSessionsWhenPrompted' });
|
|
720
718
|
return continueWithCloudChanges;
|
|
@@ -745,13 +743,13 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
745
743
|
const icon = command.icon;
|
|
746
744
|
const title = typeof command.title === 'string' ? command.title : command.title.value;
|
|
747
745
|
const when = ContextKeyExpr.deserialize(contribution.when);
|
|
748
|
-
continueEditSessionOptions.push((
|
|
746
|
+
continueEditSessionOptions.push(( new ContinueEditSessionItem(
|
|
749
747
|
ThemeIcon.isThemeIcon(icon) ? `$(${icon.id}) ${title}` : title,
|
|
750
748
|
command.id,
|
|
751
749
|
command.source?.title,
|
|
752
750
|
when,
|
|
753
751
|
contribution.documentation
|
|
754
|
-
)))
|
|
752
|
+
)));
|
|
755
753
|
if (contribution.qualifiedName) {
|
|
756
754
|
this.generateStandaloneOptionCommand(command.id, contribution.qualifiedName, contribution.category ?? command.category, when, contribution.remoteGroup);
|
|
757
755
|
}
|
|
@@ -768,7 +766,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
768
766
|
precondition: when,
|
|
769
767
|
f1: true
|
|
770
768
|
};
|
|
771
|
-
if (!(
|
|
769
|
+
if (!( this.registeredCommands.has(command.id))) {
|
|
772
770
|
this.registeredCommands.add(command.id);
|
|
773
771
|
this._register(registerAction2(class StandaloneContinueOnOption extends Action2 {
|
|
774
772
|
constructor() {
|
|
@@ -795,31 +793,31 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
795
793
|
}
|
|
796
794
|
async run(accessor) {
|
|
797
795
|
const selection = await that.fileDialogService.showOpenDialog({
|
|
798
|
-
title: ( localize(
|
|
796
|
+
title: ( localize(5668, 'Select a local folder to continue working in')),
|
|
799
797
|
canSelectFolders: true,
|
|
800
798
|
canSelectMany: false,
|
|
801
799
|
canSelectFiles: false,
|
|
802
800
|
availableFileSystems: [Schemas.file]
|
|
803
801
|
});
|
|
804
|
-
return selection?.length !== 1 ? undefined : (
|
|
802
|
+
return selection?.length !== 1 ? undefined : ( URI.from({
|
|
805
803
|
scheme: that.productService.urlProtocol,
|
|
806
804
|
authority: Schemas.file,
|
|
807
805
|
path: selection[0].path
|
|
808
|
-
}))
|
|
806
|
+
}));
|
|
809
807
|
}
|
|
810
808
|
}));
|
|
811
809
|
if (getVirtualWorkspaceLocation(this.contextService.getWorkspace()) !== undefined && isNative) {
|
|
812
|
-
this.generateStandaloneOptionCommand(openLocalFolderCommand.id, ( localize(
|
|
810
|
+
this.generateStandaloneOptionCommand(openLocalFolderCommand.id, ( localize(5669, 'Continue Working in Existing Local Folder')), undefined, openLocalFolderCommand.precondition, undefined);
|
|
813
811
|
}
|
|
814
812
|
}
|
|
815
813
|
async pickContinueEditSessionDestination() {
|
|
816
|
-
const disposables = (
|
|
814
|
+
const disposables = ( new DisposableStore());
|
|
817
815
|
const quickPick = disposables.add(this.quickInputService.createQuickPick({ useSeparators: true }));
|
|
818
|
-
const workspaceContext = this.contextService.getWorkbenchState() ===
|
|
816
|
+
const workspaceContext = this.contextService.getWorkbenchState() === WorkbenchState.FOLDER
|
|
819
817
|
? this.contextService.getWorkspace().folders[0].name
|
|
820
|
-
: (
|
|
818
|
+
: ( this.contextService.getWorkspace().folders.map((folder) => folder.name)).join(', ');
|
|
821
819
|
quickPick.placeholder = ( localize(
|
|
822
|
-
|
|
820
|
+
5670,
|
|
823
821
|
"Select a development environment to continue working on {0} in",
|
|
824
822
|
`'${workspaceContext}'`
|
|
825
823
|
));
|
|
@@ -827,7 +825,7 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
827
825
|
this.extensionService.onDidChangeExtensions(() => {
|
|
828
826
|
quickPick.items = this.createPickItems();
|
|
829
827
|
});
|
|
830
|
-
const command = await (
|
|
828
|
+
const command = await ( new Promise((resolve, reject) => {
|
|
831
829
|
disposables.add(quickPick.onDidHide(() => {
|
|
832
830
|
disposables.dispose();
|
|
833
831
|
resolve(undefined);
|
|
@@ -845,11 +843,11 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
845
843
|
quickPick.show();
|
|
846
844
|
disposables.add(quickPick.onDidTriggerItemButton(async (e) => {
|
|
847
845
|
if (e.item.documentation !== undefined) {
|
|
848
|
-
const uri = URI.isUri(e.item.documentation) ? (
|
|
846
|
+
const uri = URI.isUri(e.item.documentation) ? ( URI.parse(e.item.documentation)) : await this.commandService.executeCommand(e.item.documentation);
|
|
849
847
|
void this.openerService.open(uri, { openExternal: true });
|
|
850
848
|
}
|
|
851
849
|
}));
|
|
852
|
-
}))
|
|
850
|
+
}));
|
|
853
851
|
quickPick.dispose();
|
|
854
852
|
return command;
|
|
855
853
|
}
|
|
@@ -880,46 +878,46 @@ let EditSessionsContribution = class EditSessionsContribution extends Disposable
|
|
|
880
878
|
createPickItems() {
|
|
881
879
|
const items = [...this.continueEditSessionOptions].filter((option) => option.when === undefined || this.contextKeyService.contextMatchesRules(option.when));
|
|
882
880
|
if (getVirtualWorkspaceLocation(this.contextService.getWorkspace()) !== undefined && isNative) {
|
|
883
|
-
items.push((
|
|
881
|
+
items.push(( new ContinueEditSessionItem('$(folder) ' + ( localize(5671, 'Open in Local Folder')), openLocalFolderCommand.id, ( localize(5672, 'Built-in')))));
|
|
884
882
|
}
|
|
885
883
|
const sortedItems = items.sort((item1, item2) => item1.label.localeCompare(item2.label));
|
|
886
|
-
return sortedItems.concat({ type: 'separator' }, (
|
|
884
|
+
return sortedItems.concat({ type: 'separator' }, ( new ContinueEditSessionItem(
|
|
887
885
|
installAdditionalContinueOnOptionsCommand.title,
|
|
888
886
|
installAdditionalContinueOnOptionsCommand.id
|
|
889
|
-
)))
|
|
887
|
+
)));
|
|
890
888
|
}
|
|
891
889
|
};
|
|
892
|
-
EditSessionsContribution = EditSessionsContribution_1 = (
|
|
893
|
-
(
|
|
894
|
-
(
|
|
895
|
-
(
|
|
896
|
-
(
|
|
897
|
-
(
|
|
898
|
-
(
|
|
899
|
-
(
|
|
900
|
-
(
|
|
901
|
-
(
|
|
902
|
-
(
|
|
903
|
-
(
|
|
904
|
-
(
|
|
905
|
-
(
|
|
906
|
-
(
|
|
907
|
-
(
|
|
908
|
-
(
|
|
909
|
-
(
|
|
910
|
-
(
|
|
911
|
-
(
|
|
912
|
-
(
|
|
913
|
-
(
|
|
914
|
-
(
|
|
915
|
-
(
|
|
916
|
-
(
|
|
917
|
-
(
|
|
918
|
-
(
|
|
919
|
-
(
|
|
920
|
-
(
|
|
921
|
-
(
|
|
922
|
-
], EditSessionsContribution))
|
|
890
|
+
EditSessionsContribution = EditSessionsContribution_1 = ( __decorate([
|
|
891
|
+
( __param(0, IEditSessionsStorageService)),
|
|
892
|
+
( __param(1, IFileService)),
|
|
893
|
+
( __param(2, IProgressService)),
|
|
894
|
+
( __param(3, IOpenerService)),
|
|
895
|
+
( __param(4, ITelemetryService)),
|
|
896
|
+
( __param(5, ISCMService)),
|
|
897
|
+
( __param(6, INotificationService)),
|
|
898
|
+
( __param(7, IDialogService)),
|
|
899
|
+
( __param(8, IEditSessionsLogService)),
|
|
900
|
+
( __param(9, IEnvironmentService)),
|
|
901
|
+
( __param(10, IInstantiationService)),
|
|
902
|
+
( __param(11, IProductService)),
|
|
903
|
+
( __param(12, IConfigurationService)),
|
|
904
|
+
( __param(13, IWorkspaceContextService)),
|
|
905
|
+
( __param(14, IEditSessionIdentityService)),
|
|
906
|
+
( __param(15, IQuickInputService)),
|
|
907
|
+
( __param(16, ICommandService)),
|
|
908
|
+
( __param(17, IContextKeyService)),
|
|
909
|
+
( __param(18, IFileDialogService)),
|
|
910
|
+
( __param(19, ILifecycleService)),
|
|
911
|
+
( __param(20, IStorageService)),
|
|
912
|
+
( __param(21, IActivityService)),
|
|
913
|
+
( __param(22, IEditorService)),
|
|
914
|
+
( __param(23, IRemoteAgentService)),
|
|
915
|
+
( __param(24, IExtensionService)),
|
|
916
|
+
( __param(25, IRequestService)),
|
|
917
|
+
( __param(26, IUserDataProfilesService)),
|
|
918
|
+
( __param(27, IUriIdentityService)),
|
|
919
|
+
( __param(28, IWorkspaceIdentityService))
|
|
920
|
+
], EditSessionsContribution));
|
|
923
921
|
const infoButtonClass = ThemeIcon.asClassName(Codicon.info);
|
|
924
922
|
class ContinueEditSessionItem {
|
|
925
923
|
constructor(label, command, description, when, documentation) {
|
|
@@ -931,7 +929,7 @@ class ContinueEditSessionItem {
|
|
|
931
929
|
if (documentation !== undefined) {
|
|
932
930
|
this.buttons = [{
|
|
933
931
|
iconClass: infoButtonClass,
|
|
934
|
-
tooltip: ( localize(
|
|
932
|
+
tooltip: ( localize(5673, 'Learn More')),
|
|
935
933
|
}];
|
|
936
934
|
}
|
|
937
935
|
}
|
|
@@ -940,7 +938,7 @@ const continueEditSessionExtPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
940
938
|
extensionPoint: 'continueEditSession',
|
|
941
939
|
jsonSchema: {
|
|
942
940
|
description: ( localize(
|
|
943
|
-
|
|
941
|
+
5674,
|
|
944
942
|
'Contributes options for continuing the current edit session in a different environment'
|
|
945
943
|
)),
|
|
946
944
|
type: 'array',
|
|
@@ -949,35 +947,35 @@ const continueEditSessionExtPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
949
947
|
properties: {
|
|
950
948
|
command: {
|
|
951
949
|
description: ( localize(
|
|
952
|
-
|
|
950
|
+
5675,
|
|
953
951
|
'Identifier of the command to execute. The command must be declared in the \'commands\'-section and return a URI representing a different environment where the current edit session can be continued.'
|
|
954
952
|
)),
|
|
955
953
|
type: 'string'
|
|
956
954
|
},
|
|
957
955
|
group: {
|
|
958
|
-
description: ( localize(
|
|
956
|
+
description: ( localize(5676, 'Group into which this item belongs.')),
|
|
959
957
|
type: 'string'
|
|
960
958
|
},
|
|
961
959
|
qualifiedName: {
|
|
962
960
|
description: ( localize(
|
|
963
|
-
|
|
961
|
+
5677,
|
|
964
962
|
'A fully qualified name for this item which is used for display in menus.'
|
|
965
963
|
)),
|
|
966
964
|
type: 'string'
|
|
967
965
|
},
|
|
968
966
|
description: {
|
|
969
967
|
description: ( localize(
|
|
970
|
-
|
|
968
|
+
5678,
|
|
971
969
|
"The url, or a command that returns the url, to the option's documentation page."
|
|
972
970
|
)),
|
|
973
971
|
type: 'string'
|
|
974
972
|
},
|
|
975
973
|
remoteGroup: {
|
|
976
|
-
description: ( localize(
|
|
974
|
+
description: ( localize(5679, 'Group into which this item belongs in the remote indicator.')),
|
|
977
975
|
type: 'string'
|
|
978
976
|
},
|
|
979
977
|
when: {
|
|
980
|
-
description: ( localize(
|
|
978
|
+
description: ( localize(5680, 'Condition which must be true to show this item.')),
|
|
981
979
|
type: 'string'
|
|
982
980
|
}
|
|
983
981
|
},
|
|
@@ -985,25 +983,25 @@ const continueEditSessionExtPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
|
985
983
|
}
|
|
986
984
|
}
|
|
987
985
|
});
|
|
988
|
-
const workbenchRegistry = (
|
|
989
|
-
workbenchRegistry.registerWorkbenchContribution(EditSessionsContribution,
|
|
990
|
-
(
|
|
986
|
+
const workbenchRegistry = ( Registry.as(Extensions$1.Workbench));
|
|
987
|
+
workbenchRegistry.registerWorkbenchContribution(EditSessionsContribution, LifecyclePhase.Restored);
|
|
988
|
+
( Registry.as(Extensions$2.Configuration)).registerConfiguration({
|
|
991
989
|
...workbenchConfigurationNodeBase,
|
|
992
990
|
'properties': {
|
|
993
991
|
'workbench.experimental.cloudChanges.autoStore': {
|
|
994
992
|
enum: ['onShutdown', 'off'],
|
|
995
993
|
enumDescriptions: [
|
|
996
994
|
( localize(
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
( localize(
|
|
995
|
+
5681,
|
|
996
|
+
"Automatically store current working changes in the cloud on window close."
|
|
997
|
+
)),
|
|
998
|
+
( localize(5682, "Never attempt to automatically store working changes in the cloud."))
|
|
1001
999
|
],
|
|
1002
1000
|
'type': 'string',
|
|
1003
1001
|
'tags': ['experimental', 'usesOnlineServices'],
|
|
1004
1002
|
'default': 'off',
|
|
1005
1003
|
'markdownDescription': ( localize(
|
|
1006
|
-
|
|
1004
|
+
5683,
|
|
1007
1005
|
"Controls whether to automatically store available working changes in the cloud for the current workspace. This setting has no effect in the web."
|
|
1008
1006
|
)),
|
|
1009
1007
|
},
|
|
@@ -1011,16 +1009,16 @@ workbenchRegistry.registerWorkbenchContribution(EditSessionsContribution, 3 );
|
|
|
1011
1009
|
enum: ['onReload', 'off'],
|
|
1012
1010
|
enumDescriptions: [
|
|
1013
1011
|
( localize(
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
( localize(
|
|
1012
|
+
5684,
|
|
1013
|
+
"Automatically resume available working changes from the cloud on window reload."
|
|
1014
|
+
)),
|
|
1015
|
+
( localize(5685, "Never attempt to resume working changes from the cloud."))
|
|
1018
1016
|
],
|
|
1019
1017
|
'type': 'string',
|
|
1020
1018
|
'tags': ['usesOnlineServices'],
|
|
1021
1019
|
'default': 'onReload',
|
|
1022
1020
|
'markdownDescription': ( localize(
|
|
1023
|
-
|
|
1021
|
+
5686,
|
|
1024
1022
|
"Controls whether to automatically resume available working changes stored in the cloud for the current workspace."
|
|
1025
1023
|
)),
|
|
1026
1024
|
},
|
|
@@ -1028,19 +1026,19 @@ workbenchRegistry.registerWorkbenchContribution(EditSessionsContribution, 3 );
|
|
|
1028
1026
|
enum: ['prompt', 'off'],
|
|
1029
1027
|
enumDescriptions: [
|
|
1030
1028
|
( localize(
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1029
|
+
5687,
|
|
1030
|
+
'Prompt the user to sign in to store working changes in the cloud with Continue Working On.'
|
|
1031
|
+
)),
|
|
1034
1032
|
( localize(
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1033
|
+
5688,
|
|
1034
|
+
'Do not store working changes in the cloud with Continue Working On unless the user has already turned on Cloud Changes.'
|
|
1035
|
+
))
|
|
1038
1036
|
],
|
|
1039
1037
|
type: 'string',
|
|
1040
1038
|
tags: ['usesOnlineServices'],
|
|
1041
1039
|
default: 'prompt',
|
|
1042
1040
|
markdownDescription: ( localize(
|
|
1043
|
-
|
|
1041
|
+
5689,
|
|
1044
1042
|
'Controls whether to prompt the user to store working changes in the cloud when using Continue Working On.'
|
|
1045
1043
|
))
|
|
1046
1044
|
},
|
|
@@ -1049,7 +1047,7 @@ workbenchRegistry.registerWorkbenchContribution(EditSessionsContribution, 3 );
|
|
|
1049
1047
|
'tags': ['experimental', 'usesOnlineServices'],
|
|
1050
1048
|
'default': false,
|
|
1051
1049
|
'markdownDescription': ( localize(
|
|
1052
|
-
|
|
1050
|
+
5690,
|
|
1053
1051
|
"Controls whether to surface cloud changes which partially match the current session."
|
|
1054
1052
|
))
|
|
1055
1053
|
}
|