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; }