|
|
|
@ -207,11 +207,21 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in
|
|
|
|
|
NSMutableDictionary<NSString *, SignalAccount *> *signalAccountMap = [NSMutableDictionary new];
|
|
|
|
|
NSMutableArray<SignalAccount *> *signalAccounts = [NSMutableArray new];
|
|
|
|
|
NSArray<Contact *> *contacts = self.allContacts;
|
|
|
|
|
|
|
|
|
|
// We use a transaction only to load the SignalRecipients for each contact,
|
|
|
|
|
// in order to avoid database deadlock.
|
|
|
|
|
NSMutableDictionary<NSString *, NSArray<SignalRecipient *> *> *contactIdToSignalRecipientsMap =
|
|
|
|
|
[NSMutableDictionary new];
|
|
|
|
|
[[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
|
|
|
|
|
for (Contact *contact in contacts) {
|
|
|
|
|
NSArray<SignalRecipient *> *signalRecipients = [contact signalRecipientsWithTransaction:transaction];
|
|
|
|
|
for (SignalRecipient *signalRecipient in
|
|
|
|
|
[signalRecipients sortedArrayUsingSelector:@selector(compare:)]) {
|
|
|
|
|
contactIdToSignalRecipientsMap[contact.uniqueId] = signalRecipients;
|
|
|
|
|
}
|
|
|
|
|
}];
|
|
|
|
|
|
|
|
|
|
for (Contact *contact in contacts) {
|
|
|
|
|
NSArray<SignalRecipient *> *signalRecipients = contactIdToSignalRecipientsMap[contact.uniqueId];
|
|
|
|
|
for (SignalRecipient *signalRecipient in [signalRecipients sortedArrayUsingSelector:@selector(compare:)]) {
|
|
|
|
|
SignalAccount *signalAccount = [[SignalAccount alloc] initWithSignalRecipient:signalRecipient];
|
|
|
|
|
signalAccount.contact = contact;
|
|
|
|
|
if (signalRecipients.count > 1) {
|
|
|
|
@ -227,7 +237,6 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in
|
|
|
|
|
[signalAccounts addObject:signalAccount];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}];
|
|
|
|
|
|
|
|
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
|
|
|
self.signalAccountMap = [signalAccountMap copy];
|
|
|
|
|