|  |  |  | import { initIncomingMessage } from './dataMessage'; | 
					
						
							|  |  |  | import { toNumber } from 'lodash'; | 
					
						
							|  |  |  | import { ConversationController } from '../session/conversations'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export async function onError(ev: any) { | 
					
						
							|  |  |  |   const { error } = ev; | 
					
						
							|  |  |  |   window.log.error( | 
					
						
							|  |  |  |     'background onError:', | 
					
						
							|  |  |  |     window.Signal.Errors.toLogFormat(error) | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (ev.proto) { | 
					
						
							|  |  |  |     if (error && error.name === 'MessageCounterError') { | 
					
						
							|  |  |  |       if (ev.confirm) { | 
					
						
							|  |  |  |         ev.confirm(); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       // Ignore this message. It is likely a duplicate delivery
 | 
					
						
							|  |  |  |       // because the server lost our ack the first time.
 | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     const envelope = ev.proto; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const message = initIncomingMessage(envelope); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     message.saveErrors(error || new Error('Error was null')); | 
					
						
							|  |  |  |     const id = message.get('conversationId'); | 
					
						
							|  |  |  |     const conversation = await ConversationController.getInstance().getOrCreateAndWait( | 
					
						
							|  |  |  |       id, | 
					
						
							|  |  |  |       '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 conversationTimestamp = conversation.get('timestamp'); | 
					
						
							|  |  |  |     const messageTimestamp = message.get('timestamp'); | 
					
						
							|  |  |  |     if (!conversationTimestamp || messageTimestamp > conversationTimestamp) { | 
					
						
							|  |  |  |       conversation.set({ timestamp: message.get('sent_at') }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     conversation.updateLastMessage(); | 
					
						
							|  |  |  |     conversation.notify(message); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (ev.confirm) { | 
					
						
							|  |  |  |       ev.confirm(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     await conversation.commit(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   throw error; | 
					
						
							|  |  |  | } |