From 721f3302962882a94a936a74fd7909005fc42f44 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 17 Jan 2019 13:27:06 -0700 Subject: [PATCH] warm non-signal accounts cache in the background --- .../NewContactThreadViewController.m | 2 ++ SignalMessaging/Views/ContactsViewHelper.h | 3 +- SignalMessaging/Views/ContactsViewHelper.m | 29 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Signal/src/ViewControllers/NewContactThreadViewController.m b/Signal/src/ViewControllers/NewContactThreadViewController.m index 68db5e88e..912a52be8 100644 --- a/Signal/src/ViewControllers/NewContactThreadViewController.m +++ b/Signal/src/ViewControllers/NewContactThreadViewController.m @@ -278,6 +278,8 @@ NS_ASSUME_NONNULL_BEGIN { [super viewDidLoad]; + [self.contactsViewHelper warmNonSignalContactsCacheAsync]; + self.title = NSLocalizedString(@"MESSAGE_COMPOSEVIEW_TITLE", @""); } diff --git a/SignalMessaging/Views/ContactsViewHelper.h b/SignalMessaging/Views/ContactsViewHelper.h index 2e3483690..c4b73cb69 100644 --- a/SignalMessaging/Views/ContactsViewHelper.h +++ b/SignalMessaging/Views/ContactsViewHelper.h @@ -1,5 +1,5 @@ // -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// Copyright (c) 2019 Open Whisper Systems. All rights reserved. // NS_ASSUME_NONNULL_BEGIN @@ -70,6 +70,7 @@ NS_ASSUME_NONNULL_BEGIN - (NSArray *)signalAccountsMatchingSearchString:(NSString *)searchText; +- (void)warmNonSignalContactsCacheAsync; - (NSArray *)nonSignalContactsMatchingSearchString:(NSString *)searchText; - (void)presentContactViewControllerForRecipientId:(NSString *)recipientId diff --git a/SignalMessaging/Views/ContactsViewHelper.m b/SignalMessaging/Views/ContactsViewHelper.m index a351eecf9..229eb690e 100644 --- a/SignalMessaging/Views/ContactsViewHelper.m +++ b/SignalMessaging/Views/ContactsViewHelper.m @@ -263,8 +263,37 @@ NS_ASSUME_NONNULL_BEGIN }]]; } +- (void)warmNonSignalContactsCacheAsync +{ + OWSAssertIsOnMainThread(); + if (self.nonSignalContacts != nil) { + return; + } + + NSMutableSet *nonSignalContactSet = [NSMutableSet new]; + __block NSArray *nonSignalContacts; + + [OWSPrimaryStorage.dbReadConnection + asyncReadWithBlock:^(YapDatabaseReadTransaction *transaction) { + for (Contact *contact in self.contactsManager.allContactsMap.allValues) { + NSArray *signalRecipients = [contact signalRecipientsWithTransaction:transaction]; + if (signalRecipients.count < 1) { + [nonSignalContactSet addObject:contact]; + } + } + nonSignalContacts = [nonSignalContactSet.allObjects + sortedArrayUsingComparator:^NSComparisonResult(Contact *_Nonnull left, Contact *_Nonnull right) { + return [left.fullName compare:right.fullName]; + }]; + } + completionBlock:^{ + self.nonSignalContacts = nonSignalContacts; + }]; +} + - (nullable NSArray *)nonSignalContacts { + OWSAssertIsOnMainThread(); if (!_nonSignalContacts) { NSMutableSet *nonSignalContacts = [NSMutableSet new]; [OWSPrimaryStorage.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {