diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2016-06-13 19:06:09 +0200 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2016-06-14 21:28:29 +0200 |
commit | 38dd084e33ea25433abc4894f46ebdded152d64c (patch) | |
tree | 54e53efb1a4415c95d8dbef9c295c2dca57abd43 | |
parent | aaeced4e209812f3a779dc9560105dc8d3218af5 (diff) |
remove messages from decryption queue when trimming a conversation
-rw-r--r-- | src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java | 4 | ||||
-rw-r--r-- | src/main/java/eu/siacs/conversations/entities/Conversation.java | 19 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java b/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java index 5eedee6da..13985cca7 100644 --- a/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java +++ b/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java @@ -57,6 +57,10 @@ public class PgpDecryptionService { continueDecryption(); } + public synchronized void discard(List<Message> discards) { + this.messages.removeAll(discards); + } + protected synchronized void decryptNext() { if (pendingIntent == null && getOpenPgpApi() != null diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index ca5845f56..8cff7b959 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -22,6 +22,7 @@ import java.util.Iterator; import java.util.List; import eu.siacs.conversations.Config; +import eu.siacs.conversations.crypto.PgpDecryptionService; import eu.siacs.conversations.crypto.axolotl.AxolotlService; import eu.siacs.conversations.xmpp.chatstate.ChatState; import eu.siacs.conversations.xmpp.jid.InvalidJidException; @@ -206,7 +207,13 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl final int size = messages.size(); final int maxsize = Config.PAGE_SIZE * Config.MAX_NUM_PAGES; if (size > maxsize) { - this.messages.subList(0, size - maxsize).clear(); + List<Message> discards = this.messages.subList(0, size - maxsize); + final PgpDecryptionService pgpDecryptionService = account.getPgpDecryptionService(); + if (pgpDecryptionService != null) { + pgpDecryptionService.discard(discards); + } + discards.clear(); + untieMessages(); } } } @@ -963,9 +970,13 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl } } }); - for(Message message : this.messages) { - message.untie(); - } + untieMessages(); + } + } + + private void untieMessages() { + for(Message message : this.messages) { + message.untie(); } } |