mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			53 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			53 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Swift
		
	
| // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
 | |
| 
 | |
| import Foundation
 | |
| import GRDB
 | |
| import SessionUtilitiesKit
 | |
| 
 | |
| extension MessageReceiver {
 | |
|     internal static func handleExpirationTimerUpdate(_ db: Database, message: ExpirationTimerUpdate) throws {
 | |
|         // Get the target thread
 | |
|         guard
 | |
|             let targetId: String = MessageReceiver.threadInfo(db, message: message, openGroupId: nil)?.id,
 | |
|             let sender: String = message.sender,
 | |
|             let thread: SessionThread = try? SessionThread.fetchOne(db, id: targetId)
 | |
|         else { return }
 | |
|         
 | |
|         // Update the configuration
 | |
|         //
 | |
|         // Note: Messages which had been sent during the previous configuration will still
 | |
|         // use it's settings (so if you enable, send a message and then disable disappearing
 | |
|         // message then the message you had sent will still disappear)
 | |
|         let config: DisappearingMessagesConfiguration = try thread.disappearingMessagesConfiguration
 | |
|             .fetchOne(db)
 | |
|             .defaulting(to: DisappearingMessagesConfiguration.defaultWith(thread.id))
 | |
|             .with(
 | |
|                 // If there is no duration then we should disable the expiration timer
 | |
|                 isEnabled: ((message.duration ?? 0) > 0),
 | |
|                 durationSeconds: (
 | |
|                     message.duration.map { TimeInterval($0) } ??
 | |
|                     DisappearingMessagesConfiguration.defaultDuration
 | |
|                 )
 | |
|             )
 | |
|         
 | |
|         // Add an info message for the user
 | |
|         _ = try Interaction(
 | |
|             serverHash: nil, // Intentionally null so sync messages are seen as duplicates
 | |
|             threadId: thread.id,
 | |
|             authorId: sender,
 | |
|             variant: .infoDisappearingMessagesUpdate,
 | |
|             body: config.messageInfoString(
 | |
|                 with: (sender != getUserHexEncodedPublicKey(db) ?
 | |
|                     Profile.displayName(db, id: sender) :
 | |
|                     nil
 | |
|                 )
 | |
|             ),
 | |
|             timestampMs: Int64(message.sentTimestamp ?? 0)   // Default to `0` if not set
 | |
|         ).inserted(db)
 | |
|         
 | |
|         // Finally save the changes to the DisappearingMessagesConfiguration (If it's a duplicate
 | |
|         // then the interaction unique constraint will prevent the code from getting here)
 | |
|         try config.save(db)
 | |
|     }
 | |
| }
 |