recognize muc self presence on nimbuzz.com

Apparently nimbuzz.com doesn't include status code 110 in muc self presence
It does however include the full real jid in the presence’s item.
We can use that as a work around to detect a self presence.
This commit is contained in:
Daniel Gultsch 2017-04-15 15:14:08 +02:00
parent c86134e523
commit 483304c697

View File

@ -54,6 +54,7 @@ public class PresenceParser extends AbstractParser implements
private void processConferencePresence(PresencePacket packet, Conversation conversation) { private void processConferencePresence(PresencePacket packet, Conversation conversation) {
MucOptions mucOptions = conversation.getMucOptions(); MucOptions mucOptions = conversation.getMucOptions();
final Jid jid = conversation.getAccount().getJid();
final Jid from = packet.getFrom(); final Jid from = packet.getFrom();
if (!from.isBareJid()) { if (!from.isBareJid()) {
final String type = packet.getAttribute("type"); final String type = packet.getAttribute("type");
@ -66,7 +67,7 @@ public class PresenceParser extends AbstractParser implements
if (item != null && !from.isBareJid()) { if (item != null && !from.isBareJid()) {
mucOptions.setError(MucOptions.Error.NONE); mucOptions.setError(MucOptions.Error.NONE);
MucOptions.User user = parseItem(conversation, item, from); MucOptions.User user = parseItem(conversation, item, from);
if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE)) { if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE) || (codes.isEmpty() && jid.equals(item.getAttributeAsJid("jid")))) {
mucOptions.setOnline(); mucOptions.setOnline();
mucOptions.setSelf(user); mucOptions.setSelf(user);
if (mucOptions.onRenameListener != null) { if (mucOptions.onRenameListener != null) {
@ -108,8 +109,7 @@ public class PresenceParser extends AbstractParser implements
} }
} }
} else if (type.equals("unavailable")) { } else if (type.equals("unavailable")) {
if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE) || if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE)) {
packet.getFrom().equals(mucOptions.getConversation().getJid())) {
if (codes.contains(MucOptions.STATUS_CODE_KICKED)) { if (codes.contains(MucOptions.STATUS_CODE_KICKED)) {
mucOptions.setError(MucOptions.Error.KICKED); mucOptions.setError(MucOptions.Error.KICKED);
} else if (codes.contains(MucOptions.STATUS_CODE_BANNED)) { } else if (codes.contains(MucOptions.STATUS_CODE_BANNED)) {