session-desktop/ts/receiver/errors.ts

51 lines
1.6 KiB
TypeScript

import { initIncomingMessage } from './dataMessage';
import { toNumber } from 'lodash';
import { getConversationController } from '../session/conversations';
import { actions as conversationActions } from '../state/ducks/conversations';
import { ConversationTypeEnum } from '../models/conversation';
export async function onError(ev: any) {
const { error } = ev;
window?.log?.error('background onError:', window.Signal.Errors.toLogFormat(error));
if (ev.proto) {
const envelope = ev.proto;
const message = initIncomingMessage(envelope);
await message.saveErrors(error || new Error('Error was null'));
const id = message.get('conversationId');
const conversation = await getConversationController().getOrCreateAndWait(
id,
ConversationTypeEnum.PRIVATE
);
// force conversation unread count to be > 0 so it is highlighted
conversation.set({
active_at: Date.now(),
unreadCount: toNumber(conversation.get('unreadCount')) + 1,
});
const conversationActiveAt = conversation.get('active_at');
const messageTimestamp = message.get('timestamp') || 0;
if (!conversationActiveAt || messageTimestamp > conversationActiveAt) {
conversation.set({ active_at: message.get('sent_at') });
}
conversation.updateLastMessage();
await conversation.notify(message);
window.inboxStore?.dispatch(
conversationActions.messageAdded({
conversationKey: conversation.id,
messageModelProps: message.getMessageModelProps(),
})
);
if (ev.confirm) {
ev.confirm();
}
await conversation.commit();
}
throw error;
}