fixes for offline otr

iNPUTmice created

Change summary

src/eu/siacs/conversations/entities/Conversation.java          | 16 ++++
src/eu/siacs/conversations/services/XmppConnectionService.java |  2 
2 files changed, 17 insertions(+), 1 deletion(-)

Detailed changes

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) {

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));
 					}
 				}