diff --git a/src/services/client.service.ts b/src/services/client.service.ts index a68e99d5..2a8fb3d2 100644 --- a/src/services/client.service.ts +++ b/src/services/client.service.ts @@ -86,10 +86,15 @@ class ClientService extends EventTarget { public static getInstance(): ClientService { if (!ClientService.instance) { ClientService.instance = new ClientService() + ClientService.instance.init() } return ClientService.instance } + async init() { + await indexedDb.iterateProfileEvents((profileEvent) => this.addUsernameToIndex(profileEvent)) + } + listConnectionStatus() { return this.pool.listConnectionStatus() } @@ -851,5 +856,4 @@ class ClientService extends EventTarget { } const instance = ClientService.getInstance() - export default instance diff --git a/src/services/indexed-db.service.ts b/src/services/indexed-db.service.ts index e77cb7ac..2e382e97 100644 --- a/src/services/indexed-db.service.ts +++ b/src/services/indexed-db.service.ts @@ -209,6 +209,32 @@ class IndexedDbService { }) } + async iterateProfileEvents(callback: (event: Event) => Promise): Promise { + await this.initPromise + if (!this.db) { + return + } + + return new Promise((resolve, reject) => { + const transaction = this.db!.transaction(StoreNames.PROFILE_EVENTS, 'readwrite') + const store = transaction.objectStore(StoreNames.PROFILE_EVENTS) + const request = store.openCursor() + request.onsuccess = (event) => { + const cursor = (event.target as IDBRequest).result + if (cursor) { + callback((cursor.value as TValue).value) + cursor.continue() + } else { + resolve() + } + } + + request.onerror = (event) => { + reject(event) + } + }) + } + private getStoreNameByKind(kind: number): string | undefined { switch (kind) { case kinds.Metadata: