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

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

@ -7,6 +7,7 @@
#import "OWSDisappearingMessagesConfiguration.h"
#import "OWSDisappearingMessagesJob.h"
#import "OWSReadReceiptManager.h"
#import "TSAttachmentPointer.h"
#import "TSContactThread.h"
#import "TSDatabaseSecondaryIndexes.h"
#import "TSGroupThread.h"
@ -126,6 +127,18 @@ NS_ASSUME_NONNULL_BEGIN
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
- (BOOL)shouldAffectUnreadCounts

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

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

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

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

Loading…
Cancel
Save