Don't start expiration of incoming messages until attachments are downloaded.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 5e7ca0a755
commit 8704722f90

@ -7,6 +7,7 @@
#import "OWSDisappearingMessagesConfiguration.h" #import "OWSDisappearingMessagesConfiguration.h"
#import "OWSDisappearingMessagesJob.h" #import "OWSDisappearingMessagesJob.h"
#import "OWSReadReceiptManager.h" #import "OWSReadReceiptManager.h"
#import "TSAttachmentPointer.h"
#import "TSContactThread.h" #import "TSContactThread.h"
#import "TSDatabaseSecondaryIndexes.h" #import "TSDatabaseSecondaryIndexes.h"
#import "TSGroupThread.h" #import "TSGroupThread.h"
@ -126,6 +127,18 @@ NS_ASSUME_NONNULL_BEGIN
return OWSInteractionType_IncomingMessage; return OWSInteractionType_IncomingMessage;
} }
- (BOOL)shouldStartExpireTimer:(YapDatabaseReadTransaction *)transaction
{
for (NSString *attachmentId in self.attachmentIds) {
TSAttachment *_Nullable attachment =
[TSAttachment fetchObjectWithUniqueID:attachmentId transaction:transaction];
if ([attachment isKindOfClass:[TSAttachmentPointer class]]) {
return NO;
}
}
return self.isExpiringMessage;
}
#pragma mark - OWSReadTracking #pragma mark - OWSReadTracking
- (BOOL)shouldAffectUnreadCounts - (BOOL)shouldAffectUnreadCounts

@ -20,7 +20,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic) uint64_t expireStartedAt; @property (nonatomic) uint64_t expireStartedAt;
@property (nonatomic, readonly) uint64_t expiresAt; @property (nonatomic, readonly) uint64_t expiresAt;
@property (nonatomic, readonly) BOOL isExpiringMessage; @property (nonatomic, readonly) BOOL isExpiringMessage;
@property (nonatomic, readonly) BOOL shouldStartExpireTimer;
- (instancetype)initWithTimestamp:(uint64_t)timestamp; - (instancetype)initWithTimestamp:(uint64_t)timestamp;
@ -51,8 +50,12 @@ NS_ASSUME_NONNULL_BEGIN
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER; - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
- (BOOL)hasAttachments; - (BOOL)hasAttachments;
- (NSString *)previewTextWithTransaction:(YapDatabaseReadTransaction *)transaction; - (NSString *)previewTextWithTransaction:(YapDatabaseReadTransaction *)transaction;
- (BOOL)shouldStartExpireTimer;
- (BOOL)shouldStartExpireTimer:(YapDatabaseReadTransaction *)transaction;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

@ -170,6 +170,15 @@ static const NSUInteger OWSMessageSchemaVersion = 3;
} }
- (BOOL)shouldStartExpireTimer - (BOOL)shouldStartExpireTimer
{
__block BOOL result;
[self.dbReadConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) {
result = [self shouldStartExpireTimer:transaction];
}];
return result;
}
- (BOOL)shouldStartExpireTimer:(YapDatabaseReadTransaction *)transaction
{ {
return self.isExpiringMessage; return self.isExpiringMessage;
} }

@ -213,7 +213,7 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
return self.thread.contactIdentifier; return self.thread.contactIdentifier;
} }
- (BOOL)shouldStartExpireTimer - (BOOL)shouldStartExpireTimer:(YapDatabaseReadTransaction *)transaction
{ {
switch (self.messageState) { switch (self.messageState) {
case TSOutgoingMessageStateSentToService: case TSOutgoingMessageStateSentToService:

@ -177,7 +177,7 @@ static NSString *const OWSDisappearingMessageFinderExpiresAtIndex = @"index_mess
} }
TSMessage *message = (TSMessage *)object; TSMessage *message = (TSMessage *)object;
if (!message.shouldStartExpireTimer) { if (![message shouldStartExpireTimer:transaction]) {
return; return;
} }

Loading…
Cancel
Save