From 6ef9421d3525e35e18b052d3eab31560d49d31b8 Mon Sep 17 00:00:00 2001 From: iNPUTmice Date: Tue, 24 Jun 2014 15:07:59 +0200 Subject: [PATCH] fixes for offline otr --- .../conversations/entities/Conversation.java | 16 ++++++++++++++++ .../services/XmppConnectionService.java | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/eu/siacs/conversations/entities/Conversation.java b/src/eu/siacs/conversations/entities/Conversation.java index 640d89e90..3379e11d9 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 f71a6d785..35bc26035 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 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)); } }