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.
		
		
		
		
		
			
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Swift
		
	
| //
 | |
| //  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | |
| //
 | |
| 
 | |
| import Foundation
 | |
| import SignalServiceKit
 | |
| 
 | |
| @objc
 | |
| public class OWS114RemoveDynamicInteractions: OWSDatabaseMigration {
 | |
| 
 | |
|     // MARK: - Dependencies
 | |
| 
 | |
|     // MARK: -
 | |
| 
 | |
|     // Increment a similar constant for each migration.
 | |
|     @objc
 | |
|     class func migrationId() -> String {
 | |
|         return "114"
 | |
|     }
 | |
| 
 | |
|     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 {
 | |
|             self.dbReadWriteConnection().readWrite { transaction in
 | |
|                 guard let dbView = TSDatabaseView.threadSpecialMessagesDatabaseView(transaction) as? YapDatabaseViewTransaction else {
 | |
|                     owsFailDebug("Couldn't load db view.")
 | |
|                     return
 | |
|                 }
 | |
| 
 | |
|                 var interactionsToDelete = [TSInteraction]()
 | |
|                 let groupIds = dbView.allGroups()
 | |
|                 for groupId in groupIds {
 | |
|                     dbView.enumerateKeysAndObjects(inGroup: groupId) { (_: String, _: String, object: Any, _: UInt, _: UnsafeMutablePointer<ObjCBool>) in
 | |
|                         guard let interaction = object as? TSInteraction else {
 | |
|                             owsFailDebug("Invalid database entity: \(type(of: object)).")
 | |
|                             return
 | |
|                         }
 | |
|                         guard interaction.isDynamicInteraction() else {
 | |
|                             return
 | |
|                         }
 | |
|                         interactionsToDelete.append(interaction)
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 for interaction in interactionsToDelete {
 | |
|                     Logger.debug("Cleaning up interaction: \(type(of: interaction)).")
 | |
|                     interaction.remove(with: transaction)
 | |
|                 }
 | |
| 
 | |
|                 self.save(with: transaction)
 | |
|             }
 | |
| 
 | |
|             completion()
 | |
|         }
 | |
|     }
 | |
| }
 |