@ -859,8 +859,6 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					      return  false ; 
      return  false ; 
 
			
		
	
		
		
			
				
					
					    } 
    } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    // NOTE: We don' mind if the message is the same, we still want to update the conversation because we want to show visible control messages we receive an ExpirationTimerUpdate
 
 
			
		
	
		
		
			
				
					
					    // Compare mode and timestamp
 
 
			
		
	
		
		
			
				
					
					    if  ( 
    if  ( 
 
			
		
	
		
		
			
				
					
					      isEqual ( expirationMode ,  this . getExpirationMode ( ) )  && 
      isEqual ( expirationMode ,  this . getExpirationMode ( ) )  && 
 
			
		
	
		
		
			
				
					
					      isEqual ( expireTimer ,  this . getExpireTimer ( ) ) 
      isEqual ( expireTimer ,  this . getExpireTimer ( ) ) 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -899,8 +897,6 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					    let  message : MessageModel  |  undefined  =  existingMessage  ||  undefined ; 
    let  message : MessageModel  |  undefined  =  existingMessage  ||  undefined ; 
 
			
		
	
		
		
			
				
					
					    const  expirationType  =  changeToDisappearingMessageType ( this ,  expireTimer ,  expirationMode ) ; 
    const  expirationType  =  changeToDisappearingMessageType ( this ,  expireTimer ,  expirationMode ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    // we don't have info about who made the change and when, when we get a change from a config message, so do not add a control message
 
 
			
		
	
		
		
			
				
					
					    // TODO NOTE We might not show it in the UI but still need to process it using the sentTimestamp as the lastChange timestamp for config messages
 
 
			
		
	
		
		
			
				
					
					    const  commonAttributes  =  { 
    const  commonAttributes  =  { 
 
			
		
	
		
		
			
				
					
					      flags : SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE , 
      flags : SignalService.DataMessage.Flags.EXPIRATION_TIMER_UPDATE , 
 
			
		
	
		
		
			
				
					
					      expirationTimerUpdate :  { 
      expirationTimerUpdate :  { 
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -923,8 +919,7 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					      }  else  { 
      }  else  { 
 
			
		
	
		
		
			
				
					
					        message  =  await  this . addSingleIncomingMessage ( { 
        message  =  await  this . addSingleIncomingMessage ( { 
 
			
		
	
		
		
			
				
					
					          . . . commonAttributes , 
          . . . commonAttributes , 
 
			
		
	
		
		
			
				
					
					          // Even though this isn't reflected to the user, we want to place the last seen
 
          // Even though this isn't reflected to the user, we want to place the last seen indicator above it. We set it to 'unread' to trigger that placement.
 
 
			
				
				
			
		
	
		
		
			
				
					
					          //   indicator above it. We set it to 'unread' to trigger that placement.
 
 
			
		
	
		
		
	
		
		
			
				
					
					          unread : READ_MESSAGE_STATE.unread , 
          unread : READ_MESSAGE_STATE.unread , 
 
			
		
	
		
		
			
				
					
					          source , 
          source , 
 
			
		
	
		
		
			
				
					
					          sent_at : timestamp , 
          sent_at : timestamp , 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -977,7 +972,6 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					    } ; 
    } ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    if  ( this . isMe ( ) )  { 
    if  ( this . isMe ( ) )  { 
 
			
		
	
		
		
			
				
					
					      // TODO Check that the args are correct
 
 
			
		
	
		
		
			
				
					
					      if  ( expireUpdate . expirationType  ===  'deleteAfterRead' )  { 
      if  ( expireUpdate . expirationType  ===  'deleteAfterRead' )  { 
 
			
		
	
		
		
			
				
					
					        window . log . info ( 'Note to Self messages cannot be delete after read!' ) ; 
        window . log . info ( 'Note to Self messages cannot be delete after read!' ) ; 
 
			
		
	
		
		
			
				
					
					        return  true ; 
        return  true ; 
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -985,11 +979,6 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      const  expirationTimerMessage  =  new  ExpirationTimerUpdateMessage ( expireUpdate ) ; 
      const  expirationTimerMessage  =  new  ExpirationTimerUpdateMessage ( expireUpdate ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      // window.log.debug(
 
 
			
		
	
		
		
			
				
					
					      //   `WIP: updateExpireTimer() isMe() expirationTimerMessage`,
 
 
			
		
	
		
		
			
				
					
					      //   JSON.stringify(expirationTimerMessage)
 
 
			
		
	
		
		
			
				
					
					      // );
 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      await  message ? . sendSyncMessageOnly ( expirationTimerMessage ) ; 
      await  message ? . sendSyncMessageOnly ( expirationTimerMessage ) ; 
 
			
		
	
		
		
			
				
					
					      return  true ; 
      return  true ; 
 
			
		
	
		
		
			
				
					
					    } 
    } 
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -997,11 +986,6 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					    if  ( this . isPrivate ( ) )  { 
    if  ( this . isPrivate ( ) )  { 
 
			
		
	
		
		
			
				
					
					      const  expirationTimerMessage  =  new  ExpirationTimerUpdateMessage ( expireUpdate ) ; 
      const  expirationTimerMessage  =  new  ExpirationTimerUpdateMessage ( expireUpdate ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      // window.log.debug(
 
 
			
		
	
		
		
			
				
					
					      //   `WIP: updateExpireTimer() isPrivate() expirationTimerMessage`,
 
 
			
		
	
		
		
			
				
					
					      //   JSON.stringify(expirationTimerMessage)
 
 
			
		
	
		
		
			
				
					
					      // );
 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      const  pubkey  =  new  PubKey ( this . get ( 'id' ) ) ; 
      const  pubkey  =  new  PubKey ( this . get ( 'id' ) ) ; 
 
			
		
	
		
		
			
				
					
					      await  getMessageQueue ( ) . sendToPubKey ( 
      await  getMessageQueue ( ) . sendToPubKey ( 
 
			
		
	
		
		
			
				
					
					        pubkey , 
        pubkey , 
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -1018,11 +1002,6 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      const  expirationTimerMessage  =  new  ExpirationTimerUpdateMessage ( expireUpdateForGroup ) ; 
      const  expirationTimerMessage  =  new  ExpirationTimerUpdateMessage ( expireUpdateForGroup ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      // window.log.debug(
 
 
			
		
	
		
		
			
				
					
					      //   `WIP: updateExpireTimer() isClosedGroup() expirationTimerMessage`,
 
 
			
		
	
		
		
			
				
					
					      //   JSON.stringify(expirationTimerMessage)
 
 
			
		
	
		
		
			
				
					
					      // );
 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      await  getMessageQueue ( ) . sendToGroup ( { 
      await  getMessageQueue ( ) . sendToGroup ( { 
 
			
		
	
		
		
			
				
					
					        message : expirationTimerMessage , 
        message : expirationTimerMessage , 
 
			
		
	
		
		
			
				
					
					        namespace :  SnodeNamespaces . ClosedGroupMessage , 
        namespace :  SnodeNamespaces . ClosedGroupMessage , 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -1895,8 +1874,8 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      if  ( this . isPrivate ( ) )  { 
      if  ( this . isPrivate ( ) )  { 
 
			
		
	
		
		
			
				
					
					        if  ( this . isMe ( ) )  { 
        if  ( this . isMe ( ) )  { 
 
			
		
	
		
		
			
				
					
					          if  ( this . i sDisappearingMode( 'deleteAfterRead' ) )  { 
          if  ( this . matche sDisappearingMode( 'deleteAfterRead' ) )  { 
 
			
				
				
			
		
	
		
		
			
				
					
					            ; 
            th row n  ew Error ( 'No  te to Self disappearing messages m ust be deleteAte rSe nd')  ; 
 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					          } 
          } 
 
			
		
	
		
		
			
				
					
					          chatMessageParams . syncTarget  =  this . id ; 
          chatMessageParams . syncTarget  =  this . id ; 
 
			
		
	
		
		
			
				
					
					          const  chatMessageMe  =  new  VisibleMessage ( chatMessageParams ) ; 
          const  chatMessageMe  =  new  VisibleMessage ( chatMessageParams ) ; 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -1936,8 +1915,8 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					      } 
      } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      if  ( this . isClosedGroup ( ) )  { 
      if  ( this . isClosedGroup ( ) )  { 
 
			
		
	
		
		
			
				
					
					        if  ( this . i sDisappearingMode( 'deleteAfterRead' ) )  { 
        if  ( this . matche sDisappearingMode( 'deleteAfterRead' ) )  { 
 
			
				
				
			
		
	
		
		
			
				
					
					          return ; 
          throw new  Error ( 'Group disappearing messages must be deleteAterSend' )  ; 
 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					        } 
        } 
 
			
		
	
		
		
			
				
					
					        const  chatMessageMediumGroup  =  new  VisibleMessage ( chatMessageParams ) ; 
        const  chatMessageMediumGroup  =  new  VisibleMessage ( chatMessageParams ) ; 
 
			
		
	
		
		
			
				
					
					        const  closedGroupVisibleMessage  =  new  ClosedGroupVisibleMessage ( { 
        const  closedGroupVisibleMessage  =  new  ClosedGroupVisibleMessage ( { 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -2085,8 +2064,7 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					    const  readDetails  =  [ ] ; 
    const  readDetails  =  [ ] ; 
 
			
		
	
		
		
			
				
					
					    // eslint-disable-next-line no-restricted-syntax
 
    // eslint-disable-next-line no-restricted-syntax
 
 
			
		
	
		
		
			
				
					
					    for  ( const  nowRead  of  oldUnreadNowRead )  { 
    for  ( const  nowRead  of  oldUnreadNowRead )  { 
 
			
		
	
		
		
			
				
					
					      // eslint-disable-next-line no-await-in-loop
 
      nowRead . markMessageReadNoCommit ( readAt ) ; 
 
			
				
				
			
		
	
		
		
			
				
					
					      await  nowRead . markMessageReadNoCommit ( readAt ) ; 
 
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      const  validTimestamp  =  nowRead . get ( 'sent_at' )  ||  nowRead . get ( 'serverTimestamp' ) ; 
      const  validTimestamp  =  nowRead . get ( 'sent_at' )  ||  nowRead . get ( 'serverTimestamp' ) ; 
 
			
		
	
		
		
			
				
					
					      if  ( nowRead . get ( 'source' )  &&  validTimestamp  &&  isFinite ( validTimestamp ) )  { 
      if  ( nowRead . get ( 'source' )  &&  validTimestamp  &&  isFinite ( validTimestamp ) )  { 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -2365,7 +2343,7 @@ export class ConversationModel extends Backbone.Model<ConversationAttributes> {
 
			
		
	
		
		
			
				
					
					    return  [ ] ; 
    return  [ ] ; 
 
			
		
	
		
		
			
				
					
					  } 
  } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  private  i sDisappearingMode( mode : DisappearingMessageConversationModeType )  { 
  private  matche sDisappearingMode( mode : DisappearingMessageConversationModeType )  { 
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					    const  success  = 
    const  success  = 
 
			
		
	
		
		
			
				
					
					      mode  ===  'deleteAfterRead' 
      mode  ===  'deleteAfterRead' 
 
			
		
	
		
		
			
				
					
					        ?  this . getExpirationMode ( )  ===  'deleteAfterRead' 
        ?  this . getExpirationMode ( )  ===  'deleteAfterRead'