don't put conference joins into pending on initial bind

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 25 
1 file changed, 14 insertions(+), 11 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -154,14 +154,6 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 			fetchBookmarks(account);
 			sendPresence(account);
 			connectMultiModeConversations(account);
-			for (Conversation conversation : account.pendingConferenceLeaves) {
-				leaveMuc(conversation);
-			}
-			account.pendingConferenceLeaves.clear();
-			for (Conversation conversation : account.pendingConferenceJoins) {
-				joinMuc(conversation);
-			}
-			account.pendingConferenceJoins.clear();
 			mMessageArchiveService.executePendingQueries(account);
 			mJingleConnectionManager.cancelInTransmission();
 			syncDirtyContacts(account);
@@ -273,6 +265,14 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 						sendUnsentMessages(conversation);
 					}
 				}
+				for (Conversation conversation : account.pendingConferenceLeaves) {
+					leaveMuc(conversation);
+				}
+				account.pendingConferenceLeaves.clear();
+				for (Conversation conversation : account.pendingConferenceJoins) {
+					joinMuc(conversation);
+				}
+				account.pendingConferenceJoins.clear();
 				scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode());
 			} else if (account.getStatus() == Account.State.OFFLINE) {
 				resetSendingToWaiting(account);
@@ -1472,17 +1472,20 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 		List<Conversation> conversations = getConversations();
 		for (Conversation conversation : conversations) {
 			if (conversation.getMode() == Conversation.MODE_MULTI && conversation.getAccount() == account) {
-				joinMuc(conversation);
+				joinMuc(conversation,true);
 			}
 		}
 	}
 
-
 	public void joinMuc(Conversation conversation) {
+		joinMuc(conversation,false);
+	}
+
+	private void joinMuc(Conversation conversation, boolean now) {
 		Account account = conversation.getAccount();
 		account.pendingConferenceJoins.remove(conversation);
 		account.pendingConferenceLeaves.remove(conversation);
-		if (account.getStatus() == Account.State.ONLINE) {
+		if (account.getStatus() == Account.State.ONLINE || now) {
 			conversation.resetMucOptions();
 			final String nick = conversation.getMucOptions().getProposedNick();
 			final Jid joinJid = conversation.getMucOptions().createJoinJid(nick);