first version of vscode.workspace.fs

This commit is contained in:
Johannes Rieken
2019-06-21 10:56:36 +02:00
parent e4ca6137b4
commit 44596ac959
6 changed files with 239 additions and 2 deletions

View File

@@ -5,8 +5,8 @@
import { Emitter, Event } from 'vs/base/common/event';
import { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
import { URI } from 'vs/base/common/uri';
import { FileWriteOptions, FileSystemProviderCapabilities, IFileChange, IFileService, IFileSystemProvider, IStat, IWatchOptions, FileType, FileOverwriteOptions, FileDeleteOptions, FileOpenOptions } from 'vs/platform/files/common/files';
import { URI, UriComponents } from 'vs/base/common/uri';
import { FileWriteOptions, FileSystemProviderCapabilities, IFileChange, IFileService, IFileSystemProvider, IStat, IWatchOptions, FileType, FileOverwriteOptions, FileDeleteOptions, FileOpenOptions, IFileStat } from 'vs/platform/files/common/files';
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
import { ExtHostContext, ExtHostFileSystemShape, IExtHostContext, IFileChangeDto, MainContext, MainThreadFileSystemShape } from '../common/extHost.protocol';
import { ResourceLabelFormatter, ILabelService } from 'vs/platform/label/common/label';
@@ -60,6 +60,56 @@ export class MainThreadFileSystem implements MainThreadFileSystemShape {
}
fileProvider.$onFileSystemChange(changes);
}
// ---
async $stat(uri: UriComponents): Promise<IStat> {
const stat = await this._fileService.resolve(URI.revive(uri), { resolveMetadata: true });
return {
ctime: 0,
mtime: stat.mtime,
size: stat.size,
type: MainThreadFileSystem._getFileType(stat)
};
}
async $readdir(uri: UriComponents): Promise<[string, FileType][]> {
const stat = await this._fileService.resolve(URI.revive(uri), { resolveMetadata: false });
if (!stat.children) {
throw new Error('not a folder');
}
return stat.children.map(child => [child.name, MainThreadFileSystem._getFileType(child)]);
}
private static _getFileType(stat: IFileStat): FileType {
return (stat.isDirectory ? FileType.Directory : FileType.File) + (stat.isSymbolicLink ? FileType.SymbolicLink : 0);
}
async $readFile(resource: UriComponents): Promise<VSBuffer> {
return (await this._fileService.readFile(URI.revive(resource))).value;
}
async $writeFile(resource: UriComponents, content: VSBuffer, opts: FileWriteOptions): Promise<void> {
//todo@joh honor opts
await this._fileService.writeFile(URI.revive(resource), content, {});
}
async $rename(resource: UriComponents, target: UriComponents, opts: FileOverwriteOptions): Promise<void> {
this._fileService.move(URI.revive(resource), URI.revive(target), opts.overwrite);
}
async $copy(resource: UriComponents, target: UriComponents, opts: FileOverwriteOptions): Promise<void> {
this._fileService.copy(URI.revive(resource), URI.revive(target), opts.overwrite);
}
async $mkdir(resource: UriComponents): Promise<void> {
this._fileService.createFolder(URI.revive(resource));
}
async $delete(resource: UriComponents, opts: FileDeleteOptions): Promise<void> {
this._fileService.del(URI.revive(resource), opts);
}
}
class RemoteFileSystemProvider implements IFileSystemProvider {