Merge pull request #1259 from Bilb/fix-read-receipt

pull/1275/head
Audric Ackermann 5 years ago committed by GitHub
commit d03ef84a49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -213,16 +213,6 @@
);
});
},
prepareForSend(id) {
// id is either a group id or an individual user's id
const conversation = this.get(id);
const sendOptions = {};
const wrap = conversation
? conversation.wrapSend.bind(conversation)
: promise => promise;
return { wrap, sendOptions };
},
async getAllGroupsInvolvingId(id) {
const groups = await window.Signal.Data.getAllGroupsInvolvingId(id, {
ConversationCollection: Whisper.ConversationCollection,

@ -741,17 +741,8 @@
}
},
async sendVerifySyncMessage(number, state) {
// Because syncVerification sends a (null) message to the target of the verify and
// a sync message to our own devices, we need to send the accessKeys down for both
// contacts. So we merge their sendOptions.
const { sendOptions } = ConversationController.prepareForSend(
this.ourNumber,
{ syncMessage: true }
);
const options = Object.assign({}, sendOptions, {});
const key = await textsecure.storage.protocol.loadIdentityKey(number);
return textsecure.messaging.syncVerification(number, state, key, options);
return textsecure.messaging.syncVerification(number, state, key);
},
isVerified() {
if (this.isPrivate()) {
@ -1460,30 +1451,6 @@
}
});
},
wrapSend(promise) {
return promise.then(
async result => {
// success
if (result) {
await this.handleMessageSendResult({
...result,
success: true,
});
}
return result;
},
async result => {
// failure
if (result) {
await this.handleMessageSendResult({
...result,
success: false,
});
}
throw result;
}
);
},
async updateAvatarOnPublicChat({ url, profileKey }) {
if (!this.isPublic()) {
@ -1505,63 +1472,6 @@
);
await serverAPI.setAvatar(url, profileKey);
},
async handleMessageSendResult({ failoverNumbers, unidentifiedDeliveries }) {
await Promise.all(
(failoverNumbers || []).map(async number => {
const conversation = ConversationController.get(number);
if (
conversation &&
conversation.get('sealedSender') !== SEALED_SENDER.DISABLED
) {
window.log.info(
`Setting sealedSender to DISABLED for conversation ${conversation.idForLogging()}`
);
conversation.set({
sealedSender: SEALED_SENDER.DISABLED,
});
await window.Signal.Data.updateConversation(
conversation.id,
conversation.attributes,
{ Conversation: Whisper.Conversation }
);
}
})
);
await Promise.all(
(unidentifiedDeliveries || []).map(async number => {
const conversation = ConversationController.get(number);
if (
conversation &&
conversation.get('sealedSender') === SEALED_SENDER.UNKNOWN
) {
if (conversation.get('accessKey')) {
window.log.info(
`Setting sealedSender to ENABLED for conversation ${conversation.idForLogging()}`
);
conversation.set({
sealedSender: SEALED_SENDER.ENABLED,
});
} else {
window.log.info(
`Setting sealedSender to UNRESTRICTED for conversation ${conversation.idForLogging()}`
);
conversation.set({
sealedSender: SEALED_SENDER.UNRESTRICTED,
});
}
await window.Signal.Data.updateConversation(
conversation.id,
conversation.attributes,
{ Conversation: Whisper.Conversation }
);
}
})
);
},
async updateLastMessage() {
if (!this.id) {
return;
@ -2189,31 +2099,26 @@
window.log.info(`Sending ${read.length} read receipts`);
// Because syncReadMessages sends to our other devices, and sendReadReceipts goes
// to a contact, we need accessKeys for both.
const { sendOptions } = ConversationController.prepareForSend(
this.ourNumber,
{ syncMessage: true }
);
await textsecure.messaging.syncReadMessages(read, sendOptions);
// FIXME AUDRIC
// if (storage.get('read-receipt-setting')) {
// await Promise.all(
// _.map(_.groupBy(read, 'sender'), async (receipts, sender) => {
// const timestamps = _.map(receipts, 'timestamp');
// const receiptMessage = new libsession.Messages.Outgoing.ReadReceiptMessage(
// {
// timestamp: Date.now(),
// timestamps,
// }
// );
// const device = new libsession.Types.PubKey(sender);
// await libsession
// .getMessageQueue()
// .sendUsingMultiDevice(device, receiptMessage);
// })
// );
// }
await textsecure.messaging.syncReadMessages(read);
if (storage.get('read-receipt-setting')) {
await Promise.all(
_.map(_.groupBy(read, 'sender'), async (receipts, sender) => {
const timestamps = _.map(receipts, 'timestamp');
const receiptMessage = new libsession.Messages.Outgoing.ReadReceiptMessage(
{
timestamp: Date.now(),
timestamps,
}
);
const device = new libsession.Types.PubKey(sender);
await libsession
.getMessageQueue()
.sendUsingMultiDevice(device, receiptMessage);
})
);
}
}
},

@ -14,6 +14,8 @@ import { handleUnpairRequest } from './multidevice';
import { downloadAttachment } from './attachments';
import _ from 'lodash';
import { StringUtils } from '../session/utils';
import { DeliveryReceiptMessage } from '../session/messages/outgoing';
import { getMessageQueue } from '../session';
export async function updateProfile(
conversation: any,
@ -528,13 +530,12 @@ function createMessage(
}
function sendDeliveryReceipt(source: string, timestamp: any) {
// FIXME audric
// const receiptMessage = new DeliveryReceiptMessage({
// timestamp: Date.now(),
// timestamps: [timestamp],
// });
// const device = new PubKey(source);
// await getMessageQueue().sendUsingMultiDevice(device, receiptMessage);
const receiptMessage = new DeliveryReceiptMessage({
timestamp: Date.now(),
timestamps: [timestamp],
});
const device = new PubKey(source);
void getMessageQueue().sendUsingMultiDevice(device, receiptMessage);
}
interface MessageEvent {

Loading…
Cancel
Save