@@ -32,7 +32,6 @@ import * as banners from '../../../client/lib/banners';
3232import type { LegacyBannerPayload } from '../../../client/lib/banners' ;
3333import { dispatchToastMessage } from '../../../client/lib/toast' ;
3434import { mapMessageFromApi } from '../../../client/lib/utils/mapMessageFromApi' ;
35- import { waitUntilFind } from '../../../client/lib/utils/waitUntilFind' ;
3635import EnterE2EPasswordModal from '../../../client/views/e2e/EnterE2EPasswordModal' ;
3736import SaveE2EPasswordModal from '../../../client/views/e2e/SaveE2EPasswordModal' ;
3837import { createQuoteAttachment } from '../../../lib/createQuoteAttachment' ;
@@ -254,8 +253,24 @@ class E2E extends Emitter {
254253 ) ;
255254 }
256255
256+ private waitForRoom ( rid : IRoom [ '_id' ] ) : Promise < IRoom > {
257+ return new Promise ( ( resolve ) => {
258+ const room = Rooms . state . get ( rid ) ;
259+
260+ if ( room ) resolve ( room ) ;
261+
262+ const unsubscribe = Rooms . use . subscribe ( ( state ) => {
263+ const room = state . get ( rid ) ;
264+ if ( room ) {
265+ unsubscribe ( ) ;
266+ resolve ( room ) ;
267+ }
268+ } ) ;
269+ } ) ;
270+ }
271+
257272 async getInstanceByRoomId ( rid : IRoom [ '_id' ] ) : Promise < E2ERoom | null > {
258- const room = await waitUntilFind ( ( ) => Rooms . findOne ( { _id : rid } ) ) ;
273+ const room = await this . waitForRoom ( rid ) ;
259274
260275 if ( room . t !== 'd' && room . t !== 'p' ) {
261276 return null ;
@@ -846,11 +861,12 @@ class E2E extends Emitter {
846861 return ;
847862 }
848863
864+ const predicate = ( record : IRoom ) =>
865+ Boolean ( 'usersWaitingForE2EKeys' in record && record . usersWaitingForE2EKeys ?. every ( ( user ) => user . userId !== Meteor . userId ( ) ) ) ;
866+
849867 const keyDistribution = async ( ) => {
850- const roomIds = Rooms . find ( {
851- 'usersWaitingForE2EKeys' : { $exists : true } ,
852- 'usersWaitingForE2EKeys.userId' : { $ne : Meteor . userId ( ) } ,
853- } ) . map ( ( room ) => room . _id ) ;
868+ const roomIds = Rooms . state . filter ( predicate ) . map ( ( room ) => room . _id ) ;
869+
854870 if ( ! roomIds . length ) {
855871 return ;
856872 }
0 commit comments