diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 1a71995064..379ff523ea 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -291,6 +291,10 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { selector:@selector(yapDatabaseModified:) name:YapDatabaseModifiedNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(yapDatabaseModified:) + name:YapDatabaseModifiedExternallyNotification + object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification diff --git a/Signal/src/ViewControllers/HomeViewController.m b/Signal/src/ViewControllers/HomeViewController.m index 9e96251fce..1f050d0d69 100644 --- a/Signal/src/ViewControllers/HomeViewController.m +++ b/Signal/src/ViewControllers/HomeViewController.m @@ -136,6 +136,10 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState }; selector:@selector(yapDatabaseModified:) name:YapDatabaseModifiedNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(yapDatabaseModified:) + name:YapDatabaseModifiedExternallyNotification + object:nil]; } - (void)dealloc diff --git a/Signal/src/ViewControllers/OWSLinkedDevicesTableViewController.m b/Signal/src/ViewControllers/OWSLinkedDevicesTableViewController.m index 1ff14c2b35..1c3d41dcd0 100644 --- a/Signal/src/ViewControllers/OWSLinkedDevicesTableViewController.m +++ b/Signal/src/ViewControllers/OWSLinkedDevicesTableViewController.m @@ -66,7 +66,10 @@ int const OWSLinkedDevicesTableViewControllerSectionAddDevice = 1; selector:@selector(yapDatabaseModified:) name:YapDatabaseModifiedNotification object:self.dbConnection.database]; - + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(yapDatabaseModified:) + name:YapDatabaseModifiedExternallyNotification + object:self.dbConnection.database]; self.refreshControl = [UIRefreshControl new]; [self.refreshControl addTarget:self action:@selector(refreshDevices) forControlEvents:UIControlEventValueChanged]; diff --git a/Signal/src/ViewControllers/ThreadViewHelper.m b/Signal/src/ViewControllers/ThreadViewHelper.m index f0aa727f0f..5af480c06e 100644 --- a/Signal/src/ViewControllers/ThreadViewHelper.m +++ b/Signal/src/ViewControllers/ThreadViewHelper.m @@ -72,6 +72,10 @@ NS_ASSUME_NONNULL_BEGIN selector:@selector(yapDatabaseModified:) name:YapDatabaseModifiedNotification object:database]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(yapDatabaseModified:) + name:YapDatabaseModifiedExternallyNotification + object:database]; } return _uiDatabaseConnection; } diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index b812e5f00c..b8f716f975 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -125,6 +125,10 @@ NS_ASSUME_NONNULL_BEGIN selector:@selector(yapDatabaseModified:) name:YapDatabaseModifiedNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(yapDatabaseModified:) + name:YapDatabaseModifiedExternallyNotification + object:nil]; } - (void)yapDatabaseModified:(NSNotification *)notification diff --git a/SignalServiceKit/src/Storage/TSDatabaseView.h b/SignalServiceKit/src/Storage/TSDatabaseView.h index f22d9f80aa..19a81af670 100644 --- a/SignalServiceKit/src/Storage/TSDatabaseView.h +++ b/SignalServiceKit/src/Storage/TSDatabaseView.h @@ -25,6 +25,8 @@ extern NSString *const TSSecondaryDevicesDatabaseViewExtensionName; // This method can be called from any thread. + (BOOL)hasPendingViewRegistrations; ++ (void)registerCrossProcessNotifier; + // This method must be called _AFTER_ registerThreadInteractionsDatabaseView. + (void)registerThreadDatabaseView; diff --git a/SignalServiceKit/src/Storage/TSDatabaseView.m b/SignalServiceKit/src/Storage/TSDatabaseView.m index 1969b3b233..77f81caf36 100644 --- a/SignalServiceKit/src/Storage/TSDatabaseView.m +++ b/SignalServiceKit/src/Storage/TSDatabaseView.m @@ -11,6 +11,7 @@ #import "TSOutgoingMessage.h" #import "TSStorageManager.h" #import "TSThread.h" +#import #import NSString *const kNSNotificationName_DatabaseViewRegistrationComplete = @@ -88,6 +89,15 @@ NSString *const TSSecondaryDevicesDatabaseViewExtensionName = @"TSSecondaryDevic } } ++ (void)registerCrossProcessNotifier +{ + // I don't think the identifier and name of this extension matter for our purposes, + // so long as they don't conflict with any other extension names. + YapDatabaseExtension *extension = + [[YapDatabaseCrossProcessNotification alloc] initWithIdentifier:@"SignalCrossProcessNotifier"]; + [[TSStorageManager sharedManager].database registerExtension:extension withName:@"SignalCrossProcessNotifier"]; +} + + (void)registerMessageDatabaseViewWithName:(NSString *)viewName viewGrouping:(YapDatabaseViewGrouping *)viewGrouping version:(NSString *)version diff --git a/SignalServiceKit/src/Storage/TSStorageManager.m b/SignalServiceKit/src/Storage/TSStorageManager.m index 57ae4d62f2..b1877cb59b 100644 --- a/SignalServiceKit/src/Storage/TSStorageManager.m +++ b/SignalServiceKit/src/Storage/TSStorageManager.m @@ -310,6 +310,7 @@ void setDatabaseInitialized() - (void)setupDatabaseWithSafeBlockingMigrations:(void (^_Nonnull)())safeBlockingMigrationsBlock { // Synchronously register extensions which are essential for views. + [TSDatabaseView registerCrossProcessNotifier]; [TSDatabaseView registerThreadInteractionsDatabaseView]; [TSDatabaseView registerThreadDatabaseView]; [TSDatabaseView registerUnreadDatabaseView];