Update views that show contacts to reflect updates.

// FREEBIE
This commit is contained in:
Matthew Chen 2017-02-08 11:59:02 -05:00
parent c087c56b0c
commit adfbcc3e27
5 changed files with 99 additions and 34 deletions

View file

@ -15,8 +15,9 @@
static const NSUInteger ddLogLevel = DDLogLevelInfo;
#endif
#import "iOSVersions.h"
#import <SignalServiceKit/Asserts.h>
#import "iOSVersions.h"
#import "OWSDispatch.h"
#define SignalAlertView(title,msg) [[[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles:nil, nil] show]
#define SignalReportError [Pastelog reportErrorAndSubmitLogsWithAlertTitle:NSLocalizedString(@"ERROR_WAS_DETECTED_TITLE", @"") alertBody:NSLocalizedString(@"ERROR_WAS_DETECTED_SUBMIT", @"")];

View file

@ -8,6 +8,8 @@
NS_ASSUME_NONNULL_BEGIN
extern NSString *const OWSContactsManagerContactsDidChangeNotification;
@class UIFont;
/**

View file

@ -7,6 +7,8 @@
typedef BOOL (^ContactSearchBlock)(id, NSUInteger, BOOL *);
NSString *const OWSContactsManagerContactsDidChangeNotification = @"OWSContactsManagerContactsDidChangeNotification";
@interface OWSContactsManager ()
@property id addressBookReference;
@ -99,18 +101,26 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in
- (void)intersectContacts {
[[ContactsUpdater sharedUpdater] updateSignalContactIntersectionWithABContacts:self.allContacts
success:^{
DDLogInfo(@"%@ Successfully intersected contacts.", self.tag);
}
failure:^(NSError *error) {
DDLogWarn(@"%@ Failed to intersect contacts with error: %@. Rescheduling", self.tag, error);
success:^{
DDLogInfo(@"%@ Successfully intersected contacts.", self.tag);
[self fireContactsDidChange];
}
failure:^(NSError *error) {
DDLogWarn(@"%@ Failed to intersect contacts with error: %@. Rescheduling", self.tag, error);
[NSTimer scheduledTimerWithTimeInterval:60
target:self
selector:@selector(intersectContacts)
userInfo:nil
repeats:NO];
}];
}
[NSTimer scheduledTimerWithTimeInterval:60
target:self
selector:@selector(intersectContacts)
userInfo:nil
repeats:NO];
}];
- (void)fireContactsDidChange {
AssertIsOnMainThread();
[[NSNotificationCenter defaultCenter] postNotificationName:OWSContactsManagerContactsDidChangeNotification
object:nil];
}
- (void)pullLatestAddressBook {

View file

@ -77,6 +77,8 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie
_contactsManager = [Environment getCurrent].contactsManager;
_phoneNumberAccountSet = [NSMutableSet set];
[self observeNotifications];
return self;
}
@ -89,9 +91,28 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie
_contactsManager = [Environment getCurrent].contactsManager;
[self observeNotifications];
return self;
}
- (void)observeNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contactsDidChange:)
name:OWSContactsManagerContactsDidChangeNotification
object:nil];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)contactsDidChange:(NSNotification *)notification {
[self updateContacts];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.navigationController.navigationBar setTranslucent:NO];
@ -612,32 +633,36 @@ NSString *const MessageComposeTableViewControllerCellContact = @"ContactTableVie
- (void)refreshContacts {
[[ContactsUpdater sharedUpdater] updateSignalContactIntersectionWithABContacts:self.contactsManager.allContacts
success:^{
self.contacts = self.contactsManager.signalContacts;
dispatch_async(dispatch_get_main_queue(), ^{
[self updateSearchResultsForSearchController:self.searchController];
[self.tableView reloadData];
[self updateAfterRefreshTry];
});
}
failure:^(NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alert =
[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"ERROR_WAS_DETECTED_TITLE", @"")
message:NSLocalizedString(@"TIMEOUT_CONTACTS_DETAIL", @"")
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", @"")
otherButtonTitles:nil];
[alert show];
[self updateAfterRefreshTry];
});
}];
success:^{
[self updateContacts];
}
failure:^(NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alert =
[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"ERROR_WAS_DETECTED_TITLE", @"")
message:NSLocalizedString(@"TIMEOUT_CONTACTS_DETAIL", @"")
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", @"")
otherButtonTitles:nil];
[alert show];
[self updateAfterRefreshTry];
});
}];
if ([self.contacts count] == 0) {
[self showLoadingBackgroundView:YES];
}
}
- (void)updateContacts {
self.contacts = self.contactsManager.signalContacts;
dispatch_async(dispatch_get_main_queue(), ^{
[self updateSearchResultsForSearchController:self.searchController];
[self.tableView reloadData];
[self updateAfterRefreshTry];
});
}
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(nullable id)sender

View file

@ -68,6 +68,33 @@ static NSString *const kUnwindToMessagesViewSegue = @"UnwindToMessagesViewSegue"
contactsUpdater:[Environment getCurrent].contactsUpdater];
_contactsManager = [Environment getCurrent].contactsManager;
[self observeNotifications];
}
- (void)observeNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contactsDidChange:)
name:OWSContactsManagerContactsDidChangeNotification
object:nil];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)contactsDidChange:(NSNotification *)notification {
[self updateContacts];
}
- (void)updateContacts {
AssertIsOnMainThread();
contacts = self.contactsManager.signalContacts;
[self.tableView reloadData];
}
- (void)configWithThread:(TSGroupThread *)gThread {
@ -78,7 +105,7 @@ static NSString *const kUnwindToMessagesViewSegue = @"UnwindToMessagesViewSegue"
[super viewDidLoad];
[self.navigationController.navigationBar setTranslucent:NO];
contacts = [Environment getCurrent].contactsManager.signalContacts;
contacts = self.contactsManager.signalContacts;
self.tableView.tableHeaderView.frame = CGRectMake(0, 0, 400, 44);