From 919fcf7ef191349024408b25eb8ab2104827d52e Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Fri, 9 Apr 2021 10:34:00 +1000 Subject: [PATCH] Mark existing contacts as trusted --- .../Migrations/ContactsMigration.swift | 60 ++++--------------- .../Migrations/OWSDatabaseMigrationRunner.m | 4 +- 2 files changed, 13 insertions(+), 51 deletions(-) diff --git a/SignalUtilitiesKit/Database/Migrations/ContactsMigration.swift b/SignalUtilitiesKit/Database/Migrations/ContactsMigration.swift index e78217c38..82ec5ead9 100644 --- a/SignalUtilitiesKit/Database/Migrations/ContactsMigration.swift +++ b/SignalUtilitiesKit/Database/Migrations/ContactsMigration.swift @@ -4,7 +4,7 @@ public class ContactsMigration : OWSDatabaseMigration { @objc class func migrationId() -> String { - return "112" + return "001" } override public func runUp(completion: @escaping OWSDatabaseMigrationCompletion) { @@ -12,56 +12,16 @@ public class ContactsMigration : OWSDatabaseMigration { } private func doMigrationAsync(completion: @escaping OWSDatabaseMigrationCompletion) { - var contacts: Set = [] - Storage.write(with: { transaction in - // Current user - if let profile = OWSUserProfile.fetch(uniqueId: kLocalProfileUniqueId, transaction: transaction), - let sessionID = TSAccountManager.sharedInstance().localNumber() { // Should always exist - let contact = Contact(sessionID: sessionID) - contact.name = profile.profileName - contact.profilePictureURL = profile.avatarUrlPath - contact.profilePictureFileName = profile.avatarFileName - contact.profilePictureEncryptionKey = profile.profileKey - contacts.insert(contact) - } - // One-on-one chats - TSContactThread.enumerateCollectionObjects(with: transaction) { object, _ in - guard let thread = object as? TSContactThread else { return } - let sessionID = thread.contactIdentifier() - let contact = Contact(sessionID: sessionID) - var profileOrNil: OWSUserProfile? = nil - if sessionID == getUserHexEncodedPublicKey() { - profileOrNil = OWSProfileManager.shared().getLocalUserProfile(with: transaction) - } else if let profile = OWSUserProfile.fetch(uniqueId: sessionID, transaction: transaction) { - profileOrNil = profile - } - if let profile = profileOrNil { - contact.name = profile.profileName - contact.profilePictureURL = profile.avatarUrlPath - contact.profilePictureFileName = profile.avatarFileName - contact.profilePictureEncryptionKey = profile.profileKey - } - contact.threadID = thread.uniqueId - contacts.insert(contact) + var contacts: [Contact] = [] + TSContactThread.enumerateCollectionObjects { object, _ in + guard let thread = object as? TSContactThread else { return } + let sessionID = thread.contactIdentifier() + if let contact = Storage.shared.getContact(with: sessionID) { + contact.isTrusted = true + contacts.append(contact) } - // Closed groups - TSGroupThread.enumerateCollectionObjects(with: transaction) { object, _ in - guard let thread = object as? TSGroupThread, thread.isClosedGroup else { return } - let memberSessionIDs = thread.groupModel.groupMemberIds - memberSessionIDs.forEach { memberSessionID in - guard !contacts.contains(where: { $0.sessionID == memberSessionID }) else { return } - let contact = Contact(sessionID: memberSessionID) - if let profile = OWSUserProfile.fetch(uniqueId: memberSessionID, transaction: transaction) { - contact.name = profile.profileName - contact.profilePictureURL = profile.avatarUrlPath - contact.profilePictureFileName = profile.avatarFileName - contact.profilePictureEncryptionKey = profile.profileKey - } - // At this point we know we don't have a one-on-one thread with this contact - contacts.insert(contact) - } - } - // Save + } + Storage.write(with: { transaction in contacts.forEach { contact in Storage.shared.setContact(contact, using: transaction) } diff --git a/SignalUtilitiesKit/Database/Migrations/OWSDatabaseMigrationRunner.m b/SignalUtilitiesKit/Database/Migrations/OWSDatabaseMigrationRunner.m index 14a981e03..fd8ea2d2c 100644 --- a/SignalUtilitiesKit/Database/Migrations/OWSDatabaseMigrationRunner.m +++ b/SignalUtilitiesKit/Database/Migrations/OWSDatabaseMigrationRunner.m @@ -25,7 +25,9 @@ NS_ASSUME_NONNULL_BEGIN // This should all migrations which do NOT qualify as safeBlockingMigrations: - (NSArray *)allMigrations { - return @[]; + return @[ + [SNContactsMigration new] + ]; } - (void)assumeAllExistingMigrationsRun