@@ -249,6 +249,24 @@ export interface DatabaseItem {
249249 belongsToSourceArchiveExplorerUri ( uri : vscode . Uri ) : boolean ;
250250}
251251
252+ export enum DatabaseEventKind {
253+ Add = 'Add' ,
254+ Remove = 'Remove' ,
255+
256+ // Fired when databases are refreshed from persisted state
257+ Refresh = 'Refresh' ,
258+
259+ // Fired when the current database changes
260+ Change = 'Change' ,
261+
262+ Rename = 'Rename'
263+ }
264+
265+ export interface DatabaseChangedEvent {
266+ kind : DatabaseEventKind ;
267+ item : DatabaseItem | undefined ;
268+ }
269+
252270class DatabaseItemImpl implements DatabaseItem {
253271 private _error : Error | undefined = undefined ;
254272 private _contents : DatabaseContents | undefined ;
@@ -257,7 +275,7 @@ class DatabaseItemImpl implements DatabaseItem {
257275
258276 public constructor ( public readonly databaseUri : vscode . Uri ,
259277 contents : DatabaseContents | undefined , private options : FullDatabaseOptions ,
260- private readonly onChanged : ( item : DatabaseItemImpl ) => void ) {
278+ private readonly onChanged : ( event : DatabaseChangedEvent ) => void ) {
261279
262280 this . _contents = contents ;
263281 }
@@ -312,7 +330,10 @@ class DatabaseItemImpl implements DatabaseItem {
312330 }
313331 }
314332 finally {
315- this . onChanged ( this ) ;
333+ this . onChanged ( {
334+ kind : DatabaseEventKind . Refresh ,
335+ item : this
336+ } ) ;
316337 }
317338 }
318339
@@ -452,11 +473,11 @@ function eventFired<T>(event: vscode.Event<T>, timeoutMs = 1000): Promise<T | un
452473}
453474
454475export class DatabaseManager extends DisposableObject {
455- private readonly _onDidChangeDatabaseItem = this . push ( new vscode . EventEmitter < DatabaseItem | undefined > ( ) ) ;
476+ private readonly _onDidChangeDatabaseItem = this . push ( new vscode . EventEmitter < DatabaseChangedEvent > ( ) ) ;
456477
457478 readonly onDidChangeDatabaseItem = this . _onDidChangeDatabaseItem . event ;
458479
459- private readonly _onDidChangeCurrentDatabaseItem = this . push ( new vscode . EventEmitter < DatabaseItem | undefined > ( ) ) ;
480+ private readonly _onDidChangeCurrentDatabaseItem = this . push ( new vscode . EventEmitter < DatabaseChangedEvent > ( ) ) ;
460481 readonly onDidChangeCurrentDatabaseItem = this . _onDidChangeCurrentDatabaseItem . event ;
461482
462483 private readonly _databaseItems : DatabaseItemImpl [ ] = [ ] ;
@@ -484,8 +505,8 @@ export class DatabaseManager extends DisposableObject {
484505 displayName : realOptions . displayName ,
485506 dateAdded : realOptions . dateAdded || Date . now ( )
486507 } ;
487- const databaseItem = new DatabaseItemImpl ( uri , contents , fullOptions , ( item ) => {
488- this . _onDidChangeDatabaseItem . fire ( item ) ;
508+ const databaseItem = new DatabaseItemImpl ( uri , contents , fullOptions , ( event ) => {
509+ this . _onDidChangeDatabaseItem . fire ( event ) ;
489510 } ) ;
490511 await this . addDatabaseItem ( databaseItem ) ;
491512 await this . addDatabaseSourceArchiveFolder ( databaseItem ) ;
@@ -556,8 +577,8 @@ export class DatabaseManager extends DisposableObject {
556577 dateAdded
557578 } ;
558579 const item = new DatabaseItemImpl ( vscode . Uri . parse ( state . uri ) , undefined , fullOptions ,
559- ( item ) => {
560- this . _onDidChangeDatabaseItem . fire ( item ) ;
580+ ( event ) => {
581+ this . _onDidChangeDatabaseItem . fire ( event ) ;
561582 } ) ;
562583 await this . addDatabaseItem ( item ) ;
563584
@@ -605,7 +626,10 @@ export class DatabaseManager extends DisposableObject {
605626 if ( this . _currentDatabaseItem !== item ) {
606627 this . _currentDatabaseItem = item ;
607628 this . updatePersistedCurrentDatabaseItem ( ) ;
608- this . _onDidChangeCurrentDatabaseItem . fire ( item ) ;
629+ this . _onDidChangeCurrentDatabaseItem . fire ( {
630+ item,
631+ kind : DatabaseEventKind . Change
632+ } ) ;
609633 }
610634 }
611635
@@ -631,13 +655,19 @@ export class DatabaseManager extends DisposableObject {
631655 private async addDatabaseItem ( item : DatabaseItemImpl ) {
632656 this . _databaseItems . push ( item ) ;
633657 this . updatePersistedDatabaseList ( ) ;
634- this . _onDidChangeDatabaseItem . fire ( undefined ) ;
658+ this . _onDidChangeDatabaseItem . fire ( {
659+ item : undefined ,
660+ kind : DatabaseEventKind . Add
661+ } ) ;
635662 }
636663
637664 public async renameDatabaseItem ( item : DatabaseItem , newName : string ) {
638665 item . name = newName ;
639666 this . updatePersistedDatabaseList ( ) ;
640- this . _onDidChangeDatabaseItem . fire ( item ) ;
667+ this . _onDidChangeDatabaseItem . fire ( {
668+ item,
669+ kind : DatabaseEventKind . Rename
670+ } ) ;
641671 }
642672
643673 public removeDatabaseItem ( item : DatabaseItem ) {
@@ -664,7 +694,10 @@ export class DatabaseManager extends DisposableObject {
664694 e => logger . log ( `Failed to delete '${ item . databaseUri . path } '. Reason: ${ e . message } ` ) ) ;
665695 }
666696
667- this . _onDidChangeDatabaseItem . fire ( undefined ) ;
697+ this . _onDidChangeDatabaseItem . fire ( {
698+ item : undefined ,
699+ kind : DatabaseEventKind . Remove
700+ } ) ;
668701 }
669702
670703 private updatePersistedCurrentDatabaseItem ( ) : void {
0 commit comments