Merge pull request #976 from Mikunj/slow-message-fix

Speed up message decryption.
pull/981/head
Mikunj Varsani 5 years ago committed by GitHub
commit 04aca110c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1964,21 +1964,23 @@
return handleProfileUpdate({ data, confirm, messageDescriptor }); return handleProfileUpdate({ data, confirm, messageDescriptor });
} }
const primaryDeviceKey = window.storage.get('primaryDevicePubKey');
const allOurDevices = await libloki.storage.getAllDevicePubKeysForPrimaryPubKey(
primaryDeviceKey
);
const descriptorId = await textsecure.MessageReceiver.arrayBufferToString( const descriptorId = await textsecure.MessageReceiver.arrayBufferToString(
messageDescriptor.id messageDescriptor.id
); );
let message; let message;
if ( if (
messageDescriptor.type === 'group' && messageDescriptor.type === 'group' &&
descriptorId.match(/^publicChat:/) && descriptorId.match(/^publicChat:/)
allOurDevices.includes(data.source)
) { ) {
// Public chat messages from ourselves should be outgoing // Note: This only works currently because we have a 1 device limit
message = await createSentMessage(data); // When we change that, the check below needs to change too
const ourNumber = textsecure.storage.user.getNumber();
const primaryDevice = window.storage.get('primaryDevicePubKey');
const { source } = data;
if (source && (source === ourNumber || source === primaryDevice)) {
// Public chat messages from ourselves should be outgoing
message = await createSentMessage(data);
}
} else { } else {
message = await createMessage(data); message = await createMessage(data);
} }
@ -2132,35 +2134,35 @@
const message = new Whisper.Message(messageData); const message = new Whisper.Message(messageData);
// If we don't return early here, we can get into infinite error loops. So, no // Send a delivery receipt
// delivery receipts for sealed sender errors. // If we don't return early here, we can get into infinite error loops. So, no delivery receipts for sealed sender errors.
// Note(LOKI): don't send receipt for FR as we don't have a session yet // Note(LOKI): don't send receipt for FR as we don't have a session yet
if (isError || !data.unidentifiedDeliveryReceived || data.friendRequest) { const isGroup = data && data.message && data.message.group;
return message; const shouldSendReceipt =
} !isError &&
data.unidentifiedDeliveryReceived &&
try { !data.isFriendRequest &&
!isGroup;
// Send the receipt async and hope that it succeeds
if (shouldSendReceipt) {
const { wrap, sendOptions } = ConversationController.prepareForSend( const { wrap, sendOptions } = ConversationController.prepareForSend(
data.source data.source
); );
const isGroup = data && data.message && data.message.group; wrap(
if (!isGroup) { textsecure.messaging.sendDeliveryReceipt(
await wrap( data.source,
textsecure.messaging.sendDeliveryReceipt( data.timestamp,
data.source, sendOptions
data.timestamp, )
sendOptions ).catch(error => {
) window.log.error(
`Failed to send delivery receipt to ${data.source} for message ${
data.timestamp
}:`,
error && error.stack ? error.stack : error
); );
} });
} catch (error) {
window.log.error(
`Failed to send delivery receipt to ${data.source} for message ${
data.timestamp
}:`,
error && error.stack ? error.stack : error
);
} }
return message; return message;

Loading…
Cancel
Save