From 336ad64f24f52233ab8ce4e4e68212c67206509d Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Mon, 20 Jul 2020 09:35:55 +0200 Subject: [PATCH] #102581 select the resource while reopening --- .../browser/userDataManualSyncView.ts | 99 ++++++++++--------- 1 file changed, 50 insertions(+), 49 deletions(-) diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataManualSyncView.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataManualSyncView.ts index 5a9359ea962..8e218156e43 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataManualSyncView.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataManualSyncView.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import 'vs/css!./media/userDataSyncViews'; -import { ITreeViewDataProvider, ITreeItem, TreeItemCollapsibleState, TreeViewItemHandleArg, IViewDescriptorService } from 'vs/workbench/common/views'; +import { ITreeItem, TreeItemCollapsibleState, TreeViewItemHandleArg, IViewDescriptorService } from 'vs/workbench/common/views'; import { localize } from 'vs/nls'; import { TreeViewPane } from 'vs/workbench/browser/parts/views/treeView'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; @@ -46,6 +46,8 @@ export class UserDataManualSyncViewPane extends TreeViewPane { private syncButton!: Button; private cancelButton!: Button; + private readonly treeItems = new Map(); + constructor( options: IViewletViewOptions, @IEditorService private readonly editorService: IEditorService, @@ -91,7 +93,8 @@ export class UserDataManualSyncViewPane extends TreeViewPane { this._register(attachButtonStyler(this.cancelButton, this.themeService)); this._register(this.cancelButton.onDidClick(() => this.cancel())); - this.treeView.dataProvider = new ManualSyncViewDataProvider(this.userDataSyncPreview); + const that = this; + this.treeView.dataProvider = { getChildren() { return that.getTreeItems(); } }; } protected layoutTreeView(height: number, width: number): void { @@ -106,6 +109,42 @@ export class UserDataManualSyncViewPane extends TreeViewPane { this.syncButton.enabled = this.userDataSyncPreview.resources.every(c => c.syncResource === SyncResource.GlobalState || c.mergeState === MergeState.Accepted); } + private async getTreeItems(): Promise { + this.treeItems.clear(); + const roots: ITreeItem[] = []; + for (const resource of this.userDataSyncPreview.resources) { + if (resource.syncResource !== SyncResource.GlobalState && (resource.localChange !== Change.None || resource.remoteChange !== Change.None)) { + const handle = JSON.stringify(resource); + const treeItem = { + handle, + resourceUri: resource.remote, + label: { label: basename(resource.remote), strikethrough: resource.mergeState === MergeState.Accepted && (resource.localChange === Change.Deleted || resource.remoteChange === Change.Deleted) }, + description: getSyncAreaLabel(resource.syncResource), + collapsibleState: TreeItemCollapsibleState.None, + command: { id: `workbench.actions.sync.showChanges`, title: '', arguments: [{ $treeViewId: '', $treeItemHandle: handle }] }, + contextValue: `sync-resource-${resource.mergeState}` + }; + this.treeItems.set(handle, treeItem); + roots.push(treeItem); + } + } + return roots; + } + + private toUserDataSyncResourceGroup(handle: string): IUserDataSyncResource { + const parsed: IUserDataSyncResource = JSON.parse(handle); + return { + syncResource: parsed.syncResource, + local: URI.revive(parsed.local), + remote: URI.revive(parsed.remote), + merged: URI.revive(parsed.merged), + accepted: URI.revive(parsed.accepted), + localChange: parsed.localChange, + remoteChange: parsed.remoteChange, + mergeState: parsed.mergeState, + }; + } + private registerActions(): void { const that = this; @@ -125,7 +164,7 @@ export class UserDataManualSyncViewPane extends TreeViewPane { }); } async run(accessor: ServicesAccessor, handle: TreeViewItemHandleArg): Promise { - return that.acceptRemote(ManualSyncViewDataProvider.toUserDataSyncResourceGroup(handle.$treeItemHandle)); + return that.acceptRemote(that.toUserDataSyncResourceGroup(handle.$treeItemHandle)); } })); @@ -145,7 +184,7 @@ export class UserDataManualSyncViewPane extends TreeViewPane { }); } async run(accessor: ServicesAccessor, handle: TreeViewItemHandleArg): Promise { - return that.acceptLocal(ManualSyncViewDataProvider.toUserDataSyncResourceGroup(handle.$treeItemHandle)); + return that.acceptLocal(that.toUserDataSyncResourceGroup(handle.$treeItemHandle)); } })); @@ -165,7 +204,7 @@ export class UserDataManualSyncViewPane extends TreeViewPane { }); } async run(accessor: ServicesAccessor, handle: TreeViewItemHandleArg): Promise { - return that.mergeResource(ManualSyncViewDataProvider.toUserDataSyncResourceGroup(handle.$treeItemHandle)); + return that.mergeResource(that.toUserDataSyncResourceGroup(handle.$treeItemHandle)); } })); @@ -185,7 +224,7 @@ export class UserDataManualSyncViewPane extends TreeViewPane { }); } async run(accessor: ServicesAccessor, handle: TreeViewItemHandleArg): Promise { - return that.discardResource(ManualSyncViewDataProvider.toUserDataSyncResourceGroup(handle.$treeItemHandle)); + return that.discardResource(that.toUserDataSyncResourceGroup(handle.$treeItemHandle)); } })); @@ -197,7 +236,7 @@ export class UserDataManualSyncViewPane extends TreeViewPane { }); } async run(accessor: ServicesAccessor, handle: TreeViewItemHandleArg): Promise { - const previewResource: IUserDataSyncResource = ManualSyncViewDataProvider.toUserDataSyncResourceGroup(handle.$treeItemHandle); + const previewResource: IUserDataSyncResource = that.toUserDataSyncResourceGroup(handle.$treeItemHandle); return that.open(previewResource); } })); @@ -284,6 +323,10 @@ export class UserDataManualSyncViewPane extends TreeViewPane { this.close(previewResource); const resource = this.userDataSyncPreview.resources.find(({ local }) => isEqual(local, previewResource.local)); if (resource) { + // select the resource + await this.treeView.refresh(); + this.treeView.setSelection([this.treeItems.get(JSON.stringify(resource))!]); + await this.open(resource); } } @@ -323,48 +366,6 @@ export class UserDataManualSyncViewPane extends TreeViewPane { } -class ManualSyncViewDataProvider implements ITreeViewDataProvider { - - constructor( - private readonly userDataSyncPreview: IUserDataSyncPreview - ) { - } - - async getChildren(): Promise { - const roots: ITreeItem[] = []; - for (const resource of this.userDataSyncPreview.resources) { - if (resource.syncResource !== SyncResource.GlobalState && (resource.localChange !== Change.None || resource.remoteChange !== Change.None)) { - const handle = JSON.stringify(resource); - roots.push({ - handle, - resourceUri: resource.remote, - label: { label: basename(resource.remote), strikethrough: resource.mergeState === MergeState.Accepted && (resource.localChange === Change.Deleted || resource.remoteChange === Change.Deleted) }, - description: getSyncAreaLabel(resource.syncResource), - collapsibleState: TreeItemCollapsibleState.None, - command: { id: `workbench.actions.sync.showChanges`, title: '', arguments: [{ $treeViewId: '', $treeItemHandle: handle }] }, - contextValue: `sync-resource-${resource.mergeState}` - }); - } - } - return roots; - } - - static toUserDataSyncResourceGroup(handle: string): IUserDataSyncResource { - const parsed: IUserDataSyncResource = JSON.parse(handle); - return { - syncResource: parsed.syncResource, - local: URI.revive(parsed.local), - remote: URI.revive(parsed.remote), - merged: URI.revive(parsed.merged), - accepted: URI.revive(parsed.accepted), - localChange: parsed.localChange, - remoteChange: parsed.remoteChange, - mergeState: parsed.mergeState, - }; - } - -} - class UserDataSyncResourcesDecorationProvider extends Disposable implements IDecorationsProvider { readonly label: string = localize('label', "UserDataSyncResources"); -- GitLab