@@ -7,6 +7,7 @@ import * as DOM from 'vs/base/browser/dom';
77import { CancellationToken } from 'vs/base/common/cancellation' ;
88import { Emitter } from 'vs/base/common/event' ;
99import { combinedDisposable , Disposable , DisposableStore , IDisposable } from 'vs/base/common/lifecycle' ;
10+ import { ResourceMap } from 'vs/base/common/map' ;
1011import { URI , UriComponents } from 'vs/base/common/uri' ;
1112import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility' ;
1213import { IConfigurationService } from 'vs/platform/configuration/common/configuration' ;
@@ -134,7 +135,7 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
134135 private _toDisposeOnEditorRemove = new Map < string , IDisposable > ( ) ;
135136 private _currentState ?: DocumentAndEditorState ;
136137 private _editorEventListenersMapping : Map < string , DisposableStore > = new Map ( ) ;
137- private _documentEventListenersMapping : Map < string , DisposableStore > = new Map ( ) ;
138+ private _documentEventListenersMapping : ResourceMap < DisposableStore > = new ResourceMap ( ) ;
138139 private readonly _cellStatusBarEntries : Map < number , IDisposable > = new Map ( ) ;
139140
140141 constructor (
@@ -162,11 +163,11 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
162163 }
163164
164165 async removeNotebookTextModel ( uri : URI ) : Promise < void > {
166+ // TODO@rebornix remove this? obsolete?
165167 // TODO@rebornix , remove cell should use emitDelta as well to ensure document/editor events are sent together
166168 this . _proxy . $acceptDocumentAndEditorsDelta ( { removedDocuments : [ uri ] } ) ;
167- let textModelDisposableStore = this . _documentEventListenersMapping . get ( uri . toString ( ) ) ;
168- textModelDisposableStore ?. dispose ( ) ;
169- this . _documentEventListenersMapping . delete ( URI . from ( uri ) . toString ( ) ) ;
169+ this . _documentEventListenersMapping . get ( uri ) ?. dispose ( ) ;
170+ this . _documentEventListenersMapping . delete ( uri ) ;
170171 }
171172
172173 private _isDeltaEmpty ( delta : INotebookDocumentsAndEditorsDelta ) {
@@ -255,40 +256,32 @@ export class MainThreadNotebooks extends Disposable implements MainThreadNoteboo
255256 notebookEditorAddedHandler ( editor ) ;
256257 } ) ;
257258
258- const notebookDocumentAddedHandler = ( doc : URI ) => {
259- if ( ! this . _editorEventListenersMapping . has ( doc . toString ( ) ) ) {
260- const disposableStore = new DisposableStore ( ) ;
261- const textModel = this . _notebookService . getNotebookTextModel ( doc ) ;
262- disposableStore . add ( textModel ! . onDidModelChangeProxy ( e => {
263- this . _proxy . $acceptModelChanged ( textModel ! . uri , e , textModel ! . isDirty ) ;
264- this . _proxy . $acceptDocumentPropertiesChanged ( doc , { selections : { selections : textModel ! . selections } , metadata : null } ) ;
265- } ) ) ;
266- disposableStore . add ( textModel ! . onDidSelectionChange ( e => {
267- const selectionsChange = e ? { selections : e } : null ;
268- this . _proxy . $acceptDocumentPropertiesChanged ( doc , { selections : selectionsChange , metadata : null } ) ;
269- } ) ) ;
270-
271- this . _editorEventListenersMapping . set ( textModel ! . uri . toString ( ) , disposableStore ) ;
259+ const notebookDocumentAddedHandler = ( textModel : NotebookTextModel ) => {
260+ if ( this . _documentEventListenersMapping . has ( textModel . uri ) ) {
261+ return ;
272262 }
263+ const disposableStore = new DisposableStore ( ) ;
264+ disposableStore . add ( textModel . onDidModelChangeProxy ( e => {
265+ this . _proxy . $acceptModelChanged ( textModel ! . uri , e , textModel ! . isDirty ) ;
266+ this . _proxy . $acceptDocumentPropertiesChanged ( textModel . uri , { selections : { selections : textModel ! . selections } , metadata : null } ) ;
267+ } ) ) ;
268+ disposableStore . add ( textModel . onDidSelectionChange ( e => {
269+ const selectionsChange = e ? { selections : e } : null ;
270+ this . _proxy . $acceptDocumentPropertiesChanged ( textModel . uri , { selections : selectionsChange , metadata : null } ) ;
271+ } ) ) ;
272+
273+ this . _documentEventListenersMapping . set ( textModel . uri , disposableStore ) ;
273274 } ;
274275
275- this . _register ( this . _notebookService . onNotebookDocumentAdd ( ( documents ) => {
276- documents . forEach ( doc => {
277- notebookDocumentAddedHandler ( doc ) ;
278- } ) ;
276+ this . _notebookService . listNotebookDocuments ( ) . forEach ( notebookDocumentAddedHandler ) ;
277+ this . _register ( this . _notebookService . onDidAddNotebookDocument ( document => {
278+ notebookDocumentAddedHandler ( document ) ;
279279 this . _updateState ( ) ;
280280 } ) ) ;
281281
282- this . _notebookService . listNotebookDocuments ( ) . forEach ( ( doc ) => {
283- notebookDocumentAddedHandler ( doc . uri ) ;
284- } ) ;
285-
286- this . _register ( this . _notebookService . onNotebookDocumentRemove ( ( documents ) => {
287- documents . forEach ( doc => {
288- this . _documentEventListenersMapping . get ( doc . toString ( ) ) ?. dispose ( ) ;
289- this . _documentEventListenersMapping . delete ( doc . toString ( ) ) ;
290- } ) ;
291-
282+ this . _register ( this . _notebookService . onDidRemoveNotebookDocument ( uri => {
283+ this . _documentEventListenersMapping . get ( uri ) ?. dispose ( ) ;
284+ this . _documentEventListenersMapping . delete ( uri ) ;
292285 this . _updateState ( ) ;
293286 } ) ) ;
294287
0 commit comments