提交 914ba60c 编写于 作者: J Johannes Rieken

add registration change event, #48275

上级 32ef7f32
......@@ -41,6 +41,11 @@ export interface IFileService {
*/
onAfterOperation: Event<FileOperationEvent>;
/**
* An event that is fired when a file system provider is added or removed
*/
onDidChangeFileSystemProviderRegistrations?: Event<IFileSystemProviderRegistrationEvent>;
/**
* Registeres a file system provider for a certain scheme.
*/
......@@ -224,6 +229,12 @@ export interface IFileSystemProvider {
write?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): TPromise<number>;
}
export interface IFileSystemProviderRegistrationEvent {
added: boolean;
scheme: string;
provider?: IFileSystemProvider;
}
export enum FileOperation {
CREATE,
DELETE,
......
......@@ -6,6 +6,7 @@
import { posix } from 'path';
import { flatten, isFalsyOrEmpty } from 'vs/base/common/arrays';
import { Event, Emitter } from 'vs/base/common/event';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { TernarySearchTree, keys } from 'vs/base/common/map';
import { Schemas } from 'vs/base/common/network';
......@@ -16,7 +17,7 @@ import { ITextResourceConfigurationService } from 'vs/editor/common/services/res
import { localize } from 'vs/nls';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { FileChangesEvent, FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, IContent, ICreateFileOptions, IFileStat, IFileSystemProvider, IFilesConfiguration, IResolveContentOptions, IResolveFileOptions, IResolveFileResult, IStat, IStreamContent, ITextSnapshot, IUpdateContentOptions, StringSnapshot, FileSystemProviderCapabilities, FileOptions } from 'vs/platform/files/common/files';
import { FileChangesEvent, FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FileOptions, FileSystemProviderCapabilities, IContent, ICreateFileOptions, IFileStat, IFileSystemProvider, IFilesConfiguration, IResolveContentOptions, IResolveFileOptions, IResolveFileResult, IStat, IStreamContent, ITextSnapshot, IUpdateContentOptions, StringSnapshot, IFileSystemProviderRegistrationEvent } from 'vs/platform/files/common/files';
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
import { INotificationService } from 'vs/platform/notification/common/notification';
import { IStorageService } from 'vs/platform/storage/common/storage';
......@@ -147,6 +148,9 @@ export class RemoteFileService extends FileService {
private readonly _provider: Map<string, IFileSystemProvider>;
private readonly _lastKnownSchemes: string[];
private readonly _onDidChangeFileSystemProviderRegistrations = new Emitter<IFileSystemProviderRegistrationEvent>();
readonly onDidChangeFileSystemProviderRegistrations: Event<IFileSystemProviderRegistrationEvent> = this._onDidChangeFileSystemProviderRegistrations.event;
constructor(
@IExtensionService private readonly _extensionService: IExtensionService,
......@@ -179,6 +183,7 @@ export class RemoteFileService extends FileService {
}
this._provider.set(scheme, provider);
this._onDidChangeFileSystemProviderRegistrations.fire({ added: true, scheme, provider });
this._storageService.store('remote_schemes', JSON.stringify(keys(this._provider)));
const reg = provider.onDidChangeFile(changes => {
......@@ -187,6 +192,7 @@ export class RemoteFileService extends FileService {
});
return {
dispose: () => {
this._onDidChangeFileSystemProviderRegistrations.fire({ added: false, scheme, provider });
this._provider.delete(scheme);
reg.dispose();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册