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.
		
		
		
		
		
			
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Swift
		
	
| //
 | |
| //  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | |
| //
 | |
| 
 | |
| import Foundation
 | |
| import SignalServiceKit
 | |
| 
 | |
| @objc
 | |
| public class OWS113MultiAttachmentMediaMessages: OWSDatabaseMigration {
 | |
| 
 | |
|     // MARK: - Dependencies
 | |
| 
 | |
|     // MARK: -
 | |
| 
 | |
|     // Increment a similar constant for each migration.
 | |
|     @objc
 | |
|     class func migrationId() -> String {
 | |
|         // NOTE: that we use .1 since there was a bug in the logic to
 | |
|         //       set albumMessageId.
 | |
|         return "113.1"
 | |
|     }
 | |
| 
 | |
|     override public func runUp(completion: @escaping OWSDatabaseMigrationCompletion) {
 | |
|         Logger.debug("")
 | |
|         BenchAsync(title: "\(self.logTag)") { (benchCompletion) in
 | |
|             self.doMigrationAsync(completion: {
 | |
|                 benchCompletion()
 | |
|                 completion()
 | |
|             })
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private func doMigrationAsync(completion : @escaping OWSDatabaseMigrationCompletion) {
 | |
|         DispatchQueue.global().async {
 | |
|             var legacyAttachments: [(attachmentId: String, messageId: String)] = []
 | |
| 
 | |
|             self.dbReadWriteConnection().read { transaction in
 | |
|                 TSMessage.enumerateCollectionObjects(with: transaction) { object, _ in
 | |
|                     autoreleasepool {
 | |
|                         guard let message: TSMessage = object as? TSMessage else {
 | |
|                             Logger.debug("ignoring message with type: \(object)")
 | |
|                             return
 | |
|                         }
 | |
| 
 | |
|                         guard let messageId = message.uniqueId else {
 | |
|                             owsFailDebug("messageId was unexpectedly nil")
 | |
|                             return
 | |
|                         }
 | |
| 
 | |
|                         for attachmentId in message.attachmentIds {
 | |
|                             legacyAttachments.append((attachmentId: attachmentId as! String, messageId: messageId))
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             self.dbReadWriteConnection().readWrite { transaction in
 | |
|                 for (attachmentId, messageId) in legacyAttachments {
 | |
|                     autoreleasepool {
 | |
|                         guard let attachment = TSAttachment.fetch(uniqueId: attachmentId, transaction: transaction) else {
 | |
|                             Logger.warn("missing attachment for messageId: \(messageId)")
 | |
|                             return
 | |
|                         }
 | |
| 
 | |
|                         attachment.migrateAlbumMessageId(messageId)
 | |
|                         attachment.save(with: transaction)
 | |
|                     }
 | |
|                 }
 | |
|                 self.save(with: transaction)
 | |
|             }
 | |
| 
 | |
|             completion()
 | |
|         }
 | |
|     }
 | |
| }
 |