From 7107f74dac4999533e1cefeb163876a43e939561 Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Thu, 11 Apr 2019 11:49:52 +0000 Subject: [PATCH] Support ~ in simple file picker --- .../dialogs/browser/remoteFileDialog.ts | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/vs/workbench/services/dialogs/browser/remoteFileDialog.ts b/src/vs/workbench/services/dialogs/browser/remoteFileDialog.ts index c565ecdcb4d..29c0d84ac13 100644 --- a/src/vs/workbench/services/dialogs/browser/remoteFileDialog.ts +++ b/src/vs/workbench/services/dialogs/browser/remoteFileDialog.ts @@ -48,10 +48,10 @@ export class RemoteFileDialog { private scheme: string = REMOTE_HOST_SCHEME; private shouldOverwriteFile: boolean = false; private contextKey: IContextKey; - private userEnteredPathSegment: string; private autoCompletePathSegment: string; private activeItem: FileQuickPickItem; + private userHome: URI; constructor( @IFileService private readonly fileService: IFileService, @@ -73,6 +73,7 @@ export class RemoteFileDialog { public async showOpenDialog(options: IOpenDialogOptions = {}): Promise { this.scheme = this.getScheme(options.defaultUri, options.availableFileSystems); + this.userHome = await this.getUserHome(); const newOptions = await this.getOptions(options); if (!newOptions) { return Promise.resolve(undefined); @@ -90,6 +91,7 @@ export class RemoteFileDialog { public async showSaveDialog(options: ISaveDialogOptions): Promise { this.scheme = this.getScheme(options.defaultUri, options.availableFileSystems); + this.userHome = await this.getUserHome(); this.requiresTrailing = true; const newOptions = await this.getOptions(options, true); if (!newOptions) { @@ -107,19 +109,11 @@ export class RemoteFileDialog { }); } - private async getOptions(options: ISaveDialogOptions | IOpenDialogOptions, isSave: boolean = false): Promise { + private getOptions(options: ISaveDialogOptions | IOpenDialogOptions, isSave: boolean = false): IOpenDialogOptions | undefined { let defaultUri = options.defaultUri; const filename = (defaultUri && isSave && (resources.dirname(defaultUri).path === '/')) ? resources.basename(defaultUri) : undefined; if (!defaultUri || filename) { - if (this.scheme !== Schemas.file) { - const env = await this.remoteAgentService.getEnvironment(); - if (env) { - defaultUri = env.userHome; - } - } - if (!defaultUri) { - defaultUri = URI.from({ scheme: this.scheme, path: this.environmentService.userHome }); - } + defaultUri = this.userHome; if (filename) { defaultUri = resources.joinPath(defaultUri, filename); } @@ -149,6 +143,16 @@ export class RemoteFileDialog { return undefined; } + private async getUserHome(): Promise { + if (this.scheme !== Schemas.file) { + const env = await this.remoteAgentService.getEnvironment(); + if (env) { + return env.userHome; + } + } + return URI.from({ scheme: this.scheme, path: this.environmentService.userHome }); + } + private async pickResource(isSave: boolean = false): Promise { this.allowFolderSelection = !!this.options.canSelectFolders; this.allowFileSelection = !!this.options.canSelectFiles; @@ -357,7 +361,10 @@ export class RemoteFileDialog { } private async tryUpdateItems(value: string, valueUri: URI): Promise { - if (this.endsWithSlash(value) || (!resources.isEqual(this.currentFolder, resources.dirname(valueUri), true) && resources.isEqualOrParent(this.currentFolder, resources.dirname(valueUri), true))) { + if (value[value.length - 1] === '~') { + await this.updateItems(this.userHome); + return true; + } else if (this.endsWithSlash(value) || (!resources.isEqual(this.currentFolder, resources.dirname(valueUri), true) && resources.isEqualOrParent(this.currentFolder, resources.dirname(valueUri), true))) { let stat: IFileStat | undefined; try { stat = await this.fileService.resolve(valueUri); -- GitLab