Respond to CR.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 0f96341059
commit 22109d719b

@ -8,15 +8,14 @@ NS_ASSUME_NONNULL_BEGIN
@class TSMessage; @class TSMessage;
@class TSThread; @class TSThread;
@class YapDatabaseReadTransaction; @class YapDatabaseReadTransaction;
@class YapDatabaseReadWriteTransaction;
@interface OWSDisappearingMessagesFinder : NSObject @interface OWSDisappearingMessagesFinder : NSObject
- (void)enumerateExpiredMessagesWithBlock:(void (^_Nonnull)(TSMessage *message))block - (void)enumerateExpiredMessagesWithBlock:(void (^_Nonnull)(TSMessage *message))block
transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction; transaction:(YapDatabaseReadTransaction *)transaction;
- (void)enumerateUnstartedExpiringMessagesInThread:(TSThread *)thread - (void)enumerateUnstartedExpiringMessagesInThread:(TSThread *)thread
block:(void (^_Nonnull)(TSMessage *message))block block:(void (^_Nonnull)(TSMessage *message))block
transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction; transaction:(YapDatabaseReadTransaction *)transaction;
/** /**
* @return * @return

@ -21,7 +21,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
@implementation OWSDisappearingMessagesFinder @implementation OWSDisappearingMessagesFinder
- (NSArray<NSString *> *)fetchUnstartedExpiringMessageIdsInThread:(TSThread *)thread - (NSArray<NSString *> *)fetchUnstartedExpiringMessageIdsInThread:(TSThread *)thread
transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction transaction:(YapDatabaseReadTransaction *_Nonnull)transaction
{ {
OWSAssert(transaction); OWSAssert(transaction);
@ -41,7 +41,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
return [messageIds copy]; return [messageIds copy];
} }
- (NSArray<NSString *> *)fetchExpiredMessageIdsWithTransaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction - (NSArray<NSString *> *)fetchExpiredMessageIdsWithTransaction:(YapDatabaseReadTransaction *_Nonnull)transaction
{ {
OWSAssert(transaction); OWSAssert(transaction);
@ -63,7 +63,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
return [messageIds copy]; return [messageIds copy];
} }
- (nullable NSNumber *)nextExpirationTimestampWithTransaction:(YapDatabaseReadTransaction *_Nonnull)transaction - (nullable NSNumber *)nextExpirationTimestampWithTransaction:(YapDatabaseReadTransaction *)transaction
{ {
OWSAssert(transaction); OWSAssert(transaction);
@ -89,7 +89,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
- (void)enumerateUnstartedExpiringMessagesInThread:(TSThread *)thread - (void)enumerateUnstartedExpiringMessagesInThread:(TSThread *)thread
block:(void (^_Nonnull)(TSMessage *message))block block:(void (^_Nonnull)(TSMessage *message))block
transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction transaction:(YapDatabaseReadTransaction *)transaction
{ {
OWSAssert(transaction); OWSAssert(transaction);
@ -109,13 +109,13 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
* We don't want to instantiate potentially many messages at once. * We don't want to instantiate potentially many messages at once.
*/ */
- (NSArray<TSMessage *> *)fetchUnstartedExpiringMessagesInThread:(TSThread *)thread - (NSArray<TSMessage *> *)fetchUnstartedExpiringMessagesInThread:(TSThread *)thread
transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction transaction:(YapDatabaseReadTransaction *)transaction
{ {
OWSAssert(transaction); OWSAssert(transaction);
NSMutableArray<TSMessage *> *messages = [NSMutableArray new]; NSMutableArray<TSMessage *> *messages = [NSMutableArray new];
[self enumerateUnstartedExpiringMessagesInThread:thread [self enumerateUnstartedExpiringMessagesInThread:thread
block:^(TSMessage *_Nonnull message) { block:^(TSMessage *message) {
[messages addObject:message]; [messages addObject:message];
} }
transaction:transaction]; transaction:transaction];
@ -125,7 +125,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
- (void)enumerateExpiredMessagesWithBlock:(void (^_Nonnull)(TSMessage *message))block - (void)enumerateExpiredMessagesWithBlock:(void (^_Nonnull)(TSMessage *message))block
transaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction transaction:(YapDatabaseReadTransaction *)transaction
{ {
OWSAssert(transaction); OWSAssert(transaction);
@ -145,12 +145,12 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
* Don't use this in production. Useful for testing. * Don't use this in production. Useful for testing.
* We don't want to instantiate potentially many messages at once. * We don't want to instantiate potentially many messages at once.
*/ */
- (NSArray<TSMessage *> *)fetchExpiredMessagesWithTransaction:(YapDatabaseReadWriteTransaction *_Nonnull)transaction - (NSArray<TSMessage *> *)fetchExpiredMessagesWithTransaction:(YapDatabaseReadTransaction *)transaction
{ {
OWSAssert(transaction); OWSAssert(transaction);
NSMutableArray<TSMessage *> *messages = [NSMutableArray new]; NSMutableArray<TSMessage *> *messages = [NSMutableArray new];
[self enumerateExpiredMessagesWithBlock:^(TSMessage *_Nonnull message) { [self enumerateExpiredMessagesWithBlock:^(TSMessage *message) {
[messages addObject:message]; [messages addObject:message];
} }
transaction:transaction]; transaction:transaction];

@ -17,10 +17,10 @@ NS_ASSUME_NONNULL_BEGIN
@interface OWSDisappearingMessagesJob () @interface OWSDisappearingMessagesJob ()
// This property should only be accessed on the serialQueue.
@property (nonatomic, readonly) TSStorageManager *storageManager; @property (nonatomic, readonly) TSStorageManager *storageManager;
// This property should only be accessed on the serialQueue. @property (nonatomic, readonly) YapDatabaseConnection *databaseConnection;
@property (nonatomic, readonly) OWSDisappearingMessagesFinder *disappearingMessagesFinder; @property (nonatomic, readonly) OWSDisappearingMessagesFinder *disappearingMessagesFinder;
// These three properties should only be accessed on the main thread. // These three properties should only be accessed on the main thread.
@ -52,6 +52,7 @@ NS_ASSUME_NONNULL_BEGIN
} }
_storageManager = storageManager; _storageManager = storageManager;
_databaseConnection = storageManager.newDatabaseConnection;
_disappearingMessagesFinder = [OWSDisappearingMessagesFinder new]; _disappearingMessagesFinder = [OWSDisappearingMessagesFinder new];
OWSSingletonAssert(); OWSSingletonAssert();
@ -83,12 +84,13 @@ NS_ASSUME_NONNULL_BEGIN
return queue; return queue;
} }
// This method should only be called on the serialQueue.
- (void)run - (void)run
{ {
uint64_t now = [NSDate ows_millisecondTimeStamp]; uint64_t now = [NSDate ows_millisecondTimeStamp];
__block uint expirationCount = 0; __block uint expirationCount = 0;
[self.storageManager.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { [self.databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
[self.disappearingMessagesFinder enumerateExpiredMessagesWithBlock:^(TSMessage *message) { [self.disappearingMessagesFinder enumerateExpiredMessagesWithBlock:^(TSMessage *message) {
// sanity check // sanity check
if (message.expiresAt > now) { if (message.expiresAt > now) {
@ -107,6 +109,7 @@ NS_ASSUME_NONNULL_BEGIN
DDLogDebug(@"%@ Removed %u expired messages", self.tag, expirationCount); DDLogDebug(@"%@ Removed %u expired messages", self.tag, expirationCount);
} }
// This method should only be called on the serialQueue.
- (void)runLoop - (void)runLoop
{ {
DDLogVerbose(@"%@ Run", self.tag); DDLogVerbose(@"%@ Run", self.tag);
@ -115,7 +118,7 @@ NS_ASSUME_NONNULL_BEGIN
uint64_t now = [NSDate ows_millisecondTimeStamp]; uint64_t now = [NSDate ows_millisecondTimeStamp];
__block NSNumber *nextExpirationTimestampNumber; __block NSNumber *nextExpirationTimestampNumber;
[self.storageManager.dbConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { [self.databaseConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) {
nextExpirationTimestampNumber = nextExpirationTimestampNumber =
[self.disappearingMessagesFinder nextExpirationTimestampWithTransaction:transaction]; [self.disappearingMessagesFinder nextExpirationTimestampWithTransaction:transaction];
}]; }];
@ -154,9 +157,17 @@ NS_ASSUME_NONNULL_BEGIN
[self setExpirationForMessage:message expirationStartedAt:[NSDate ows_millisecondTimeStamp]]; [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 - (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]; [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 - (void)setExpirationsForThread:(TSThread *)thread
{ {
uint64_t now = [NSDate ows_millisecondTimeStamp]; uint64_t now = [NSDate ows_millisecondTimeStamp];
[self.storageManager.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { [self.databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
[self.disappearingMessagesFinder [self.disappearingMessagesFinder
enumerateUnstartedExpiringMessagesInThread:thread enumerateUnstartedExpiringMessagesInThread:thread
block:^(TSMessage *_Nonnull message) { block:^(TSMessage *_Nonnull message) {

@ -48,10 +48,10 @@ extern NSString *const TSSecondaryDevicesDatabaseViewExtensionName;
// otherwise it returns the "unread" database view. // otherwise it returns the "unread" database view.
+ (id)unseenDatabaseViewExtension:(YapDatabaseReadTransaction *)transaction; + (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; + (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; + (id)threadSpecialMessagesDatabaseView:(YapDatabaseReadTransaction *)transaction;
@end @end

Loading…
Cancel
Save