Browse Source

Fixes conference recreation issues when focus leaves.

master
paweldomas 11 years ago
parent
commit
39895ed137
2 changed files with 32 additions and 29 deletions
  1. 29
    24
      app.js
  2. 3
    5
      muc.js

+ 29
- 24
app.js View File

262
         container  = document.getElementById(
262
         container  = document.getElementById(
263
                 'participant_' + Strophe.getResourceFromJid(data.peerjid));
263
                 'participant_' + Strophe.getResourceFromJid(data.peerjid));
264
         if (!container) {
264
         if (!container) {
265
-            console.warn('no container for', data.peerjid);
266
-            // create for now...
267
-            // FIXME: should be removed
268
-            container = addRemoteVideoContainer(
269
-                    'participant_' + Strophe.getResourceFromJid(data.peerjid));
265
+            console.error('no container for', data.peerjid);
270
         } else {
266
         } else {
271
             //console.log('found container for', data.peerjid);
267
             //console.log('found container for', data.peerjid);
272
         }
268
         }
575
     console.log('entered', jid, info);
571
     console.log('entered', jid, info);
576
     console.log('is focus?' + focus ? 'true' : 'false');
572
     console.log('is focus?' + focus ? 'true' : 'false');
577
 
573
 
578
-    var videoSpanId = 'participant_' + Strophe.getResourceFromJid(jid);
579
-    var container = addRemoteVideoContainer(videoSpanId);
580
-
581
-    if (info.displayName)
582
-        showDisplayName(videoSpanId, info.displayName);
583
-
584
-    var nickfield = document.createElement('span');
585
-    nickfield.className = "nick";
586
-    nickfield.appendChild(document.createTextNode(Strophe.getResourceFromJid(jid)));
587
-    container.appendChild(nickfield);
588
-    resizeThumbnails();
574
+    // Add Peer's container
575
+    ensurePeerContainerExists(jid);
589
 
576
 
590
     if (focus !== null) {
577
     if (focus !== null) {
591
         // FIXME: this should prepare the video
578
         // FIXME: this should prepare the video
600
     else if (sharedKey) {
587
     else if (sharedKey) {
601
         updateLockButton();
588
         updateLockButton();
602
     }
589
     }
603
-
604
-    $(pres).find('>media[xmlns="http://estos.de/ns/mjs"]>source').each(function (idx, ssrc) {
605
-        //console.log(jid, 'assoc ssrc', ssrc.getAttribute('type'), ssrc.getAttribute('ssrc'));
606
-        // Fixme: direction and video types are unhandled here(maybe something more)
607
-        ssrc2jid[ssrc.getAttribute('ssrc')] = jid;
608
-    });
609
 });
590
 });
610
 
591
 
611
 $(document).bind('left.muc', function (event, jid) {
592
 $(document).bind('left.muc', function (event, jid) {
674
     });
655
     });
675
 
656
 
676
     if (info.displayName) {
657
     if (info.displayName) {
677
-        if (jid === connection.emuc.myroomjid)
658
+        if (jid === connection.emuc.myroomjid) {
678
             showDisplayName('localVideoContainer', info.displayName + ' (me)');
659
             showDisplayName('localVideoContainer', info.displayName + ' (me)');
679
-        else
660
+        } else {
661
+            ensurePeerContainerExists(jid);
680
             showDisplayName('participant_' + Strophe.getResourceFromJid(jid), info.displayName);
662
             showDisplayName('participant_' + Strophe.getResourceFromJid(jid), info.displayName);
663
+        }
681
     }
664
     }
682
 });
665
 });
683
 
666
 
1389
     }
1372
     }
1390
 }
1373
 }
1391
 
1374
 
1375
+/**
1376
+ * Checks if container for participant identified by given peerJid exists in the document and creates it eventually.
1377
+ * @param peerJid peer Jid to check.
1378
+ */
1379
+function ensurePeerContainerExists(peerJid){
1380
+
1381
+    var peerResource = Strophe.getResourceFromJid(peerJid);
1382
+    var videoSpanId = 'participant_' + peerResource;
1383
+
1384
+    if($('#'+videoSpanId).length > 0) {
1385
+        return;
1386
+    }
1387
+
1388
+    var container = addRemoteVideoContainer(videoSpanId);
1389
+
1390
+    var nickfield = document.createElement('span');
1391
+    nickfield.className = "nick";
1392
+    nickfield.appendChild(document.createTextNode(peerResource));
1393
+    container.appendChild(nickfield);
1394
+    resizeThumbnails();
1395
+}
1396
+
1392
 function addRemoteVideoContainer(id) {
1397
 function addRemoteVideoContainer(id) {
1393
     var container = document.createElement('span');
1398
     var container = document.createElement('span');
1394
     container.id = id;
1399
     container.id = id;

+ 3
- 5
muc.js View File

98
                 $(document).trigger('joined.muc', [from, member]);
98
                 $(document).trigger('joined.muc', [from, member]);
99
                 this.list_members.push(from);
99
                 this.list_members.push(from);
100
             }
100
             }
101
-            else
102
-                $(document).trigger('presence.muc', [from, member, pres]);
103
         } else if (this.members[from] === undefined) {
101
         } else if (this.members[from] === undefined) {
104
             // new participant
102
             // new participant
105
             this.members[from] = member;
103
             this.members[from] = member;
106
             this.list_members.push(from);
104
             this.list_members.push(from);
107
             $(document).trigger('entered.muc', [from, member, pres]);
105
             $(document).trigger('entered.muc', [from, member, pres]);
108
-        } else {
109
-            console.log('presence change from', from);
110
-            $(document).trigger('presence.muc', [from, member, pres]);
111
         }
106
         }
107
+        // Always trigger presence to update bindings
108
+        console.log('presence change from', from);
109
+        $(document).trigger('presence.muc', [from, member, pres]);
112
         return true;
110
         return true;
113
     },
111
     },
114
     onPresenceUnavailable: function (pres) {
112
     onPresenceUnavailable: function (pres) {

Loading…
Cancel
Save