diff --git a/src/vs/platform/userDataSync/common/userDataSync.ts b/src/vs/platform/userDataSync/common/userDataSync.ts index 5e789abd52b88a0794fb464afafd0c1236c17849..2518c3e365b33852a0b155ac5517e0fcd421d2ec 100644 --- a/src/vs/platform/userDataSync/common/userDataSync.ts +++ b/src/vs/platform/userDataSync/common/userDataSync.ts @@ -348,18 +348,19 @@ export const CONTEXT_SYNC_ENABLEMENT = new RawContextKey('syncEnabled', export const USER_DATA_SYNC_SCHEME = 'vscode-userdata-sync'; export const PREVIEW_QUERY = 'preview=true'; -export function toSyncResourceFromSource(source: SyncSource, ref?: string): URI { - return toSyncResource(getResourceKey(source), ref); +export function toRemoteSyncResourceFromSource(source: SyncSource, ref?: string): URI { + return toRemoteSyncResource(getResourceKeyFromSyncSource(source), ref); } -export function toSyncResource(resourceKey: ResourceKey, ref?: string): URI { - return URI.from({ scheme: USER_DATA_SYNC_SCHEME, path: `${resourceKey}/${ref ? ref : 'latest'}` }); +export function toRemoteSyncResource(resourceKey: ResourceKey, ref?: string): URI { + return URI.from({ scheme: USER_DATA_SYNC_SCHEME, authority: 'remote', path: `/${resourceKey}/${ref ? ref : 'latest'}` }); } -export function resolveSyncResource(resource: URI): { resourceKey: ResourceKey, ref?: string } | null { +export function resolveSyncResource(resource: URI): { remote: boolean, resourceKey: ResourceKey, ref?: string } | null { + const remote = resource.authority === 'remote'; const resourceKey: ResourceKey = basename(dirname(resource)) as ResourceKey; const ref = basename(resource); if (resourceKey && ref) { - return { resourceKey, ref: ref !== 'latest' ? ref : undefined }; + return { remote, resourceKey, ref: ref !== 'latest' ? ref : undefined }; } return null; } @@ -373,7 +374,8 @@ export function getSyncSourceFromPreviewResource(uri: URI, environmentService: I } return undefined; } -export function getResourceKey(source: SyncSource): ResourceKey { + +export function getResourceKeyFromSyncSource(source: SyncSource): ResourceKey { switch (source) { case SyncSource.Settings: return 'settings'; case SyncSource.Keybindings: return 'keybindings'; @@ -381,7 +383,8 @@ export function getResourceKey(source: SyncSource): ResourceKey { case SyncSource.GlobalState: return 'globalState'; } } -export function getSyncSource(resourceKey: ResourceKey): SyncSource { + +export function getSyncSourceFromResourceKey(resourceKey: ResourceKey): SyncSource { switch (resourceKey) { case 'settings': return SyncSource.Settings; case 'keybindings': return SyncSource.Keybindings; diff --git a/src/vs/platform/userDataSync/common/userDataSyncService.ts b/src/vs/platform/userDataSync/common/userDataSyncService.ts index 90a7cf151f834ef40406507b4ffc1a73e47b4633..5c7f3950cfe1c23757e0b6514df405380a2cd3f2 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncService.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncService.ts @@ -183,9 +183,9 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ const synchronizer = this.synchronisers.filter(s => s.resourceKey === result.resourceKey)[0]; if (synchronizer) { if (PREVIEW_QUERY === resource.query) { - return synchronizer.getRemoteContentFromPreview(); + return result.remote ? synchronizer.getRemoteContentFromPreview() : null; } - return synchronizer.getRemoteContent(result.ref, resource.fragment); + return result.remote ? synchronizer.getRemoteContent(result.ref, resource.fragment) : null; } } return null; diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts index 6dc2bf594410bf20337d2e2c932ae8eed937d163..d7f3ea4d80d669126610b5103c711ba2c15f607e 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts @@ -30,7 +30,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; import { IQuickInputService, IQuickPickItem, IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { CONTEXT_SYNC_STATE, getUserDataSyncStore, ISyncConfiguration, IUserDataAutoSyncService, IUserDataSyncService, IUserDataSyncStore, registerConfiguration, SyncSource, SyncStatus, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_SCHEME, IUserDataSyncEnablementService, ResourceKey, getSyncSourceFromPreviewResource, CONTEXT_SYNC_ENABLEMENT, toSyncResourceFromSource, PREVIEW_QUERY, resolveSyncResource, getSyncSource } from 'vs/platform/userDataSync/common/userDataSync'; +import { CONTEXT_SYNC_STATE, getUserDataSyncStore, ISyncConfiguration, IUserDataAutoSyncService, IUserDataSyncService, IUserDataSyncStore, registerConfiguration, SyncSource, SyncStatus, UserDataSyncError, UserDataSyncErrorCode, USER_DATA_SYNC_SCHEME, IUserDataSyncEnablementService, ResourceKey, getSyncSourceFromPreviewResource, CONTEXT_SYNC_ENABLEMENT, toRemoteSyncResourceFromSource, PREVIEW_QUERY, resolveSyncResource, getSyncSourceFromResourceKey } from 'vs/platform/userDataSync/common/userDataSync'; import { FloatingClickWidget } from 'vs/workbench/browser/parts/editor/editorWidgets'; import { GLOBAL_ACTIVITY_ID } from 'vs/workbench/common/activity'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; @@ -354,7 +354,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo private async acceptRemote(syncSource: SyncSource) { try { - const contents = await this.userDataSyncService.resolveContent(toSyncResourceFromSource(syncSource).with({ query: PREVIEW_QUERY })); + const contents = await this.userDataSyncService.resolveContent(toRemoteSyncResourceFromSource(syncSource).with({ query: PREVIEW_QUERY })); if (contents) { await this.userDataSyncService.accept(syncSource, contents); } @@ -754,7 +754,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo label = localize('keybindings conflicts preview', "Keybindings Conflicts (Remote ↔ Local)"); } if (previewResource) { - const remoteContentResource = toSyncResourceFromSource(source).with({ query: PREVIEW_QUERY }); + const remoteContentResource = toRemoteSyncResourceFromSource(source).with({ query: PREVIEW_QUERY }); await this.editorService.openEditor({ leftResource: remoteContentResource, rightResource: previewResource, @@ -1130,7 +1130,7 @@ class AcceptChangesContribution extends Disposable implements IEditorContributio this._register(this.acceptChangesButton.onClick(async () => { const model = this.editor.getModel(); if (model) { - const conflictsSource = (getSyncSourceFromPreviewResource(model.uri, this.environmentService) || getSyncSource(resolveSyncResource(model.uri)!.resourceKey))!; + const conflictsSource = (getSyncSourceFromPreviewResource(model.uri, this.environmentService) || getSyncSourceFromResourceKey(resolveSyncResource(model.uri)!.resourceKey))!; this.telemetryService.publicLog2<{ source: string, action: string }, SyncConflictsClassification>('sync/handleConflicts', { source: conflictsSource, action: isRemote ? 'acceptRemote' : 'acceptLocal' }); const syncAreaLabel = getSyncAreaLabel(conflictsSource); const result = await this.dialogService.confirm({ diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncHistory.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncHistory.ts index 35b2428ab81470462adc6233373ea2b39d16eb3e..caf1b630667752905491e6812f6becfca8efbd01 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncHistory.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncHistory.ts @@ -11,7 +11,7 @@ import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { TreeViewPane, TreeView } from 'vs/workbench/browser/parts/views/treeView'; import { VIEW_CONTAINER } from 'vs/workbench/contrib/files/browser/explorerViewlet'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { ALL_RESOURCE_KEYS, CONTEXT_SYNC_ENABLEMENT, IUserDataSyncStoreService, toSyncResource, resolveSyncResource } from 'vs/platform/userDataSync/common/userDataSync'; +import { ALL_RESOURCE_KEYS, CONTEXT_SYNC_ENABLEMENT, IUserDataSyncStoreService, toRemoteSyncResource, resolveSyncResource } from 'vs/platform/userDataSync/common/userDataSync'; import { registerAction2, Action2, MenuId } from 'vs/platform/actions/common/actions'; import { IContextKeyService, RawContextKey, ContextKeyExpr, ContextKeyEqualsExpr } from 'vs/platform/contextkey/common/contextkey'; import { URI } from 'vs/base/common/uri'; @@ -175,7 +175,7 @@ class UserDataSyncHistoryViewDataProvider implements ITreeViewDataProvider { if (resourceKey) { const refHandles = await this.userDataSyncStoreService.getAllRefs(resourceKey); return refHandles.map(({ ref, created }) => { - const handle = toSyncResource(resourceKey, ref).toString(); + const handle = toRemoteSyncResource(resourceKey, ref).toString(); return { handle, collapsibleState: TreeItemCollapsibleState.None,