Receive support for DOE messages
This commit is contained in:
parent
b8a674bbb6
commit
ba5e2ff6e5
17 changed files with 291 additions and 42 deletions
|
@ -2241,7 +2241,7 @@
|
|||
// Note: We do very little in this function, since everything in handleDataMessage is
|
||||
// inside a conversation-specific queue(). Any code here might run before an earlier
|
||||
// message is processed in handleDataMessage().
|
||||
async function onMessageReceived(event) {
|
||||
function onMessageReceived(event) {
|
||||
const { data, confirm } = event;
|
||||
|
||||
const messageDescriptor = getDescriptorForReceived(data);
|
||||
|
@ -2250,17 +2250,16 @@
|
|||
// eslint-disable-next-line no-bitwise
|
||||
const isProfileUpdate = Boolean(data.message.flags & PROFILE_KEY_UPDATE);
|
||||
if (isProfileUpdate) {
|
||||
await handleMessageReceivedProfileUpdate({
|
||||
return handleMessageReceivedProfileUpdate({
|
||||
data,
|
||||
confirm,
|
||||
messageDescriptor,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
const message = await initIncomingMessage(data);
|
||||
const message = initIncomingMessage(data);
|
||||
|
||||
const result = await ConversationController.getOrCreateAndWait(
|
||||
const result = ConversationController.getOrCreate(
|
||||
messageDescriptor.id,
|
||||
messageDescriptor.type
|
||||
);
|
||||
|
@ -2286,11 +2285,26 @@
|
|||
// Note: We do not wait for completion here
|
||||
Whisper.Reactions.onReaction(reactionModel);
|
||||
confirm();
|
||||
return;
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
if (data.message.delete) {
|
||||
const { delete: del } = data.message;
|
||||
const deleteModel = Whisper.Deletes.add({
|
||||
targetSentTimestamp: del.targetSentTimestamp,
|
||||
serverTimestamp: data.serverTimestamp,
|
||||
fromId: data.source || data.sourceUuid,
|
||||
});
|
||||
// Note: We do not wait for completion here
|
||||
Whisper.Deletes.onDelete(deleteModel);
|
||||
confirm();
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
// Don't wait for handleDataMessage, as it has its own per-conversation queueing
|
||||
message.handleDataMessage(data.message, event.confirm);
|
||||
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
async function handleMessageSentProfileUpdate({
|
||||
|
@ -2341,6 +2355,7 @@
|
|||
sourceUuid: textsecure.storage.user.getUuid(),
|
||||
sourceDevice: data.device,
|
||||
sent_at: data.timestamp,
|
||||
serverTimestamp: data.serverTimestamp,
|
||||
sent_to: sentTo,
|
||||
received_at: now,
|
||||
conversationId: data.destination,
|
||||
|
@ -2357,7 +2372,7 @@
|
|||
// Note: We do very little in this function, since everything in handleDataMessage is
|
||||
// inside a conversation-specific queue(). Any code here might run before an earlier
|
||||
// message is processed in handleDataMessage().
|
||||
async function onSentMessage(event) {
|
||||
function onSentMessage(event) {
|
||||
const { data, confirm } = event;
|
||||
|
||||
const messageDescriptor = getDescriptorForSent(data);
|
||||
|
@ -2366,20 +2381,20 @@
|
|||
// eslint-disable-next-line no-bitwise
|
||||
const isProfileUpdate = Boolean(data.message.flags & PROFILE_KEY_UPDATE);
|
||||
if (isProfileUpdate) {
|
||||
await handleMessageSentProfileUpdate({
|
||||
return handleMessageSentProfileUpdate({
|
||||
data,
|
||||
confirm,
|
||||
messageDescriptor,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
const message = await createSentMessage(data);
|
||||
const message = createSentMessage(data);
|
||||
|
||||
const ourNumber = textsecure.storage.user.getNumber();
|
||||
const ourUuid = textsecure.storage.user.getUuid();
|
||||
|
||||
if (data.message.reaction) {
|
||||
const { reaction } = data.message;
|
||||
const ourNumber = textsecure.storage.user.getNumber();
|
||||
const ourUuid = textsecure.storage.user.getUuid();
|
||||
const reactionModel = Whisper.Reactions.add({
|
||||
emoji: reaction.emoji,
|
||||
remove: reaction.remove,
|
||||
|
@ -2394,10 +2409,23 @@
|
|||
Whisper.Reactions.onReaction(reactionModel);
|
||||
|
||||
event.confirm();
|
||||
return;
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
await ConversationController.getOrCreateAndWait(
|
||||
if (data.message.delete) {
|
||||
const { delete: del } = data.message;
|
||||
const deleteModel = Whisper.Deletes.add({
|
||||
targetSentTimestamp: del.targetSentTimestamp,
|
||||
serverTimestamp: del.serverTimestamp,
|
||||
fromId: ourNumber || ourUuid,
|
||||
});
|
||||
// Note: We do not wait for completion here
|
||||
Whisper.Deletes.onDelete(deleteModel);
|
||||
confirm();
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
ConversationController.getOrCreate(
|
||||
messageDescriptor.id,
|
||||
messageDescriptor.type
|
||||
);
|
||||
|
@ -2406,9 +2434,11 @@
|
|||
message.handleDataMessage(data.message, event.confirm, {
|
||||
data,
|
||||
});
|
||||
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
async function initIncomingMessage(data) {
|
||||
function initIncomingMessage(data) {
|
||||
const targetId = data.source || data.sourceUuid;
|
||||
const conversation = ConversationController.get(targetId);
|
||||
const conversationId = conversation ? conversation.id : targetId;
|
||||
|
@ -2418,6 +2448,7 @@
|
|||
sourceUuid: data.sourceUuid,
|
||||
sourceDevice: data.sourceDevice,
|
||||
sent_at: data.timestamp,
|
||||
serverTimestamp: data.serverTimestamp,
|
||||
received_at: Date.now(),
|
||||
conversationId,
|
||||
unidentifiedDeliveryReceived: data.unidentifiedDeliveryReceived,
|
||||
|
@ -2485,7 +2516,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
async function onError(ev) {
|
||||
function onError(ev) {
|
||||
const { error } = ev;
|
||||
window.log.error('background onError:', Errors.toLogFormat(error));
|
||||
|
||||
|
@ -2494,8 +2525,7 @@
|
|||
error.name === 'HTTPError' &&
|
||||
(error.code === 401 || error.code === 403)
|
||||
) {
|
||||
await unlinkAndDisconnect();
|
||||
return;
|
||||
return unlinkAndDisconnect();
|
||||
}
|
||||
|
||||
if (
|
||||
|
@ -2510,7 +2540,7 @@
|
|||
|
||||
Whisper.events.trigger('reconnectTimer');
|
||||
}
|
||||
return;
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
if (ev.proto) {
|
||||
|
@ -2520,13 +2550,13 @@
|
|||
}
|
||||
// Ignore this message. It is likely a duplicate delivery
|
||||
// because the server lost our ack the first time.
|
||||
return;
|
||||
return Promise.resolve();
|
||||
}
|
||||
const envelope = ev.proto;
|
||||
const message = await initIncomingMessage(envelope);
|
||||
const message = initIncomingMessage(envelope);
|
||||
|
||||
const conversationId = message.get('conversationId');
|
||||
const conversation = await ConversationController.getOrCreateAndWait(
|
||||
const conversation = ConversationController.getOrCreate(
|
||||
conversationId,
|
||||
'private'
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue