diff --git a/src/main/java/eu/siacs/conversations/entities/MucOptions.java b/src/main/java/eu/siacs/conversations/entities/MucOptions.java index a70c67198ce2aa28305f8e0f35833f8482b38ece..81463d9e9b2530ac0c6db20c1c1a959e7c91ca82 100644 --- a/src/main/java/eu/siacs/conversations/entities/MucOptions.java +++ b/src/main/java/eu/siacs/conversations/entities/MucOptions.java @@ -417,7 +417,7 @@ public class MucOptions { } } - private String getProposedNick() { + public String getProposedNick() { final Bookmark bookmark = this.conversation.getBookmark(); final String bookmarkedNick = normalize(account.getJid(), bookmark == null ? null : bookmark.getNick()); if (bookmarkedNick != null) { diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index dc00c0277bd4349f731c21883fa9006b24d84c5b..c13509f0489b2f9bb528159da5687a5850d608da 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -238,7 +238,9 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece if (item != null) { final Bookmark bookmark = Bookmark.parseFromItem(item, account); if (bookmark != null) { + account.putBookmark(bookmark); mXmppConnectionService.processModifiedBookmark(bookmark); + mXmppConnectionService.updateConversationUi(); } } if (retract != null) { @@ -247,6 +249,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece account.removeBookmark(id); Log.d(Config.LOGTAG,account.getJid().asBareJid()+": deleted bookmark for "+id); mXmppConnectionService.processDeletedBookmark(account, id); + mXmppConnectionService.updateConversationUi(); } } } else { diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index a3ba0b6d06ae945fe92f5f579e19b90bb77ad0ad..a2b8ef7a7acae8a05cf4aeeb1a0610ef1a1eafcc 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -1621,6 +1621,16 @@ public class XmppConnectionService extends Service { if (pep && synchronizeWithBookmarks && !bookmark.autojoin()) { Log.d(Config.LOGTAG,account.getJid().asBareJid()+": archiving conference ("+conversation.getJid()+") after receiving pep"); archiveConversation(conversation, false); + } else { + final MucOptions mucOptions = conversation.getMucOptions(); + if (mucOptions.getError() == MucOptions.Error.NICK_IN_USE) { + final String current = mucOptions.getActualNick(); + final String proposed = mucOptions.getProposedNick(); + if (current != null && !current.equals(proposed)) { + Log.d(Config.LOGTAG,account.getJid().asBareJid()+": proposed nick changed after bookmark push "+current+"->"+proposed); + joinMuc(conversation); + } + } } } else if (synchronizeWithBookmarks && bookmark.autojoin()) { conversation = findOrCreateConversation(account, bookmark.getFullJid(), true, true, false);