diff --git a/src/vs/platform/userDataSync/common/extensionsSync.ts b/src/vs/platform/userDataSync/common/extensionsSync.ts index fc78ea53ff8..89ec82f9811 100644 --- a/src/vs/platform/userDataSync/common/extensionsSync.ts +++ b/src/vs/platform/userDataSync/common/extensionsSync.ts @@ -243,7 +243,7 @@ export class ExtensionsSynchroniser extends AbstractSynchroniser implements IUse } } - async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource?: URI }[]> { + async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource: URI }[]> { return [{ resource: joinPath(uri, 'extensions.json'), comparableResource: ExtensionsSynchroniser.EXTENSIONS_DATA_URI }]; } diff --git a/src/vs/platform/userDataSync/common/globalStateSync.ts b/src/vs/platform/userDataSync/common/globalStateSync.ts index df914b99f3d..085190d8098 100644 --- a/src/vs/platform/userDataSync/common/globalStateSync.ts +++ b/src/vs/platform/userDataSync/common/globalStateSync.ts @@ -204,7 +204,7 @@ export class GlobalStateSynchroniser extends AbstractSynchroniser implements IUs } } - async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource?: URI }[]> { + async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource: URI }[]> { return [{ resource: joinPath(uri, 'globalState.json'), comparableResource: GlobalStateSynchroniser.GLOBAL_STATE_DATA_URI }]; } diff --git a/src/vs/platform/userDataSync/common/keybindingsSync.ts b/src/vs/platform/userDataSync/common/keybindingsSync.ts index 040dcfda1b5..ff3b25fe604 100644 --- a/src/vs/platform/userDataSync/common/keybindingsSync.ts +++ b/src/vs/platform/userDataSync/common/keybindingsSync.ts @@ -235,8 +235,8 @@ export class KeybindingsSynchroniser extends AbstractJsonFileSynchroniser implem return false; } - async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource?: URI }[]> { - const comparableResource = (await this.fileService.exists(this.file)) ? this.file : undefined; + async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource: URI }[]> { + const comparableResource = (await this.fileService.exists(this.file)) ? this.file : this.localResource; return [{ resource: joinPath(uri, 'keybindings.json'), comparableResource }]; } diff --git a/src/vs/platform/userDataSync/common/settingsSync.ts b/src/vs/platform/userDataSync/common/settingsSync.ts index 470e59a8f18..44e2941b04c 100644 --- a/src/vs/platform/userDataSync/common/settingsSync.ts +++ b/src/vs/platform/userDataSync/common/settingsSync.ts @@ -235,8 +235,8 @@ export class SettingsSynchroniser extends AbstractJsonFileSynchroniser implement return false; } - async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource?: URI }[]> { - const comparableResource = (await this.fileService.exists(this.file)) ? this.file : undefined; + async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource: URI }[]> { + const comparableResource = (await this.fileService.exists(this.file)) ? this.file : this.localResource; return [{ resource: joinPath(uri, 'settings.json'), comparableResource }]; } diff --git a/src/vs/platform/userDataSync/common/snippetsSync.ts b/src/vs/platform/userDataSync/common/snippetsSync.ts index a40a457b535..f00332c395a 100644 --- a/src/vs/platform/userDataSync/common/snippetsSync.ts +++ b/src/vs/platform/userDataSync/common/snippetsSync.ts @@ -343,7 +343,7 @@ export class SnippetsSynchroniser extends AbstractSynchroniser implements IUserD return [...resourcePreviews.values()]; } - async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource?: URI }[]> { + async getAssociatedResources({ uri }: ISyncResourceHandle): Promise<{ resource: URI, comparableResource: URI }[]> { let content = await super.resolveContent(uri); if (content) { const syncData = this.parseSyncData(content); @@ -354,7 +354,7 @@ export class SnippetsSynchroniser extends AbstractSynchroniser implements IUserD const resource = joinPath(uri, snippet); const comparableResource = joinPath(this.snippetsFolder, snippet); const exists = await this.fileService.exists(comparableResource); - result.push({ resource, comparableResource: exists ? comparableResource : undefined }); + result.push({ resource, comparableResource: exists ? comparableResource : joinPath(this.syncPreviewFolder, snippet).with({ scheme: USER_DATA_SYNC_SCHEME, authority: 'local' }) }); } return result; } diff --git a/src/vs/platform/userDataSync/common/userDataSync.ts b/src/vs/platform/userDataSync/common/userDataSync.ts index 9bb9199d9fa..cb4ce47f1e9 100644 --- a/src/vs/platform/userDataSync/common/userDataSync.ts +++ b/src/vs/platform/userDataSync/common/userDataSync.ts @@ -376,7 +376,7 @@ export interface IUserDataSynchroniser { resolveContent(resource: URI): Promise; getRemoteSyncResourceHandles(): Promise; getLocalSyncResourceHandles(): Promise; - getAssociatedResources(syncResourceHandle: ISyncResourceHandle): Promise<{ resource: URI, comparableResource?: URI }[]>; + getAssociatedResources(syncResourceHandle: ISyncResourceHandle): Promise<{ resource: URI, comparableResource: URI }[]>; getMachineId(syncResourceHandle: ISyncResourceHandle): Promise; } @@ -449,7 +449,7 @@ export interface IUserDataSyncService { getLocalSyncResourceHandles(resource: SyncResource): Promise; getRemoteSyncResourceHandles(resource: SyncResource): Promise; - getAssociatedResources(resource: SyncResource, syncResourceHandle: ISyncResourceHandle): Promise<{ resource: URI, comparableResource?: URI }[]>; + getAssociatedResources(resource: SyncResource, syncResourceHandle: ISyncResourceHandle): Promise<{ resource: URI, comparableResource: URI }[]>; getMachineId(resource: SyncResource, syncResourceHandle: ISyncResourceHandle): Promise; } diff --git a/src/vs/platform/userDataSync/common/userDataSyncService.ts b/src/vs/platform/userDataSync/common/userDataSyncService.ts index 819e3f94f92..29148562da9 100644 --- a/src/vs/platform/userDataSync/common/userDataSyncService.ts +++ b/src/vs/platform/userDataSync/common/userDataSyncService.ts @@ -258,7 +258,7 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ return this.getSynchroniser(resource).getLocalSyncResourceHandles(); } - getAssociatedResources(resource: SyncResource, syncResourceHandle: ISyncResourceHandle): Promise<{ resource: URI, comparableResource?: URI }[]> { + getAssociatedResources(resource: SyncResource, syncResourceHandle: ISyncResourceHandle): Promise<{ resource: URI, comparableResource: URI }[]> { return this.getSynchroniser(resource).getAssociatedResources(syncResourceHandle); } diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncViews.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncViews.ts index 3694cdefb1f..55fde028209 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncViews.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncViews.ts @@ -270,24 +270,20 @@ export class UserDataSyncDataViews extends Disposable { } async run(accessor: ServicesAccessor, handle: TreeViewItemHandleArg): Promise { const editorService = accessor.get(IEditorService); - const { resource, comparableResource } = <{ resource: string, comparableResource?: string }>JSON.parse(handle.$treeItemHandle); - if (comparableResource) { - const leftResource = URI.parse(resource); - const leftResourceName = localize({ key: 'leftResourceName', comment: ['remote as in file in cloud'] }, "{0} (Remote)", basename(leftResource)); - const rightResource = URI.parse(comparableResource); - const rightResourceName = localize({ key: 'rightResourceName', comment: ['local as in file in disk'] }, "{0} (Local)", basename(rightResource)); - await editorService.openEditor({ - leftResource, - rightResource, - label: localize('sideBySideLabels', "{0} ↔ {1}", leftResourceName, rightResourceName), - options: { - preserveFocus: true, - revealIfVisible: true, - }, - }); - } else { - await editorService.openEditor({ resource: URI.parse(resource) }); - } + const { resource, comparableResource } = <{ resource: string, comparableResource: string }>JSON.parse(handle.$treeItemHandle); + const leftResource = URI.parse(resource); + const leftResourceName = localize({ key: 'leftResourceName', comment: ['remote as in file in cloud'] }, "{0} (Remote)", basename(leftResource)); + const rightResource = URI.parse(comparableResource); + const rightResourceName = localize({ key: 'rightResourceName', comment: ['local as in file in disk'] }, "{0} (Local)", basename(rightResource)); + await editorService.openEditor({ + leftResource, + rightResource, + label: localize('sideBySideLabels', "{0} ↔ {1}", leftResourceName, rightResourceName), + options: { + preserveFocus: true, + revealIfVisible: true, + }, + }); } }); } @@ -365,7 +361,7 @@ abstract class UserDataSyncActivityViewDataProvider implements ITreeViewDataProv protected async getChildrenForSyncResourceTreeItem(element: SyncResourceHandleTreeItem): Promise { const associatedResources = await this.userDataSyncService.getAssociatedResources((element).syncResourceHandle.syncResource, (element).syncResourceHandle); return associatedResources.map(({ resource, comparableResource }) => { - const handle = JSON.stringify({ resource: resource.toString(), comparableResource: comparableResource?.toString() }); + const handle = JSON.stringify({ resource: resource.toString(), comparableResource: comparableResource.toString() }); return { handle, collapsibleState: TreeItemCollapsibleState.None, diff --git a/src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts b/src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts index 1b7d44aadd6..638cda9d60d 100644 --- a/src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts +++ b/src/vs/workbench/services/userDataSync/electron-browser/userDataSyncService.ts @@ -119,8 +119,8 @@ export class UserDataSyncService extends Disposable implements IUserDataSyncServ return handles.map(({ created, uri }) => ({ created, uri: URI.revive(uri) })); } - async getAssociatedResources(resource: SyncResource, syncResourceHandle: ISyncResourceHandle): Promise<{ resource: URI, comparableResource?: URI }[]> { - const result = await this.channel.call<{ resource: URI, comparableResource?: URI }[]>('getAssociatedResources', [resource, syncResourceHandle]); + async getAssociatedResources(resource: SyncResource, syncResourceHandle: ISyncResourceHandle): Promise<{ resource: URI, comparableResource: URI }[]> { + const result = await this.channel.call<{ resource: URI, comparableResource: URI }[]>('getAssociatedResources', [resource, syncResourceHandle]); return result.map(({ resource, comparableResource }) => ({ resource: URI.revive(resource), comparableResource: URI.revive(comparableResource) })); }