From c7b6da1ca07ca6a87cf23d42febdd26b7145dac5 Mon Sep 17 00:00:00 2001 From: Isidor Nikolic Date: Thu, 17 May 2018 07:26:41 +0200 Subject: [PATCH] clipboardService: handle resources (#49964) --- .../snippet/test/snippetVariables.test.ts | 12 ++++----- .../clipboard/common/clipboardService.ts | 12 ++++----- .../electron-browser/clipboardService.ts | 25 ++++++++----------- .../files/electron-browser/fileActions.ts | 4 +-- .../electron-browser/views/explorerViewer.ts | 2 +- 5 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/vs/editor/contrib/snippet/test/snippetVariables.test.ts b/src/vs/editor/contrib/snippet/test/snippetVariables.test.ts index 65cc89a0ad3..80cb27ce5ad 100644 --- a/src/vs/editor/contrib/snippet/test/snippetVariables.test.ts +++ b/src/vs/editor/contrib/snippet/test/snippetVariables.test.ts @@ -217,9 +217,9 @@ suite('Snippet Variables Resolver', function () { writeText = this._throw; readFindText = this._throw; writeFindText = this._throw; - writeFiles = this._throw; - readFiles = this._throw; - hasFiles = this._throw; + writeResources = this._throw; + readResources = this._throw; + hasResources = this._throw; }; let resolver = new ClipboardBasedVariableResolver(clipboardService, 1, 0); @@ -250,9 +250,9 @@ suite('Snippet Variables Resolver', function () { writeText = this._throw; readFindText = this._throw; writeFindText = this._throw; - writeFiles = this._throw; - readFiles = this._throw; - hasFiles = this._throw; + writeResources = this._throw; + readResources = this._throw; + hasResources = this._throw; }; resolver = new ClipboardBasedVariableResolver(clipboardService, 1, 2); diff --git a/src/vs/platform/clipboard/common/clipboardService.ts b/src/vs/platform/clipboard/common/clipboardService.ts index cbcb41ffad0..d93af3a745f 100644 --- a/src/vs/platform/clipboard/common/clipboardService.ts +++ b/src/vs/platform/clipboard/common/clipboardService.ts @@ -35,17 +35,17 @@ export interface IClipboardService { writeFindText(text: string): void; /** - * Writes files to the system clipboard. + * Writes resources to the system clipboard. */ - writeFiles(files: URI[]): void; + writeResources(resources: URI[]): void; /** - * Reads files from the system clipboard. + * Reads resources from the system clipboard. */ - readFiles(): URI[]; + readResources(): URI[]; /** - * Find out if files are copied to the clipboard. + * Find out if resources are copied to the clipboard. */ - hasFiles(): boolean; + hasResources(): boolean; } diff --git a/src/vs/platform/clipboard/electron-browser/clipboardService.ts b/src/vs/platform/clipboard/electron-browser/clipboardService.ts index 2514067dd60..d59c3edaf4d 100644 --- a/src/vs/platform/clipboard/electron-browser/clipboardService.ts +++ b/src/vs/platform/clipboard/electron-browser/clipboardService.ts @@ -9,7 +9,6 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService import { clipboard } from 'electron'; import URI from 'vs/base/common/uri'; import { isMacintosh } from 'vs/base/common/platform'; -import { Schemas } from 'vs/base/common/network'; export class ClipboardService implements IClipboardService { @@ -40,27 +39,25 @@ export class ClipboardService implements IClipboardService { } } - public writeFiles(resources: URI[]): void { - const files = resources.filter(f => f.scheme === Schemas.file); - - if (files.length) { - clipboard.writeBuffer(ClipboardService.FILE_FORMAT, this.filesToBuffer(files)); + public writeResources(resources: URI[]): void { + if (resources.length) { + clipboard.writeBuffer(ClipboardService.FILE_FORMAT, this.resourcesToBuffer(resources)); } } - public readFiles(): URI[] { - return this.bufferToFiles(clipboard.readBuffer(ClipboardService.FILE_FORMAT)); + public readResources(): URI[] { + return this.bufferToResources(clipboard.readBuffer(ClipboardService.FILE_FORMAT)); } - public hasFiles(): boolean { + public hasResources(): boolean { return clipboard.has(ClipboardService.FILE_FORMAT); } - private filesToBuffer(resources: URI[]): Buffer { - return Buffer.from(resources.map(r => r.fsPath).join('\n')); + private resourcesToBuffer(resources: URI[]): Buffer { + return Buffer.from(resources.map(r => r.toString()).join('\n')); } - private bufferToFiles(buffer: Buffer): URI[] { + private bufferToResources(buffer: Buffer): URI[] { if (!buffer) { return []; } @@ -71,9 +68,9 @@ export class ClipboardService implements IClipboardService { } try { - return bufferValue.split('\n').map(f => URI.file(f)); + return bufferValue.split('\n').map(f => URI.parse(f)); } catch (error) { return []; // do not trust clipboard data } } -} \ No newline at end of file +} diff --git a/src/vs/workbench/parts/files/electron-browser/fileActions.ts b/src/vs/workbench/parts/files/electron-browser/fileActions.ts index c7cbf757f55..480683436c0 100644 --- a/src/vs/workbench/parts/files/electron-browser/fileActions.ts +++ b/src/vs/workbench/parts/files/electron-browser/fileActions.ts @@ -921,7 +921,7 @@ class CopyFileAction extends BaseFileAction { public run(): TPromise { // Write to clipboard as file/folder to copy - this.clipboardService.writeFiles(this.elements.map(e => e.resource)); + this.clipboardService.writeResources(this.elements.map(e => e.resource)); // Remove highlight if (this.tree) { @@ -1636,7 +1636,7 @@ export const pasteFileHandler = (accessor: ServicesAccessor) => { const clipboardService = accessor.get(IClipboardService); const explorerContext = getContext(listService.lastFocusedList, accessor.get(IViewletService)); - return TPromise.join(resources.distinctParents(clipboardService.readFiles(), r => r).map(toCopy => { + return TPromise.join(resources.distinctParents(clipboardService.readResources(), r => r).map(toCopy => { const pasteFileAction = instantationService.createInstance(PasteFileAction, listService.lastFocusedList, explorerContext.stat); return pasteFileAction.run(toCopy); })); diff --git a/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts b/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts index 78e0e1d8e66..c6200f5b1a9 100644 --- a/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts +++ b/src/vs/workbench/parts/files/electron-browser/views/explorerViewer.ts @@ -512,7 +512,7 @@ export class FileController extends WorkbenchTreeController implements IDisposab tree.setFocus(stat); // update dynamic contexts - this.fileCopiedContextKey.set(this.clipboardService.hasFiles()); + this.fileCopiedContextKey.set(this.clipboardService.hasResources()); if (!this.contributedContextMenu) { this.contributedContextMenu = this.menuService.createMenu(MenuId.ExplorerContext, tree.contextKeyService); -- GitLab