kopia lustrzana https://github.com/ryukoposting/Signal-Android
Fix issue where synced media messages weren't downloading.
There was race where the AttachmentDownloadJob was run during a transaction, which meant that it might not be able to see the message that was just inserted. Gotta be more careful now with WAL mode.fork-5.53.8
rodzic
dbb1e50d00
commit
29489a664e
|
@ -1367,10 +1367,13 @@ public final class MessageContentProcessor {
|
||||||
|
|
||||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipients);
|
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipients);
|
||||||
|
|
||||||
database.beginTransaction();
|
long messageId;
|
||||||
|
List<DatabaseAttachment> attachments;
|
||||||
|
List<DatabaseAttachment> stickerAttachments;
|
||||||
|
|
||||||
|
database.beginTransaction();
|
||||||
try {
|
try {
|
||||||
long messageId = database.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptDatabase.STATUS_UNKNOWN, null);
|
messageId = database.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptDatabase.STATUS_UNKNOWN, null);
|
||||||
|
|
||||||
if (recipients.isGroup()) {
|
if (recipients.isGroup()) {
|
||||||
updateGroupReceiptStatus(message, messageId, recipients.requireGroupId());
|
updateGroupReceiptStatus(message, messageId, recipients.requireGroupId());
|
||||||
|
@ -1381,14 +1384,9 @@ public final class MessageContentProcessor {
|
||||||
database.markAsSent(messageId, true);
|
database.markAsSent(messageId, true);
|
||||||
|
|
||||||
List<DatabaseAttachment> allAttachments = DatabaseFactory.getAttachmentDatabase(context).getAttachmentsForMessage(messageId);
|
List<DatabaseAttachment> allAttachments = DatabaseFactory.getAttachmentDatabase(context).getAttachmentsForMessage(messageId);
|
||||||
List<DatabaseAttachment> stickerAttachments = Stream.of(allAttachments).filter(Attachment::isSticker).toList();
|
|
||||||
List<DatabaseAttachment> attachments = Stream.of(allAttachments).filterNot(Attachment::isSticker).toList();
|
|
||||||
|
|
||||||
forceStickerDownloadIfNecessary(messageId, stickerAttachments);
|
stickerAttachments = Stream.of(allAttachments).filter(Attachment::isSticker).toList();
|
||||||
|
attachments = Stream.of(allAttachments).filterNot(Attachment::isSticker).toList();
|
||||||
for (DatabaseAttachment attachment : attachments) {
|
|
||||||
ApplicationDependencies.getJobManager().add(new AttachmentDownloadJob(messageId, attachment.getAttachmentId(), false));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message.getMessage().getExpiresInSeconds() > 0) {
|
if (message.getMessage().getExpiresInSeconds() > 0) {
|
||||||
database.markExpireStarted(messageId, message.getExpirationStartTimestamp());
|
database.markExpireStarted(messageId, message.getExpirationStartTimestamp());
|
||||||
|
@ -1409,6 +1407,13 @@ public final class MessageContentProcessor {
|
||||||
} finally {
|
} finally {
|
||||||
database.endTransaction();
|
database.endTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (DatabaseAttachment attachment : attachments) {
|
||||||
|
ApplicationDependencies.getJobManager().add(new AttachmentDownloadJob(messageId, attachment.getAttachmentId(), false));
|
||||||
|
}
|
||||||
|
|
||||||
|
forceStickerDownloadIfNecessary(messageId, stickerAttachments);
|
||||||
|
|
||||||
return threadId;
|
return threadId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue