Fix out-of-order applications of reaction and delete-for-everyone

This commit is contained in:
Scott Nonnenberg 2020-11-01 07:06:41 -08:00 committed by GitHub
parent 05f905fd10
commit e8759fc81b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 12 deletions

View file

@ -14,7 +14,7 @@
forMessage(message) {
const matchingDeletes = this.filter({
targetSentTimestamp: message.get('sent_at'),
fromId: message.getContact().get('id'),
fromId: message.getContactId(),
});
if (matchingDeletes.length > 0) {

View file

@ -24,15 +24,15 @@
}
}
const senderId = message.getContactId();
const sentAt = message.get('sent_at');
const reactionsBySource = this.filter(re => {
const mcid = message.get('conversationId');
const recid = ConversationController.ensureContactIds({
const targetSenderId = ConversationController.ensureContactIds({
e164: re.get('targetAuthorE164'),
uuid: re.get('targetAuthorUuid'),
});
const mTime = message.get('sent_at');
const rTime = re.get('targetTimestamp');
return mcid === recid && mTime === rTime;
const targetTimestamp = re.get('targetTimestamp');
return targetSenderId === senderId && targetTimestamp === sentAt;
});
if (reactionsBySource.length > 0) {

View file

@ -3344,16 +3344,18 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
// Does this message have any pending, previously-received associated reactions?
const reactions = window.Whisper.Reactions.forMessage(message);
reactions.forEach(reaction => {
message.handleReaction(reaction, false);
});
await Promise.all(
reactions.map(reaction => message.handleReaction(reaction, false))
);
// Does this message have any pending, previously-received associated
// delete for everyone messages?
const deletes = window.Whisper.Deletes.forMessage(message);
deletes.forEach(del => {
window.Signal.Util.deleteForEveryone(message, del, false);
});
await Promise.all(
deletes.map(del =>
window.Signal.Util.deleteForEveryone(message, del, false)
)
);
await window.Signal.Data.saveMessage(message.attributes, {
Message: window.Whisper.Message,