add ExtHostFileSystemInfo which knows what schemes are reserved and which are used, https://github.com/microsoft/vscode/issues/91697

This commit is contained in:
Johannes Rieken
2020-09-10 12:28:59 +02:00
parent 9a2a941075
commit e38b9d0727
7 changed files with 69 additions and 31 deletions

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { Emitter, Event } from 'vs/base/common/event';
import { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
import { IDisposable, dispose, toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
import { URI, UriComponents } from 'vs/base/common/uri';
import { FileWriteOptions, FileSystemProviderCapabilities, IFileChange, IFileService, IStat, IWatchOptions, FileType, FileOverwriteOptions, FileDeleteOptions, FileOpenOptions, IFileStat, FileOperationError, FileOperationResult, FileSystemProviderErrorCode, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithFileFolderCopyCapability } from 'vs/platform/files/common/files';
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
@@ -16,15 +16,22 @@ export class MainThreadFileSystem implements MainThreadFileSystemShape {
private readonly _proxy: ExtHostFileSystemShape;
private readonly _fileProvider = new Map<number, RemoteFileSystemProvider>();
private readonly _disposables = new DisposableStore();
constructor(
extHostContext: IExtHostContext,
@IFileService private readonly _fileService: IFileService,
) {
this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostFileSystem);
const infoProxy = extHostContext.getProxy(ExtHostContext.ExtHostFileSystemInfo);
this._disposables.add(_fileService.onDidChangeFileSystemProviderRegistrations(e => infoProxy.$acceptProviderInfos(e.scheme, e.provider?.capabilities ?? null)));
this._disposables.add(_fileService.onDidChangeFileSystemProviderCapabilities(e => infoProxy.$acceptProviderInfos(e.scheme, e.provider.capabilities)));
}
dispose(): void {
this._disposables.dispose();
dispose(this._fileProvider.values());
this._fileProvider.clear();
}