fixed #9

Daniel Gultsch created

Change summary

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

Detailed changes

src/eu/siacs/conversations/entities/Conversation.java 🔗

@@ -232,13 +232,17 @@ public class Conversation extends AbstractEntity {
 		this.otrSession = null;
 	}
 	
-	public void endOtrIfNeeded() throws OtrException {
+	public void endOtrIfNeeded() {
 		if (this.otrSession!=null) {
 			if (this.otrSession.getSessionStatus() == SessionStatus.ENCRYPTED) {
-				this.otrSession.endSession();
+				try {
+					this.otrSession.endSession();
+					this.resetOtrSession();
+				} catch (OtrException e) {
+					this.resetOtrSession();
+				}
 			}
 		}
-		this.resetOtrSession();
 	}
 
 	public boolean hasValidOtrSession() {

src/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -567,6 +567,7 @@ public class XmppConnectionService extends Service {
 				saveInDb = true;
 				addToConversation = true;
 			} else if (message.getEncryption() == Message.ENCRYPTION_PGP) {
+				message.getConversation().endOtrIfNeeded();
 				long keyId = message.getConversation().getContact()
 						.getPgpKeyId();
 				packet = new MessagePacket();
@@ -586,6 +587,7 @@ public class XmppConnectionService extends Service {
 				saveInDb = true;
 				addToConversation = true;
 			} else {
+				message.getConversation().endOtrIfNeeded();
 				// don't encrypt
 				if (message.getConversation().getMode() == Conversation.MODE_SINGLE) {
 					message.setStatus(Message.STATUS_SEND);
@@ -873,13 +875,7 @@ public class XmppConnectionService extends Service {
 		if (conversation.getMode() == Conversation.MODE_MULTI) {
 			leaveMuc(conversation);
 		} else {
-			try {
-				conversation.endOtrIfNeeded();
-			} catch (OtrException e) {
-				Log.d(LOGTAG,
-						"error ending otr session for "
-								+ conversation.getName());
-			}
+			conversation.endOtrIfNeeded();
 		}
 		this.databaseBackend.updateConversation(conversation);
 		this.conversations.remove(conversation);
@@ -1068,12 +1064,7 @@ public class XmppConnectionService extends Service {
 					if (conversation.getMode() == Conversation.MODE_MULTI) {
 						leaveMuc(conversation);
 					} else {
-						try {
-							conversation.endOtrIfNeeded();
-						} catch (OtrException e) {
-							Log.d(LOGTAG, "error ending otr session for "
-									+ conversation.getName());
-						}
+						conversation.endOtrIfNeeded();
 					}
 				}
 			}