@ -92,7 +92,6 @@ import org.thoughtcrime.securesms.mms.PartAuthority
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  org.thoughtcrime.securesms.util.ConfigurationMessageUtilities 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  org.thoughtcrime.securesms.util.SessionMetaProtocol 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  java.security.MessageDigest 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  kotlin.time.Duration.Companion.days 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  network.loki.messenger.libsession_util.util.Contact  as  LibSessionContact 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				private  const  val  TAG  =  " Storage " 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -767,13 +766,36 @@ open class Storage(
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    override  fun  markAsSent ( timestamp :  Long ,  author :  String )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  database  =  DatabaseComponent . get ( context ) . mmsSmsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  messageRecord  =  database . getMessageFor ( timestamp ,  author )  ?:  return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  messageRecord  =  database . getSentMessageFor ( timestamp ,  author ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( messageRecord  ==  null )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            Log . w ( TAG ,  " Failed to retrieve local message record in Storage.markAsSent - aborting. " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( messageRecord . isMms )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            val  mmsDatabase  =  DatabaseComponent . get ( context ) . mmsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            mmsDatabase . markAsSent ( messageRecord . getId ( ) ,  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            DatabaseComponent . get ( context ) . mmsDatabase ( ) . markAsSent ( messageRecord . getId ( ) ,  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        }  else  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            val  smsDatabase  =  DatabaseComponent . get ( context ) . smsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            smsDatabase . markAsSent ( messageRecord . getId ( ) ,  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            DatabaseComponent . get ( context ) . smsDatabase ( ) . markAsSent ( messageRecord . getId ( ) ,  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    // Method that marks a message as sent in Communities (only!) - where the server modifies the 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    // message timestamp and as such we cannot use that to identify the local message. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    override  fun  markAsSentToCommunity ( threadId :  Long ,  messageID :  Long )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  database  =  DatabaseComponent . get ( context ) . mmsSmsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  message  =  database . getLastSentMessageRecordFromSender ( threadId ,  TextSecurePreferences . getLocalNumber ( context ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        // Ensure we can find the local message.. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( message  ==  null )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            Log . w ( TAG ,  " Could not find local message in Storage.markAsSentToCommunity - aborting. " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        // ..and mark as sent if found. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( message . isMms )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            DatabaseComponent . get ( context ) . mmsDatabase ( ) . markAsSent ( message . getId ( ) ,  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        }  else  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            DatabaseComponent . get ( context ) . smsDatabase ( ) . markAsSent ( message . getId ( ) ,  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -808,7 +830,11 @@ open class Storage(
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    override  fun  markUnidentified ( timestamp :  Long ,  author :  String )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  database  =  DatabaseComponent . get ( context ) . mmsSmsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  messageRecord  =  database . getMessageFor ( timestamp ,  author )  ?:  return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  messageRecord  =  database . getMessageFor ( timestamp ,  author ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( messageRecord  ==  null )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            Log . w ( TAG ,  " Could not identify message with timestamp:  $timestamp  from author:  $author " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( messageRecord . isMms )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            val  mmsDatabase  =  DatabaseComponent . get ( context ) . mmsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            mmsDatabase . markUnidentified ( messageRecord . getId ( ) ,  true ) 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -818,6 +844,26 @@ open class Storage(
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    // Method that marks a message as unidentified in Communities (only!) - where the server 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    // modifies the message timestamp and as such we cannot use that to identify the local message. 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    override  fun  markUnidentifiedInCommunity ( threadId :  Long ,  messageId :  Long )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  database  =  DatabaseComponent . get ( context ) . mmsSmsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  message  =  database . getLastSentMessageRecordFromSender ( threadId ,  TextSecurePreferences . getLocalNumber ( context ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        // Check to ensure the message exists 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( message  ==  null )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            Log . w ( TAG ,  " Could not find local message in Storage.markUnidentifiedInCommunity - aborting. " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        // Mark it as unidentified if we found the message successfully 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( message . isMms )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            DatabaseComponent . get ( context ) . mmsDatabase ( ) . markUnidentified ( message . getId ( ) ,  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        }  else  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            DatabaseComponent . get ( context ) . smsDatabase ( ) . markUnidentified ( message . getId ( ) ,  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    override  fun  markAsSentFailed ( timestamp :  Long ,  author :  String ,  error :  Exception )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  database  =  DatabaseComponent . get ( context ) . mmsSmsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  messageRecord  =  database . getMessageFor ( timestamp ,  author )  ?:  return 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -971,7 +1017,10 @@ open class Storage(
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  infoMessage  =  OutgoingGroupMediaMessage ( recipient ,  updateData ,  groupID ,  null ,  sentTimestamp ,  0 ,  0 ,  true ,  null ,  listOf ( ) ,  listOf ( ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  mmsDB  =  DatabaseComponent . get ( context ) . mmsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  mmsSmsDB  =  DatabaseComponent . get ( context ) . mmsSmsDatabase ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( mmsSmsDB . getMessageFor ( sentTimestamp ,  userPublicKey )  !=  null )  return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        if  ( mmsSmsDB . getMessageFor ( sentTimestamp ,  userPublicKey )  !=  null )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            Log . w ( TAG ,  " Bailing from insertOutgoingInfoMessage because we believe the message has already been sent! " ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        val  infoMessageID  =  mmsDB . insertMessageOutbox ( infoMessage ,  threadID ,  false ,  null ,  runThreadUpdate  =  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        mmsDB . markAsSent ( infoMessageID ,  true ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    }