aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2017-01-22 18:58:49 +0100
committerDaniel Gultsch <daniel@gultsch.de>2017-01-22 18:58:49 +0100
commit4c6ef3b24edcd1169940851fc01103cc9d29d2be (patch)
treeb28b9d92936dd14303def22ea4e0d2f51bf40907
parentb48bf39e08d00910c0cc78ba66c635f15a6893a0 (diff)
cleaning up crypto targets when conference member is getting removed
-rw-r--r--src/main/java/eu/siacs/conversations/parser/MessageParser.java9
-rw-r--r--src/main/java/eu/siacs/conversations/services/XmppConnectionService.java20
2 files changed, 29 insertions, 0 deletions
diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java
index 7a08340b..9a52ff80 100644
--- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java
+++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java
@@ -624,6 +624,15 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
mXmppConnectionService.getAvatarService().clear(conversation);
mXmppConnectionService.updateMucRosterUi();
mXmppConnectionService.updateConversationUi();
+ if (!user.getAffiliation().ranks(MucOptions.Affiliation.MEMBER)) {
+ Jid jid = user.getRealJid();
+ List<Jid> cryptoTargets = conversation.getAcceptedCryptoTargets();
+ if (cryptoTargets.remove(user.getRealJid())) {
+ Log.d(Config.LOGTAG,account.getJid().toBareJid()+": removed "+jid+" from crypto targets of "+conversation.getName());
+ conversation.setAcceptedCryptoTargets(cryptoTargets);
+ mXmppConnectionService.updateConversation(conversation);
+ }
+ }
}
}
}
diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
index e53b2524..5f949821 100644
--- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
@@ -55,6 +55,7 @@ import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
+import java.util.ListIterator;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -2140,6 +2141,7 @@ public class XmppConnectionService extends Service {
OnIqPacketReceived callback = new OnIqPacketReceived() {
private int i = 0;
+ private boolean success = true;
@Override
public void onIqPacketReceived(Account account, IqPacket packet) {
@@ -2155,10 +2157,28 @@ public class XmppConnectionService extends Service {
}
}
} else {
+ success = false;
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": could not request affiliation "+affiliations[i]+" in "+conversation.getJid().toBareJid());
}
++i;
if (i >= affiliations.length) {
+ List<Jid> members = conversation.getMucOptions().getMembers();
+ if (success) {
+ List<Jid> cryptoTargets = conversation.getAcceptedCryptoTargets();
+ boolean changed = false;
+ for(ListIterator<Jid> iterator = cryptoTargets.listIterator(); iterator.hasNext();) {
+ Jid jid = iterator.next();
+ if (!members.contains(jid)) {
+ iterator.remove();
+ Log.d(Config.LOGTAG,account.getJid().toBareJid()+": removed "+jid+" from crypto targets of "+conversation.getName());
+ changed = true;
+ }
+ }
+ if (changed) {
+ conversation.setAcceptedCryptoTargets(cryptoTargets);
+ updateConversation(conversation);
+ }
+ }
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": retrieved members for "+conversation.getJid().toBareJid()+": "+conversation.getMucOptions().getMembers());
getAvatarService().clear(conversation);
updateMucRosterUi();