diff --git a/src/eu/siacs/conversations/entities/Conversation.java b/src/eu/siacs/conversations/entities/Conversation.java index 4e8c18342..e04d7bf88 100644 --- a/src/eu/siacs/conversations/entities/Conversation.java +++ b/src/eu/siacs/conversations/entities/Conversation.java @@ -114,7 +114,7 @@ public class Conversation extends AbstractEntity { this.messages.get(i).markRead(); } } - + public String popLatestMarkableMessageId() { String id = this.latestMarkableMessageId; this.latestMarkableMessageId = null; @@ -141,7 +141,8 @@ public class Conversation extends AbstractEntity { if ((getMode() == MODE_MULTI) && (getMucOptions().getSubject() != null) && useSubject) { return getMucOptions().getSubject(); - } else if (getMode() == MODE_MULTI && bookmark!=null && bookmark.getName() != null) { + } else if (getMode() == MODE_MULTI && bookmark != null + && bookmark.getName() != null) { return bookmark.getName(); } else { return this.getContact().getDisplayName(); @@ -238,7 +239,7 @@ public class Conversation extends AbstractEntity { this.otrSessionNeedsStarting = false; return this.otrSession; } else { - this.otrSessionNeedsStarting = true; + this.otrSessionNeedsStarting = true; } return this.otrSession; } catch (OtrException e) { @@ -267,7 +268,7 @@ public class Conversation extends AbstractEntity { } } } - + public void endOtrIfNeeded() { if (this.otrSession != null) { if (this.otrSession.getSessionStatus() == SessionStatus.ENCRYPTED) { @@ -372,7 +373,7 @@ public class Conversation extends AbstractEntity { public void setSymmetricKey(byte[] key) { this.symmetricKey = key; } - + public byte[] getSymmetricKey() { return this.symmetricKey; } @@ -381,7 +382,7 @@ public class Conversation extends AbstractEntity { this.bookmark = bookmark; this.bookmark.setConversation(this); } - + public void deregisterWithBookmark() { if (this.bookmark != null) { this.bookmark.setConversation(null); @@ -391,4 +392,13 @@ public class Conversation extends AbstractEntity { public Bookmark getBookmark() { return this.bookmark; } + + public void failWaitingOtrMessages() { + for (Message message : this.messages) { + if (message.getEncryption() == Message.ENCRYPTION_OTR + && message.getStatus() == Message.STATUS_WAITING) { + message.setStatus(Message.STATUS_SEND_FAILED); + } + } + } } diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index a7dccf1ca..0ac1adf76 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -532,11 +532,13 @@ public class XmppConnectionService extends Service { } } else if (message.getEncryption() == Message.ENCRYPTION_DECRYPTED) { message.getConversation().endOtrIfNeeded(); + message.getConversation().failWaitingOtrMessages(); packet = mMessageGenerator.generatePgpChat(message); message.setStatus(Message.STATUS_SEND); send = true; } else { message.getConversation().endOtrIfNeeded(); + message.getConversation().failWaitingOtrMessages(); if (message.getConversation().getMode() == Conversation.MODE_SINGLE) { message.setStatus(Message.STATUS_SEND); }