diff --git a/src/vs/workbench/services/backup/node/backupModelService.ts b/src/vs/workbench/services/backup/node/backupModelService.ts index 692ee598840d5b3a0e384f136138df817c5f38cb..d3e9c7eb9f03bfab2867d8827b3e1e4edcd82733 100644 --- a/src/vs/workbench/services/backup/node/backupModelService.ts +++ b/src/vs/workbench/services/backup/node/backupModelService.ts @@ -34,8 +34,9 @@ export class BackupModelService implements IBackupModelService { private registerListeners() { this.toDispose.push(this.textFileService.models.onModelContentChanged((e) => this.onTextFileModelChanged(e))); - this.toDispose.push(this.textFileService.models.onModelSaved((e) => this.onTextFileModelClean(e))); - this.toDispose.push(this.textFileService.models.onModelReverted((e) => this.onTextFileModelClean(e))); + this.toDispose.push(this.textFileService.models.onModelSaved((e) => this.onTextFileModelClean(e.resource))); + this.toDispose.push(this.textFileService.models.onModelReverted((e) => this.onTextFileModelClean(e.resource))); + this.toDispose.push(this.textFileService.models.onModelDisposed((e) => this.onTextFileModelClean(e))); this.toDispose.push(this.untitledEditorService.onDidChangeContent((e) => this.onUntitledModelChanged(e))); } @@ -57,8 +58,8 @@ export class BackupModelService implements IBackupModelService { } } - private onTextFileModelClean(event: TextFileModelChangeEvent): void { - this.backupFileService.discardAndDeregisterResource(event.resource); + private onTextFileModelClean(resource: Uri): void { + this.backupFileService.discardAndDeregisterResource(resource); } public dispose(): void { diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts index 53f93f2e4118e14f7568dfb8d65649bbc36b006c..9bd501b68bf70c32ba9f6a83a8ab22cb044a2a4b 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts @@ -747,9 +747,6 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil this.cancelAutoSavePromises(); - // TODO: Can this be moved to BackupModelService? - this.backupFileService.discardAndDeregisterResource(this.resource); - super.dispose(); } } diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModelManager.ts b/src/vs/workbench/services/textfile/common/textFileEditorModelManager.ts index 73dc4f31bcc51ebf9d689cd3b7a6de402696f816..cc66f5b0144ce8912121847aa73c4c5a6d25b6dc 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModelManager.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModelManager.ts @@ -24,6 +24,7 @@ export class TextFileEditorModelManager implements ITextFileEditorModelManager { private toUnbind: IDisposable[]; + private _onModelDisposed: Emitter; private _onModelContentChanged: Emitter; private _onModelDirty: Emitter; private _onModelSaveError: Emitter; @@ -45,6 +46,7 @@ export class TextFileEditorModelManager implements ITextFileEditorModelManager { ) { this.toUnbind = []; + this._onModelDisposed = new Emitter(); this._onModelContentChanged = new Emitter(); this._onModelDirty = new Emitter(); this._onModelSaveError = new Emitter(); @@ -52,6 +54,7 @@ export class TextFileEditorModelManager implements ITextFileEditorModelManager { this._onModelReverted = new Emitter(); this._onModelEncodingChanged = new Emitter(); + this.toUnbind.push(this._onModelDisposed); this.toUnbind.push(this._onModelContentChanged); this.toUnbind.push(this._onModelDirty); this.toUnbind.push(this._onModelSaveError); @@ -152,6 +155,10 @@ export class TextFileEditorModelManager implements ITextFileEditorModelManager { return true; } + public get onModelDisposed(): Event { + return this._onModelDisposed.event; + } + public get onModelContentChanged(): Event { return this._onModelContentChanged.event; } @@ -278,7 +285,10 @@ export class TextFileEditorModelManager implements ITextFileEditorModelManager { // store in cache but remove when model gets disposed this.mapResourceToModel[resource.toString()] = model; - this.mapResourceToDisposeListener[resource.toString()] = model.onDispose(() => this.remove(resource)); + this.mapResourceToDisposeListener[resource.toString()] = model.onDispose(() => { + this.remove(resource); + this._onModelDisposed.fire(resource); + }); } public remove(resource: URI): void { diff --git a/src/vs/workbench/services/textfile/common/textfiles.ts b/src/vs/workbench/services/textfile/common/textfiles.ts index d6af1bd7ce73f638382ab9dbcfd07421298d516b..f3d275de2ae38eab88c727901ef3d366390d17a2 100644 --- a/src/vs/workbench/services/textfile/common/textfiles.ts +++ b/src/vs/workbench/services/textfile/common/textfiles.ts @@ -183,6 +183,7 @@ export interface IRawTextContent extends IBaseStat { export interface ITextFileEditorModelManager { + onModelDisposed: Event; onModelContentChanged: Event; onModelDirty: Event; onModelSaveError: Event;