@@ -22,6 +22,15 @@ import { LocalRoom, LocalRoomState } from "../models/LocalRoom";
22
22
import { isLocalRoom } from "./localRoom/isLocalRoom" ;
23
23
import { isRoomReady } from "./localRoom/isRoomReady" ;
24
24
25
+ const isActualRoomIdDefined = ( actualRoomId : string | undefined ) : actualRoomId is string => {
26
+ if ( actualRoomId === undefined ) {
27
+ // should not happen
28
+ throw new Error ( "Local room in CREATED state without actual room Id occurred" ) ;
29
+ }
30
+
31
+ return true ;
32
+ } ;
33
+
25
34
/**
26
35
* Does a room action:
27
36
* For non-local rooms it calls fn directly.
@@ -43,7 +52,7 @@ export async function doMaybeLocalRoomAction<T>(
43
52
if ( isLocalRoom ( roomId ) ) {
44
53
const room = client . getRoom ( roomId ) as LocalRoom ;
45
54
46
- if ( room . isCreated ) {
55
+ if ( room . isCreated && isActualRoomIdDefined ( room . actualRoomId ) ) {
47
56
return fn ( room . actualRoomId ) ;
48
57
}
49
58
@@ -69,30 +78,36 @@ export async function doMaybeLocalRoomAction<T>(
69
78
* @async
70
79
* @param {MatrixClient } client
71
80
* @param {LocalRoom } localRoom
81
+ * @param actualRoomId Id of the actual room
72
82
* @returns {Promise<string> } Resolved to the actual room id
73
83
*/
74
84
export async function waitForRoomReadyAndApplyAfterCreateCallbacks (
75
85
client : MatrixClient ,
76
86
localRoom : LocalRoom ,
87
+ actualRoomId : string ,
77
88
) : Promise < string > {
78
89
if ( isRoomReady ( client , localRoom ) ) {
79
- return applyAfterCreateCallbacks ( localRoom , localRoom . actualRoomId ) . then ( ( ) => {
90
+ return applyAfterCreateCallbacks ( localRoom , actualRoomId ) . then ( ( ) => {
80
91
localRoom . state = LocalRoomState . CREATED ;
81
92
client . emit ( ClientEvent . Room , localRoom ) ;
82
- return Promise . resolve ( localRoom . actualRoomId ) ;
93
+ return Promise . resolve ( actualRoomId ) ;
83
94
} ) ;
84
95
}
85
96
86
- return new Promise ( ( resolve ) => {
97
+ return new Promise ( ( resolve , reject ) => {
87
98
const finish = ( ) : void => {
88
99
if ( checkRoomStateIntervalHandle ) clearInterval ( checkRoomStateIntervalHandle ) ;
89
100
if ( stopgapTimeoutHandle ) clearTimeout ( stopgapTimeoutHandle ) ;
90
101
91
- applyAfterCreateCallbacks ( localRoom , localRoom . actualRoomId ) . then ( ( ) => {
92
- localRoom . state = LocalRoomState . CREATED ;
93
- client . emit ( ClientEvent . Room , localRoom ) ;
94
- resolve ( localRoom . actualRoomId ) ;
95
- } ) ;
102
+ applyAfterCreateCallbacks ( localRoom , actualRoomId )
103
+ . then ( ( ) => {
104
+ localRoom . state = LocalRoomState . CREATED ;
105
+ client . emit ( ClientEvent . Room , localRoom ) ;
106
+ resolve ( actualRoomId ) ;
107
+ } )
108
+ . catch ( ( err ) => {
109
+ reject ( err ) ;
110
+ } ) ;
96
111
} ;
97
112
98
113
const stopgapFinish = ( ) : void => {
0 commit comments