|
@@ -389,7 +389,14 @@ export default class ChatRoom extends Listenable {
|
389
|
389
|
const member = {};
|
390
|
390
|
|
391
|
391
|
member.show = $(pres).find('>show').text();
|
392
|
|
- member.status = $(pres).find('>status').text();
|
|
392
|
+ const $statusNode = $(pres).find('>status');
|
|
393
|
+ const hasStatus = $statusNode.length;
|
|
394
|
+
|
|
395
|
+ if (hasStatus) {
|
|
396
|
+ member.status = $statusNode.text();
|
|
397
|
+ }
|
|
398
|
+ let hasStatusUpdate = false;
|
|
399
|
+
|
393
|
400
|
const mucUserItem
|
394
|
401
|
= $(pres).find(
|
395
|
402
|
'>x[xmlns="http://jabber.org/protocol/muc#user"]>item');
|
|
@@ -466,6 +473,8 @@ export default class ChatRoom extends Listenable {
|
466
|
473
|
XMPPEvents.MUC_MEMBER_JOINED,
|
467
|
474
|
from, member.nick, member.role, member.isHiddenDomain);
|
468
|
475
|
}
|
|
476
|
+
|
|
477
|
+ hasStatusUpdate = member.status !== undefined;
|
469
|
478
|
} else {
|
470
|
479
|
// Presence update for existing participant
|
471
|
480
|
// Watch role change:
|
|
@@ -495,6 +504,12 @@ export default class ChatRoom extends Listenable {
|
495
|
504
|
if (member.displayName) {
|
496
|
505
|
memberOfThis.displayName = member.displayName;
|
497
|
506
|
}
|
|
507
|
+
|
|
508
|
+ // update stored status message to be able to detect changes
|
|
509
|
+ if (memberOfThis.status !== member.status) {
|
|
510
|
+ hasStatusUpdate = true;
|
|
511
|
+ memberOfThis.status = member.status;
|
|
512
|
+ }
|
498
|
513
|
}
|
499
|
514
|
|
500
|
515
|
// after we had fired member or room joined events, lets fire events
|
|
@@ -541,8 +556,8 @@ export default class ChatRoom extends Listenable {
|
541
|
556
|
}
|
542
|
557
|
}
|
543
|
558
|
|
544
|
|
- // Trigger status message update
|
545
|
|
- if (member.status) {
|
|
559
|
+ // Trigger status message update if necessary
|
|
560
|
+ if (hasStatusUpdate) {
|
546
|
561
|
this.eventEmitter.emit(
|
547
|
562
|
XMPPEvents.PRESENCE_STATUS,
|
548
|
563
|
from,
|