From aa14ac60b1bcd0eb87ecad4b4cba7094bd8a4716 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Thu, 5 Nov 2020 12:03:24 +1100 Subject: [PATCH] retry attachments downloads failed in NSE when user goes to corresponding conversation --- .../ConversationView/ConversationViewModel.m | 12 ++++++++++++ .../Messages/Attachments/OWSAttachmentDownloads.m | 7 +++++++ .../src/Messages/Interactions/TSMessage.h | 2 ++ .../src/Messages/OWSFailedAttachmentDownloadsJob.m | 8 ++++++++ 4 files changed, 29 insertions(+) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m index 1b438a869..dea5b0123 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m @@ -1235,6 +1235,18 @@ static const int kYapDatabaseRangeMaxLength = 25000; OWSAssertDebug(!viewItemCache[interaction.uniqueId]); viewItemCache[interaction.uniqueId] = viewItem; [viewItems addObject:viewItem]; + TSMessage *message = (TSMessage *)viewItem.interaction; + if (message.hasAttachmentsInNSE) { + [SSKEnvironment.shared.attachmentDownloads downloadAttachmentsForMessage:message + transaction:transaction + success:^(NSArray *attachmentStreams) { + OWSLogInfo(@"Successfully redownloaded attachment in thread: %@", message.thread); + } + failure:^(NSError *error) { + OWSLogWarn(@"Failed to redownload message with error: %@", error); + }]; + } + return viewItem; }; diff --git a/SignalServiceKit/src/Messages/Attachments/OWSAttachmentDownloads.m b/SignalServiceKit/src/Messages/Attachments/OWSAttachmentDownloads.m index f0471f14d..a471bf8e1 100644 --- a/SignalServiceKit/src/Messages/Attachments/OWSAttachmentDownloads.m +++ b/SignalServiceKit/src/Messages/Attachments/OWSAttachmentDownloads.m @@ -290,6 +290,13 @@ typedef void (^AttachmentDownloadFailure)(NSError *error); [job.attachmentPointer saveWithTransaction:transaction]; if (job.message) { + if (!CurrentAppContext().isMainApp) { + job.message.hasAttachmentsInNSE = true; + } else { + job.message.hasAttachmentsInNSE = false; + } + + [job.message saveWithTransaction:transaction]; [job.message touchWithTransaction:transaction]; } }]; diff --git a/SignalServiceKit/src/Messages/Interactions/TSMessage.h b/SignalServiceKit/src/Messages/Interactions/TSMessage.h index e4085c094..d8b5af2d7 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSMessage.h +++ b/SignalServiceKit/src/Messages/Interactions/TSMessage.h @@ -34,6 +34,8 @@ NS_ASSUME_NONNULL_BEGIN // Open groups @property (nonatomic) uint64_t openGroupServerMessageID; @property (nonatomic, readonly) BOOL isOpenGroupMessage; +// Attachments in NSE +@property (nonatomic) BOOL hasAttachmentsInNSE; - (instancetype)initInteractionWithTimestamp:(uint64_t)timestamp inThread:(TSThread *)thread NS_UNAVAILABLE; diff --git a/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.m b/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.m index f4d2a092d..010882650 100644 --- a/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.m +++ b/SignalServiceKit/src/Messages/OWSFailedAttachmentDownloadsJob.m @@ -3,6 +3,8 @@ // #import "OWSFailedAttachmentDownloadsJob.h" +#import "SSKEnvironment.h" +#import "OWSAttachmentDownloads.h" #import "OWSPrimaryStorage.h" #import "TSAttachmentPointer.h" #import @@ -25,6 +27,12 @@ static NSString *const OWSFailedAttachmentDownloadsJobAttachmentStateIndex = @"i @implementation OWSFailedAttachmentDownloadsJob +- (OWSAttachmentDownloads *)attachmentDownloads +{ + return SSKEnvironment.shared.attachmentDownloads; +} + + - (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage { self = [super init];