diff options
Diffstat (limited to 'src/eu/siacs/conversations')
-rw-r--r-- | src/eu/siacs/conversations/entities/Conversation.java | 16 | ||||
-rw-r--r-- | src/eu/siacs/conversations/services/XmppConnectionService.java | 2 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/eu/siacs/conversations/entities/Conversation.java b/src/eu/siacs/conversations/entities/Conversation.java index 640d89e9..3379e11d 100644 --- a/src/eu/siacs/conversations/entities/Conversation.java +++ b/src/eu/siacs/conversations/entities/Conversation.java @@ -64,6 +64,8 @@ public class Conversation extends AbstractEntity { private byte[] symmetricKey; + private boolean otrSessionNeedsStarting = false; + public Conversation(String name, Account account, String contactJid, int mode) { this(java.util.UUID.randomUUID().toString(), name, null, account @@ -237,7 +239,10 @@ public class Conversation extends AbstractEntity { try { if (sendStart) { this.otrSession.startSession(); + this.otrSessionNeedsStarting = false; return this.otrSession; + } else { + this.otrSessionNeedsStarting = true; } return this.otrSession; } catch (OtrException e) { @@ -252,9 +257,20 @@ public class Conversation extends AbstractEntity { } public void resetOtrSession() { + this.otrSessionNeedsStarting = false; this.otrSession = null; } + public void startOtrIfNeeded() { + if (this.otrSession != null && this.otrSessionNeedsStarting) { + try { + this.otrSession.startSession(); + } catch (OtrException e) { + this.resetOtrSession(); + } + } + } + public void endOtrIfNeeded() { if (this.otrSession != null) { if (this.otrSession.getSessionStatus() == SessionStatus.ENCRYPTED) { diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index f71a6d78..35bc2603 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -235,7 +235,7 @@ public class XmppConnectionService extends Service { List<Conversation> conversations = getConversations(); for (int i = 0; i < conversations.size(); ++i) { if (conversations.get(i).getAccount() == account) { - conversations.get(i).endOtrIfNeeded(); + conversations.get(i).startOtrIfNeeded(); sendUnsendMessages(conversations.get(i)); } } |