diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessEarlyMessagesJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessEarlyMessagesJob.kt index 72d043b88c..3de9b6ec71 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessEarlyMessagesJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessEarlyMessagesJob.kt @@ -48,7 +48,7 @@ class PushProcessEarlyMessagesJob private constructor(parameters: Parameters) : if (contents.isPresent) { for (content: SignalServiceContent in contents.get()) { Log.i(TAG, "[${id.sentTimestamp}] Processing early content for $id") - MessageContentProcessor(context).process(MessageContentProcessor.MessageState.DECRYPTED_OK, content, null, id.sentTimestamp, -1) + MessageContentProcessor.forEarlyContent(context).process(MessageContentProcessor.MessageState.DECRYPTED_OK, content, null, id.sentTimestamp, -1) } } else { Log.w(TAG, "[${id.sentTimestamp}] Saw $id in the cache, but when we went to retrieve it, it was already gone.") diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.java index a06b587e22..cfc0ea2b4d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushProcessMessageJob.java @@ -189,7 +189,7 @@ public final class PushProcessMessageJob extends BaseJob { @Override public void onRun() throws Exception { - MessageContentProcessor processor = new MessageContentProcessor(context); + MessageContentProcessor processor = MessageContentProcessor.forNormalContent(context); processor.process(messageState, content, exceptionMetadata, timestamp, smsMessageId); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java index 6423231608..86871a1b73 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java @@ -142,7 +142,7 @@ public class IncomingMessageProcessor { stopwatch.split("group-check"); try { - MessageContentProcessor processor = new MessageContentProcessor(context); + MessageContentProcessor processor = MessageContentProcessor.forNormalContent(context); processor.process(result.getState(), result.getContent(), result.getException(), envelope.getTimestamp(), -1); return null; } catch (IOException | GroupChangeBusyException e) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index ceab295f20..dee5a8c241 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -195,9 +195,19 @@ public final class MessageContentProcessor { private static final String TAG = Log.tag(MessageContentProcessor.class); private final Context context; + private final boolean processingEarlyContent; - public MessageContentProcessor(@NonNull Context context) { - this.context = context; + public static MessageContentProcessor forNormalContent(@NonNull Context context) { + return new MessageContentProcessor(context, false); + } + + public static MessageContentProcessor forEarlyContent(@NonNull Context context) { + return new MessageContentProcessor(context, true); + } + + private MessageContentProcessor(@NonNull Context context, boolean processingEarlyContent) { + this.context = context; + this.processingEarlyContent = processingEarlyContent; } /** @@ -895,8 +905,10 @@ public final class MessageContentProcessor { if (targetMessage == null) { warn(String.valueOf(content.getTimestamp()), "[handleReaction] Could not find matching message! Putting it in the early message cache. timestamp: " + reaction.getTargetSentTimestamp() + " author: " + targetAuthor.getId()); - ApplicationDependencies.getEarlyMessageCache().store(targetAuthor.getId(), reaction.getTargetSentTimestamp(), content); - PushProcessEarlyMessagesJob.enqueue(); + if (!processingEarlyContent) { + ApplicationDependencies.getEarlyMessageCache().store(targetAuthor.getId(), reaction.getTargetSentTimestamp(), content); + PushProcessEarlyMessagesJob.enqueue(); + } return null; } @@ -952,8 +964,10 @@ public final class MessageContentProcessor { return new MessageId(targetMessage.getId(), targetMessage.isMms()); } else if (targetMessage == null) { warn(String.valueOf(content.getTimestamp()), "[handleRemoteDelete] Could not find matching message! timestamp: " + delete.getTargetSentTimestamp() + " author: " + senderRecipient.getId()); - ApplicationDependencies.getEarlyMessageCache().store(senderRecipient.getId(), delete.getTargetSentTimestamp(), content); - PushProcessEarlyMessagesJob.enqueue(); + if (!processingEarlyContent) { + ApplicationDependencies.getEarlyMessageCache().store(senderRecipient.getId(), delete.getTargetSentTimestamp(), content); + PushProcessEarlyMessagesJob.enqueue(); + } return null; } else { warn(String.valueOf(content.getTimestamp()), String.format(Locale.ENGLISH, "[handleRemoteDelete] Invalid remote delete! deleteTime: %d, targetTime: %d, deleteAuthor: %s, targetAuthor: %s", @@ -2131,10 +2145,12 @@ public final class MessageContentProcessor { for (SyncMessageId id : unhandled) { warn(String.valueOf(content.getTimestamp()), "[handleViewedReceipt] Could not find matching message! timestamp: " + id.getTimetamp() + " author: " + senderRecipient.getId()); - ApplicationDependencies.getEarlyMessageCache().store(senderRecipient.getId(), id.getTimetamp(), content); + if (!processingEarlyContent) { + ApplicationDependencies.getEarlyMessageCache().store(senderRecipient.getId(), id.getTimetamp(), content); + } } - if (unhandled.size() > 0) { + if (unhandled.size() > 0 && !processingEarlyContent) { PushProcessEarlyMessagesJob.enqueue(); } } @@ -2184,10 +2200,12 @@ public final class MessageContentProcessor { for (SyncMessageId id : unhandled) { warn(String.valueOf(content.getTimestamp()), "[handleReadReceipt] Could not find matching message! timestamp: " + id.getTimetamp() + " author: " + senderRecipient.getId()); - ApplicationDependencies.getEarlyMessageCache().store(senderRecipient.getId(), id.getTimetamp(), content); + if (!processingEarlyContent) { + ApplicationDependencies.getEarlyMessageCache().store(senderRecipient.getId(), id.getTimetamp(), content); + } } - if (unhandled.size() > 0) { + if (unhandled.size() > 0 && !processingEarlyContent) { PushProcessEarlyMessagesJob.enqueue(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java b/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java index 317b659280..32e99cc795 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java @@ -51,7 +51,7 @@ public final class EarlyMessageCache { } /** - * Returns a collection of all of the {@link ServiceMessageId}s referenced in the cache at the moment of inquiry. + * Returns a collection of all of the {@link ServiceMessageId}s referenced in the cache at the moment of inquiry. * Caution: There is no guarantee that this list will be relevant for any amount of time afterwards. */ public synchronized @NonNull Collection getAllReferencedIds() {