don't put conference joins into pending on initial bind

This commit is contained in:
Daniel Gultsch 2015-10-01 16:01:19 +02:00
parent 6a0b9971aa
commit 2b9b700c96
1 changed files with 14 additions and 11 deletions

View File

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