提交 c7b6da1c 编写于 作者: I Isidor Nikolic 提交者: Benjamin Pasero

clipboardService: handle resources (#49964)

上级 0fb96047
......@@ -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);
......
......@@ -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;
}
......@@ -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
}
......@@ -921,7 +921,7 @@ class CopyFileAction extends BaseFileAction {
public run(): TPromise<any> {
// 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);
}));
......
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册