From 22109d719b602b33e5bf1b7525818c559826a349 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 15 Jun 2017 15:36:21 -0400 Subject: [PATCH] Respond to CR. // FREEBIE --- src/Messages/OWSDisappearingMessagesFinder.h | 5 ++-- src/Messages/OWSDisappearingMessagesFinder.m | 18 +++++++-------- src/Messages/OWSDisappearingMessagesJob.m | 24 +++++++++++++++----- src/Storage/TSDatabaseView.h | 4 ++-- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/Messages/OWSDisappearingMessagesFinder.h b/src/Messages/OWSDisappearingMessagesFinder.h index 5dccfeba0..c7e3e0909 100644 --- a/src/Messages/OWSDisappearingMessagesFinder.h +++ b/src/Messages/OWSDisappearingMessagesFinder.h @@ -8,15 +8,14 @@ NS_ASSUME_NONNULL_BEGIN @class TSMessage; @class TSThread; @class YapDatabaseReadTransaction; -@class YapDatabaseReadWriteTransaction; @interface OWSDisappearingMessagesFinder : NSObject - (void)enumerateExpiredMessagesWithBlock:(void (^_Nonnull)(TSMessage *message))block - transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction; + transaction:(YapDatabaseReadTransaction *)transaction; - (void)enumerateUnstartedExpiringMessagesInThread:(TSThread *)thread block:(void (^_Nonnull)(TSMessage *message))block - transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction; + transaction:(YapDatabaseReadTransaction *)transaction; /** * @return diff --git a/src/Messages/OWSDisappearingMessagesFinder.m b/src/Messages/OWSDisappearingMessagesFinder.m index 7590ae8c4..2c65b097f 100644 --- a/src/Messages/OWSDisappearingMessagesFinder.m +++ b/src/Messages/OWSDisappearingMessagesFinder.m @@ -21,7 +21,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess @implementation OWSDisappearingMessagesFinder - (NSArray *)fetchUnstartedExpiringMessageIdsInThread:(TSThread *)thread - transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction + transaction:(YapDatabaseReadTransaction *_Nonnull)transaction { OWSAssert(transaction); @@ -41,7 +41,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess return [messageIds copy]; } -- (NSArray *)fetchExpiredMessageIdsWithTransaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction +- (NSArray *)fetchExpiredMessageIdsWithTransaction:(YapDatabaseReadTransaction *_Nonnull)transaction { OWSAssert(transaction); @@ -63,7 +63,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess return [messageIds copy]; } -- (nullable NSNumber *)nextExpirationTimestampWithTransaction:(YapDatabaseReadTransaction *_Nonnull)transaction +- (nullable NSNumber *)nextExpirationTimestampWithTransaction:(YapDatabaseReadTransaction *)transaction { OWSAssert(transaction); @@ -89,7 +89,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess - (void)enumerateUnstartedExpiringMessagesInThread:(TSThread *)thread block:(void (^_Nonnull)(TSMessage *message))block - transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction + transaction:(YapDatabaseReadTransaction *)transaction { OWSAssert(transaction); @@ -109,13 +109,13 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess * We don't want to instantiate potentially many messages at once. */ - (NSArray *)fetchUnstartedExpiringMessagesInThread:(TSThread *)thread - transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction + transaction:(YapDatabaseReadTransaction *)transaction { OWSAssert(transaction); NSMutableArray *messages = [NSMutableArray new]; [self enumerateUnstartedExpiringMessagesInThread:thread - block:^(TSMessage *_Nonnull message) { + block:^(TSMessage *message) { [messages addObject:message]; } transaction:transaction]; @@ -125,7 +125,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess - (void)enumerateExpiredMessagesWithBlock:(void (^_Nonnull)(TSMessage *message))block - transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction + transaction:(YapDatabaseReadTransaction *)transaction { OWSAssert(transaction); @@ -145,12 +145,12 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess * Don't use this in production. Useful for testing. * We don't want to instantiate potentially many messages at once. */ -- (NSArray *)fetchExpiredMessagesWithTransaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction +- (NSArray *)fetchExpiredMessagesWithTransaction:(YapDatabaseReadTransaction *)transaction { OWSAssert(transaction); NSMutableArray *messages = [NSMutableArray new]; - [self enumerateExpiredMessagesWithBlock:^(TSMessage *_Nonnull message) { + [self enumerateExpiredMessagesWithBlock:^(TSMessage *message) { [messages addObject:message]; } transaction:transaction]; diff --git a/src/Messages/OWSDisappearingMessagesJob.m b/src/Messages/OWSDisappearingMessagesJob.m index ad8b9561f..b3aece129 100644 --- a/src/Messages/OWSDisappearingMessagesJob.m +++ b/src/Messages/OWSDisappearingMessagesJob.m @@ -17,10 +17,10 @@ NS_ASSUME_NONNULL_BEGIN @interface OWSDisappearingMessagesJob () -// This property should only be accessed on the serialQueue. @property (nonatomic, readonly) TSStorageManager *storageManager; -// This property should only be accessed on the serialQueue. +@property (nonatomic, readonly) YapDatabaseConnection *databaseConnection; + @property (nonatomic, readonly) OWSDisappearingMessagesFinder *disappearingMessagesFinder; // These three properties should only be accessed on the main thread. @@ -52,6 +52,7 @@ NS_ASSUME_NONNULL_BEGIN } _storageManager = storageManager; + _databaseConnection = storageManager.newDatabaseConnection; _disappearingMessagesFinder = [OWSDisappearingMessagesFinder new]; OWSSingletonAssert(); @@ -83,12 +84,13 @@ NS_ASSUME_NONNULL_BEGIN return queue; } +// This method should only be called on the serialQueue. - (void)run { uint64_t now = [NSDate ows_millisecondTimeStamp]; __block uint expirationCount = 0; - [self.storageManager.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { + [self.databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { [self.disappearingMessagesFinder enumerateExpiredMessagesWithBlock:^(TSMessage *message) { // sanity check if (message.expiresAt > now) { @@ -107,6 +109,7 @@ NS_ASSUME_NONNULL_BEGIN DDLogDebug(@"%@ Removed %u expired messages", self.tag, expirationCount); } +// This method should only be called on the serialQueue. - (void)runLoop { DDLogVerbose(@"%@ Run", self.tag); @@ -115,7 +118,7 @@ NS_ASSUME_NONNULL_BEGIN uint64_t now = [NSDate ows_millisecondTimeStamp]; __block NSNumber *nextExpirationTimestampNumber; - [self.storageManager.dbConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { + [self.databaseConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { nextExpirationTimestampNumber = [self.disappearingMessagesFinder nextExpirationTimestampWithTransaction:transaction]; }]; @@ -154,9 +157,17 @@ NS_ASSUME_NONNULL_BEGIN [self setExpirationForMessage:message expirationStartedAt:[NSDate ows_millisecondTimeStamp]]; } ++ (void)setExpirationForMessage:(TSMessage *)message expirationStartedAt:(uint64_t)expirationStartedAt +{ + dispatch_async(self.serialQueue, ^{ + [[self sharedJob] setExpirationForMessage:message expirationStartedAt:expirationStartedAt]; + }); +} + +// This method should only be called on the serialQueue. - (void)setExpirationForMessage:(TSMessage *)message expirationStartedAt:(uint64_t)expirationStartedAt { - [self.storageManager.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { + [self.databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { [self setExpirationForMessage:message expirationStartedAt:expirationStartedAt transaction:transaction]; }]; } @@ -191,10 +202,11 @@ NS_ASSUME_NONNULL_BEGIN }); } +// This method should only be called on the serialQueue. - (void)setExpirationsForThread:(TSThread *)thread { uint64_t now = [NSDate ows_millisecondTimeStamp]; - [self.storageManager.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { + [self.databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { [self.disappearingMessagesFinder enumerateUnstartedExpiringMessagesInThread:thread block:^(TSMessage *_Nonnull message) { diff --git a/src/Storage/TSDatabaseView.h b/src/Storage/TSDatabaseView.h index 2337bf9e5..97500b29e 100644 --- a/src/Storage/TSDatabaseView.h +++ b/src/Storage/TSDatabaseView.h @@ -48,10 +48,10 @@ extern NSString *const TSSecondaryDevicesDatabaseViewExtensionName; // otherwise it returns the "unread" database view. + (id)unseenDatabaseViewExtension:(YapDatabaseReadTransaction *)transaction; -// NOTE: It is not safe to call this method until hasPendingViewRegistrations is YES. +// NOTE: It is not safe to call this method while hasPendingViewRegistrations is YES. + (id)threadOutgoingMessageDatabaseView:(YapDatabaseReadTransaction *)transaction; -// NOTE: It is not safe to call this method until hasPendingViewRegistrations is YES. +// NOTE: It is not safe to call this method while hasPendingViewRegistrations is YES. + (id)threadSpecialMessagesDatabaseView:(YapDatabaseReadTransaction *)transaction; @end