Browse Source

Makes sure we first fire muc_joined and muc_member_joined before firing command events or any event for the data from the received presence.

tags/v0.0.2
damencho 10 years ago
parent
commit
3e0e8d9215
4 changed files with 110 additions and 84 deletions
  1. 1
    1
      JitsiConference.js
  2. 51
    38
      lib-jitsi-meet.js
  3. 8
    8
      lib-jitsi-meet.min.js
  4. 50
    37
      modules/xmpp/ChatRoom.js

+ 1
- 1
JitsiConference.js View File

@@ -411,7 +411,7 @@ JitsiConference.prototype.muteParticipant = function (id) {
411 411
     this.room.muteParticipant(participant.getJid(), true);
412 412
 };
413 413
 
414
-JitsiConference.prototype.onMemberJoined = function (jid, email, nick) {
414
+JitsiConference.prototype.onMemberJoined = function (jid, nick) {
415 415
     var id = Strophe.getResourceFromJid(jid);
416 416
     if (id === 'focus' || this.myUserId() === id) {
417 417
        return;

+ 51
- 38
lib-jitsi-meet.js View File

@@ -413,7 +413,7 @@ JitsiConference.prototype.muteParticipant = function (id) {
413 413
     this.room.muteParticipant(participant.getJid(), true);
414 414
 };
415 415
 
416
-JitsiConference.prototype.onMemberJoined = function (jid, email, nick) {
416
+JitsiConference.prototype.onMemberJoined = function (jid, nick) {
417 417
     var id = Strophe.getResourceFromJid(jid);
418 418
     if (id === 'focus' || this.myUserId() === id) {
419 419
        return;
@@ -6346,6 +6346,8 @@ ChatRoom.prototype.onPresence = function (pres) {
6346 6346
     parser.packet2JSON(pres, nodes);
6347 6347
     this.lastPresences[from] = nodes;
6348 6348
     var jibri = null;
6349
+    // process nodes to extract data needed for MUC_JOINED and MUC_MEMBER_JOINED
6350
+    // events
6349 6351
     for(var i = 0; i < nodes.length; i++)
6350 6352
     {
6351 6353
         var node = nodes[i];
@@ -6353,53 +6355,24 @@ ChatRoom.prototype.onPresence = function (pres) {
6353 6355
         {
6354 6356
             case "nick":
6355 6357
                 member.nick = node.value;
6356
-                if(!member.isFocus) {
6357
-                    var displayName = !this.xmpp.options.displayJids
6358
-                        ? member.nick : Strophe.getResourceFromJid(from);
6359
-
6360
-                    if (displayName && displayName.length > 0) {
6361
-                        this.eventEmitter.emit(XMPPEvents.DISPLAY_NAME_CHANGED, from, displayName);
6362
-                    }
6363
-                }
6364 6358
                 break;
6365 6359
             case "userId":
6366 6360
                 member.id = node.value;
6367 6361
                 break;
6368
-            case "bridgeIsDown":
6369
-                if(!this.bridgeIsDown) {
6370
-                    this.bridgeIsDown = true;
6371
-                    this.eventEmitter.emit(XMPPEvents.BRIDGE_DOWN);
6372
-                }
6373
-                break;
6374
-            case "jibri-recording-status":
6375
-                var jibri = node;
6376
-                break;
6377
-            case "call-control":
6378
-                var att = node.attributes;
6379
-                if(!att)
6380
-                    break;
6381
-                this.phoneNumber = att.phone || null;
6382
-                this.phonePin = att.pin || null;
6383
-                this.eventEmitter.emit(XMPPEvents.PHONE_NUMBER_CHANGED);
6384
-                break;
6385
-            default :
6386
-                this.processNode(node, from);
6387 6362
         }
6388
-
6389 6363
     }
6390 6364
 
6391 6365
     if (from == this.myroomjid) {
6392
-        if (member.affiliation == 'owner')
6393
-
6394
-            if (this.role !== member.role) {
6366
+        if (member.affiliation == 'owner'
6367
+            &&  this.role !== member.role) {
6395 6368
                 this.role = member.role;
6396
-
6397
-                this.eventEmitter.emit(XMPPEvents.LOCAL_ROLE_CHANGED, this.role);
6398
-            }
6369
+                this.eventEmitter.emit(
6370
+                    XMPPEvents.LOCAL_ROLE_CHANGED, this.role);
6371
+        }
6399 6372
         if (!this.joined) {
6400 6373
             this.joined = true;
6401 6374
             console.log("(TIME) MUC joined:\t", window.performance.now());
6402
-            this.eventEmitter.emit(XMPPEvents.MUC_JOINED, from, member);
6375
+            this.eventEmitter.emit(XMPPEvents.MUC_JOINED);
6403 6376
         }
6404 6377
     } else if (this.members[from] === undefined) {
6405 6378
         // new participant
@@ -6417,14 +6390,16 @@ ChatRoom.prototype.onPresence = function (pres) {
6417 6390
             logger.info("Ignore focus: " + from + ", real JID: " + member.jid);
6418 6391
         }
6419 6392
         else {
6420
-            this.eventEmitter.emit(XMPPEvents.MUC_MEMBER_JOINED, from, member.id, member.nick);
6393
+            this.eventEmitter.emit(
6394
+                XMPPEvents.MUC_MEMBER_JOINED, from, member.nick);
6421 6395
         }
6422 6396
     } else {
6423 6397
         // Presence update for existing participant
6424 6398
         // Watch role change:
6425 6399
         if (this.members[from].role != member.role) {
6426 6400
             this.members[from].role = member.role;
6427
-            this.eventEmitter.emit(XMPPEvents.MUC_ROLE_CHANGED, from, member.role);
6401
+            this.eventEmitter.emit(
6402
+                XMPPEvents.MUC_ROLE_CHANGED, from, member.role);
6428 6403
         }
6429 6404
 
6430 6405
         // store the new display name
@@ -6432,7 +6407,45 @@ ChatRoom.prototype.onPresence = function (pres) {
6432 6407
             this.members[from].displayName = member.displayName;
6433 6408
     }
6434 6409
 
6410
+    // after we had fired member or room joined events, lets fire events
6411
+    // for the rest info we got in presence
6412
+    for(var i = 0; i < nodes.length; i++)
6413
+    {
6414
+        var node = nodes[i];
6415
+        switch(node.tagName)
6416
+        {
6417
+            case "nick":
6418
+                if(!member.isFocus) {
6419
+                    var displayName = !this.xmpp.options.displayJids
6420
+                        ? member.nick : Strophe.getResourceFromJid(from);
6435 6421
 
6422
+                    if (displayName && displayName.length > 0) {
6423
+                        this.eventEmitter.emit(
6424
+                            XMPPEvents.DISPLAY_NAME_CHANGED, from, displayName);
6425
+                    }
6426
+                }
6427
+                break;
6428
+            case "bridgeIsDown":
6429
+                if(!this.bridgeIsDown) {
6430
+                    this.bridgeIsDown = true;
6431
+                    this.eventEmitter.emit(XMPPEvents.BRIDGE_DOWN);
6432
+                }
6433
+                break;
6434
+            case "jibri-recording-status":
6435
+                var jibri = node;
6436
+                break;
6437
+            case "call-control":
6438
+                var att = node.attributes;
6439
+                if(!att)
6440
+                    break;
6441
+                this.phoneNumber = att.phone || null;
6442
+                this.phonePin = att.pin || null;
6443
+                this.eventEmitter.emit(XMPPEvents.PHONE_NUMBER_CHANGED);
6444
+                break;
6445
+            default :
6446
+                this.processNode(node, from);
6447
+        }
6448
+    }
6436 6449
 
6437 6450
     if(!member.isFocus)
6438 6451
         this.eventEmitter.emit(XMPPEvents.USER_ID_CHANGED, from, member.id);

+ 8
- 8
lib-jitsi-meet.min.js
File diff suppressed because it is too large
View File


+ 50
- 37
modules/xmpp/ChatRoom.js View File

@@ -217,6 +217,8 @@ ChatRoom.prototype.onPresence = function (pres) {
217 217
     parser.packet2JSON(pres, nodes);
218 218
     this.lastPresences[from] = nodes;
219 219
     var jibri = null;
220
+    // process nodes to extract data needed for MUC_JOINED and MUC_MEMBER_JOINED
221
+    // events
220 222
     for(var i = 0; i < nodes.length; i++)
221 223
     {
222 224
         var node = nodes[i];
@@ -224,53 +226,24 @@ ChatRoom.prototype.onPresence = function (pres) {
224 226
         {
225 227
             case "nick":
226 228
                 member.nick = node.value;
227
-                if(!member.isFocus) {
228
-                    var displayName = !this.xmpp.options.displayJids
229
-                        ? member.nick : Strophe.getResourceFromJid(from);
230
-
231
-                    if (displayName && displayName.length > 0) {
232
-                        this.eventEmitter.emit(XMPPEvents.DISPLAY_NAME_CHANGED, from, displayName);
233
-                    }
234
-                }
235 229
                 break;
236 230
             case "userId":
237 231
                 member.id = node.value;
238 232
                 break;
239
-            case "bridgeIsDown":
240
-                if(!this.bridgeIsDown) {
241
-                    this.bridgeIsDown = true;
242
-                    this.eventEmitter.emit(XMPPEvents.BRIDGE_DOWN);
243
-                }
244
-                break;
245
-            case "jibri-recording-status":
246
-                var jibri = node;
247
-                break;
248
-            case "call-control":
249
-                var att = node.attributes;
250
-                if(!att)
251
-                    break;
252
-                this.phoneNumber = att.phone || null;
253
-                this.phonePin = att.pin || null;
254
-                this.eventEmitter.emit(XMPPEvents.PHONE_NUMBER_CHANGED);
255
-                break;
256
-            default :
257
-                this.processNode(node, from);
258 233
         }
259
-
260 234
     }
261 235
 
262 236
     if (from == this.myroomjid) {
263
-        if (member.affiliation == 'owner')
264
-
265
-            if (this.role !== member.role) {
237
+        if (member.affiliation == 'owner'
238
+            &&  this.role !== member.role) {
266 239
                 this.role = member.role;
267
-
268
-                this.eventEmitter.emit(XMPPEvents.LOCAL_ROLE_CHANGED, this.role);
269
-            }
240
+                this.eventEmitter.emit(
241
+                    XMPPEvents.LOCAL_ROLE_CHANGED, this.role);
242
+        }
270 243
         if (!this.joined) {
271 244
             this.joined = true;
272 245
             console.log("(TIME) MUC joined:\t", window.performance.now());
273
-            this.eventEmitter.emit(XMPPEvents.MUC_JOINED, from, member);
246
+            this.eventEmitter.emit(XMPPEvents.MUC_JOINED);
274 247
         }
275 248
     } else if (this.members[from] === undefined) {
276 249
         // new participant
@@ -288,14 +261,16 @@ ChatRoom.prototype.onPresence = function (pres) {
288 261
             logger.info("Ignore focus: " + from + ", real JID: " + member.jid);
289 262
         }
290 263
         else {
291
-            this.eventEmitter.emit(XMPPEvents.MUC_MEMBER_JOINED, from, member.id, member.nick);
264
+            this.eventEmitter.emit(
265
+                XMPPEvents.MUC_MEMBER_JOINED, from, member.nick);
292 266
         }
293 267
     } else {
294 268
         // Presence update for existing participant
295 269
         // Watch role change:
296 270
         if (this.members[from].role != member.role) {
297 271
             this.members[from].role = member.role;
298
-            this.eventEmitter.emit(XMPPEvents.MUC_ROLE_CHANGED, from, member.role);
272
+            this.eventEmitter.emit(
273
+                XMPPEvents.MUC_ROLE_CHANGED, from, member.role);
299 274
         }
300 275
 
301 276
         // store the new display name
@@ -303,7 +278,45 @@ ChatRoom.prototype.onPresence = function (pres) {
303 278
             this.members[from].displayName = member.displayName;
304 279
     }
305 280
 
281
+    // after we had fired member or room joined events, lets fire events
282
+    // for the rest info we got in presence
283
+    for(var i = 0; i < nodes.length; i++)
284
+    {
285
+        var node = nodes[i];
286
+        switch(node.tagName)
287
+        {
288
+            case "nick":
289
+                if(!member.isFocus) {
290
+                    var displayName = !this.xmpp.options.displayJids
291
+                        ? member.nick : Strophe.getResourceFromJid(from);
306 292
 
293
+                    if (displayName && displayName.length > 0) {
294
+                        this.eventEmitter.emit(
295
+                            XMPPEvents.DISPLAY_NAME_CHANGED, from, displayName);
296
+                    }
297
+                }
298
+                break;
299
+            case "bridgeIsDown":
300
+                if(!this.bridgeIsDown) {
301
+                    this.bridgeIsDown = true;
302
+                    this.eventEmitter.emit(XMPPEvents.BRIDGE_DOWN);
303
+                }
304
+                break;
305
+            case "jibri-recording-status":
306
+                var jibri = node;
307
+                break;
308
+            case "call-control":
309
+                var att = node.attributes;
310
+                if(!att)
311
+                    break;
312
+                this.phoneNumber = att.phone || null;
313
+                this.phonePin = att.pin || null;
314
+                this.eventEmitter.emit(XMPPEvents.PHONE_NUMBER_CHANGED);
315
+                break;
316
+            default :
317
+                this.processNode(node, from);
318
+        }
319
+    }
307 320
 
308 321
     if(!member.isFocus)
309 322
         this.eventEmitter.emit(XMPPEvents.USER_ID_CHANGED, from, member.id);

Loading…
Cancel
Save