mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-29 04:53:33 +01:00
add (optional) copy function #47475
This commit is contained in:
@@ -8,7 +8,7 @@ import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import URI from 'vs/base/common/uri';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { FileOpenFlags, IFileChange, IFileService, IFileSystemProviderBase, ISimpleReadWriteProvider, IStat, IWatchOptions, FileError } from 'vs/platform/files/common/files';
|
||||
import { FileOpenFlags, IFileChange, IFileService, IStat, IWatchOptions, FileError, FileSystemProviderCapabilities, IFileSystemProvider } from 'vs/platform/files/common/files';
|
||||
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
|
||||
import { ExtHostContext, ExtHostFileSystemShape, IExtHostContext, IFileChangeDto, MainContext, MainThreadFileSystemShape } from '../node/extHost.protocol';
|
||||
|
||||
@@ -30,9 +30,10 @@ export class MainThreadFileSystem implements MainThreadFileSystemShape {
|
||||
this._fileProvider.clear();
|
||||
}
|
||||
|
||||
$registerFileSystemProvider(handle: number, scheme: string): void {
|
||||
this._fileProvider.set(handle, new RemoteFileSystemProvider(this._fileService, scheme, handle, this._proxy));
|
||||
$registerFileSystemProvider(handle: number, scheme: string, capabilities: FileSystemProviderCapabilities): void {
|
||||
this._fileProvider.set(handle, new RemoteFileSystemProvider(this._fileService, scheme, capabilities, handle, this._proxy));
|
||||
}
|
||||
|
||||
$unregisterProvider(handle: number): void {
|
||||
dispose(this._fileProvider.get(handle));
|
||||
this._fileProvider.delete(handle);
|
||||
@@ -43,21 +44,22 @@ export class MainThreadFileSystem implements MainThreadFileSystemShape {
|
||||
}
|
||||
}
|
||||
|
||||
class RemoteFileSystemProvider implements ISimpleReadWriteProvider, IFileSystemProviderBase {
|
||||
|
||||
_type: 'simple' = 'simple';
|
||||
class RemoteFileSystemProvider implements IFileSystemProvider {
|
||||
|
||||
private readonly _onDidChange = new Emitter<IFileChange[]>();
|
||||
private readonly _registrations: IDisposable[];
|
||||
|
||||
readonly onDidChangeFile: Event<IFileChange[]> = this._onDidChange.event;
|
||||
readonly capabilities: FileSystemProviderCapabilities;
|
||||
|
||||
constructor(
|
||||
fileService: IFileService,
|
||||
scheme: string,
|
||||
capabilities: FileSystemProviderCapabilities,
|
||||
private readonly _handle: number,
|
||||
private readonly _proxy: ExtHostFileSystemShape
|
||||
) {
|
||||
this.capabilities = capabilities;
|
||||
this._registrations = [fileService.registerProvider(scheme, this)];
|
||||
}
|
||||
|
||||
@@ -91,29 +93,37 @@ class RemoteFileSystemProvider implements ISimpleReadWriteProvider, IFileSystemP
|
||||
throw err;
|
||||
});
|
||||
}
|
||||
|
||||
readFile(resource: URI, opts: { flags: FileOpenFlags }): TPromise<Uint8Array, any> {
|
||||
return this._proxy.$readFile(this._handle, resource, opts.flags).then(encoded => {
|
||||
return Buffer.from(encoded, 'base64');
|
||||
});
|
||||
}
|
||||
|
||||
writeFile(resource: URI, content: Uint8Array, opts: { flags: FileOpenFlags }): TPromise<void, any> {
|
||||
let encoded = Buffer.isBuffer(content)
|
||||
? content.toString('base64')
|
||||
: Buffer.from(content.buffer, content.byteOffset, content.byteLength).toString('base64');
|
||||
return this._proxy.$writeFile(this._handle, resource, encoded, opts.flags);
|
||||
}
|
||||
|
||||
delete(resource: URI): TPromise<void, any> {
|
||||
return this._proxy.$delete(this._handle, resource);
|
||||
}
|
||||
rename(resource: URI, target: URI, opts: { flags: FileOpenFlags }): TPromise<IStat, any> {
|
||||
return this._proxy.$rename(this._handle, resource, target, opts.flags);
|
||||
}
|
||||
|
||||
mkdir(resource: URI): TPromise<IStat, any> {
|
||||
return this._proxy.$mkdir(this._handle, resource);
|
||||
}
|
||||
|
||||
readdir(resource: URI): TPromise<[string, IStat][], any> {
|
||||
return this._proxy.$readdir(this._handle, resource);
|
||||
}
|
||||
|
||||
rename(resource: URI, target: URI, opts: { flags: FileOpenFlags }): TPromise<IStat, any> {
|
||||
return this._proxy.$rename(this._handle, resource, target, opts.flags);
|
||||
}
|
||||
|
||||
copy(resource: URI, target: URI, opts: { flags: FileOpenFlags }): TPromise<IStat, any> {
|
||||
return this._proxy.$copy(this._handle, resource, target, opts.flags);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user