| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -54,49 +54,6 @@ internal extension SessionUtil {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            calledFromConfigHandling: true
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        // Update the 'Note to Self' disappearing messages configuration
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        var contact: contacts_contact = contacts_contact()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        let contactIterator: UnsafeMutablePointer<contacts_iterator> = contacts_iterator_new(conf)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        var config: DisappearingMessagesConfiguration?
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        while !contacts_iterator_done(contactIterator, &contact) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let contactId: String = String(cString: withUnsafeBytes(of: contact.session_id) { [UInt8]($0) }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                .map { CChar($0) }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                .nullTerminated()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            guard contactId == userPublicKey else { continue }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            config = DisappearingMessagesConfiguration(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                threadId: contactId,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                isEnabled: contact.exp_seconds > 0,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                durationSeconds: TimeInterval(contact.exp_seconds),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                type: DisappearingMessagesConfiguration.DisappearingMessageType(sessionUtilType: contact.exp_mode),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                lastChangeTimestampMs: Int64(latestConfigUpdateSentTimestamp)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            break
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        contacts_iterator_free(contactIterator) // Need to free the iterator
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if let targetConfig: DisappearingMessagesConfiguration = config {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let localConfig: DisappearingMessagesConfiguration = try DisappearingMessagesConfiguration
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                .fetchOne(db, id: userPublicKey)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                .defaulting(to: DisappearingMessagesConfiguration.defaultWith(userPublicKey))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                let remoteLastChangeTimestampMs = targetConfig.lastChangeTimestampMs,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                let localLastChangeTimestampMs = localConfig.lastChangeTimestampMs,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                remoteLastChangeTimestampMs > localLastChangeTimestampMs
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                _ = try localConfig.with(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    isEnabled: targetConfig.isEnabled,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    durationSeconds: targetConfig.durationSeconds,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    type: targetConfig.type,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    lastChangeTimestampMs: targetConfig.lastChangeTimestampMs
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                ).save(db)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        // Update the 'Note to Self' visibility and priority
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        let threadInfo: PriorityVisibilityInfo? = try? SessionThread
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            .filter(id: userPublicKey)
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -156,6 +113,33 @@ internal extension SessionUtil {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        // Update the 'Note to Self' disappearing messages configuration
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        let targetExpiry: Int32 = user_profile_get_nts_expiry(conf)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        let targetIsEnable: Bool = targetExpiry > 0
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        let targetConfig: DisappearingMessagesConfiguration = DisappearingMessagesConfiguration(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            threadId: userPublicKey,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            isEnabled: targetIsEnable,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            durationSeconds: TimeInterval(targetExpiry),
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            type: targetIsEnable ? .disappearAfterSend : .unknown,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            lastChangeTimestampMs: Int64(latestConfigUpdateSentTimestamp)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        )
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        let localConfig: DisappearingMessagesConfiguration = try DisappearingMessagesConfiguration
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            .fetchOne(db, id: userPublicKey)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            .defaulting(to: DisappearingMessagesConfiguration.defaultWith(userPublicKey))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let remoteLastChangeTimestampMs = targetConfig.lastChangeTimestampMs,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let localLastChangeTimestampMs = localConfig.lastChangeTimestampMs,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            remoteLastChangeTimestampMs > localLastChangeTimestampMs
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            _ = try localConfig.with(
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                isEnabled: targetConfig.isEnabled,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                durationSeconds: targetConfig.durationSeconds,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                type: targetConfig.type,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                lastChangeTimestampMs: targetConfig.lastChangeTimestampMs
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            ).save(db)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        // Create a contact for the current user if needed (also force-approve the current user
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        // in case the account got into a weird state or restored directly from a migration)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        let userContact: Contact = Contact.fetchOrCreate(db, id: userPublicKey)
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -203,20 +187,8 @@ internal extension SessionUtil {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            user_profile_set_nts_priority(conf, priority)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        // TODO: Make this into LibSession like user_profile_set_nts_priority()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let config: DisappearingMessagesConfiguration = disappearingMessagesConfig,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let exp_mode: CONVO_EXPIRATION_MODE = config.type?.toLibSession()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            var userPublicKey: String = getUserHexEncodedPublicKey()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            var userContact: contacts_contact = contacts_contact()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            guard contacts_get_or_construct(conf, &userContact, &userPublicKey) else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                SNLog("Unable to upsert note-to-self to SessionUtil: \(SessionUtil.lastError(conf))")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                throw SessionUtilError.getOrConstructFailedUnexpectedly
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            userContact.exp_mode = exp_mode
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            userContact.exp_seconds = Int32(config.durationSeconds)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            contacts_set(conf, &userContact)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if let config: DisappearingMessagesConfiguration = disappearingMessagesConfig {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            user_profile_set_nts_expiry(conf, Int32(config.durationSeconds))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |