aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/parser/PresenceParser.java
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2016-11-15 22:53:27 +0100
committerChristian Schneppe <christian@pix-art.de>2016-11-15 22:53:27 +0100
commit120c1d903b670f1621d9eea8cdbe94e6ec002ef1 (patch)
tree1d6b789d348801701aa9da7c34cb9abdaed03e3d /src/main/java/de/pixart/messenger/parser/PresenceParser.java
parentfae03f7b0b4c9491fb7ce57e94ab8148fb580b0d (diff)
extract affiliations from unavailable presence
Diffstat (limited to 'src/main/java/de/pixart/messenger/parser/PresenceParser.java')
-rw-r--r--src/main/java/de/pixart/messenger/parser/PresenceParser.java16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/main/java/de/pixart/messenger/parser/PresenceParser.java b/src/main/java/de/pixart/messenger/parser/PresenceParser.java
index 477aff0ba..50f13150b 100644
--- a/src/main/java/de/pixart/messenger/parser/PresenceParser.java
+++ b/src/main/java/de/pixart/messenger/parser/PresenceParser.java
@@ -37,7 +37,7 @@ public class PresenceParser extends AbstractParser implements
boolean before = mucOptions.online();
int count = mucOptions.getUserCount();
final List<MucOptions.User> tileUserBefore = mucOptions.getUsers(5);
- processConferencePresence(packet, mucOptions);
+ processConferencePresence(packet, conversation);
final List<MucOptions.User> tileUserAfter = mucOptions.getUsers(5);
if (!tileUserAfter.equals(tileUserBefore)) {
mXmppConnectionService.getAvatarService().clear(mucOptions);
@@ -50,7 +50,8 @@ public class PresenceParser extends AbstractParser implements
}
}
- private void processConferencePresence(PresencePacket packet, MucOptions mucOptions) {
+ private void processConferencePresence(PresencePacket packet, Conversation conversation) {
+ MucOptions mucOptions = conversation.getMucOptions();
final Jid from = packet.getFrom();
if (!from.isBareJid()) {
final String type = packet.getAttribute("type");
@@ -62,10 +63,7 @@ public class PresenceParser extends AbstractParser implements
Element item = x.findChild("item");
if (item != null && !from.isBareJid()) {
mucOptions.setError(MucOptions.Error.NONE);
- MucOptions.User user = new MucOptions.User(mucOptions, from);
- user.setAffiliation(item.getAttribute("affiliation"));
- user.setRole(item.getAttribute("role"));
- user.setRealJid(item.getAttributeAsJid("jid"));
+ MucOptions.User user = parseItem(conversation, item, from);
if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE) || packet.getFrom().equals(mucOptions.getConversation().getJid())) {
mucOptions.setOnline();
mucOptions.setSelf(user);
@@ -76,7 +74,7 @@ public class PresenceParser extends AbstractParser implements
mucOptions.mNickChangingInProgress = false;
}
} else {
- mucOptions.addUser(user);
+ mucOptions.updateUser(user);
}
if (codes.contains(MucOptions.STATUS_CODE_ROOM_CREATED) && mucOptions.autoPushConfiguration()) {
Log.d(Config.LOGTAG,mucOptions.getAccount().getJid().toBareJid()
@@ -130,6 +128,10 @@ public class PresenceParser extends AbstractParser implements
Log.d(Config.LOGTAG, "unknown error in conference: " + packet);
}
} else if (!from.isBareJid()){
+ Element item = x.findChild("item");
+ if (item != null) {
+ mucOptions.updateUser(parseItem(conversation, item, from));
+ }
MucOptions.User user = mucOptions.deleteUser(from);
if (user != null) {
mXmppConnectionService.getAvatarService().clear(user);