TM-SGNL-iOS/SignalServiceKit/Devices/OWSReceiptsForSenderMessage.m
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

140 lines
5 KiB
Objective-C

//
// Copyright 2017 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
#import "OWSReceiptsForSenderMessage.h"
#import <SignalServiceKit/NSDate+OWS.h>
#import <SignalServiceKit/SignalServiceKit-Swift.h>
NS_ASSUME_NONNULL_BEGIN
@interface OWSReceiptsForSenderMessage ()
@property (nonatomic, readonly, nullable) NSSet<NSString *> *messageUniqueIds;
@property (nonatomic, readonly) NSArray<NSNumber *> *messageTimestamps;
@property (nonatomic, readonly) SSKProtoReceiptMessageType receiptType;
@end
#pragma mark -
@implementation OWSReceiptsForSenderMessage
+ (OWSReceiptsForSenderMessage *)deliveryReceiptsForSenderMessageWithThread:(TSThread *)thread
receiptSet:(MessageReceiptSet *)receiptSet
transaction:(SDSAnyReadTransaction *)transaction
{
return [[OWSReceiptsForSenderMessage alloc] initWithThread:thread
receiptSet:receiptSet
receiptType:SSKProtoReceiptMessageTypeDelivery
transaction:transaction];
}
+ (OWSReceiptsForSenderMessage *)readReceiptsForSenderMessageWithThread:(TSThread *)thread
receiptSet:(MessageReceiptSet *)receiptSet
transaction:(SDSAnyReadTransaction *)transaction
{
return [[OWSReceiptsForSenderMessage alloc] initWithThread:thread
receiptSet:receiptSet
receiptType:SSKProtoReceiptMessageTypeRead
transaction:transaction];
}
+ (OWSReceiptsForSenderMessage *)viewedReceiptsForSenderMessageWithThread:(TSThread *)thread
receiptSet:(MessageReceiptSet *)receiptSet
transaction:(SDSAnyReadTransaction *)transaction
{
return [[OWSReceiptsForSenderMessage alloc] initWithThread:thread
receiptSet:receiptSet
receiptType:SSKProtoReceiptMessageTypeViewed
transaction:transaction];
}
- (instancetype)initWithThread:(TSThread *)thread
receiptSet:(MessageReceiptSet *)receiptSet
receiptType:(SSKProtoReceiptMessageType)receiptType
transaction:(SDSAnyReadTransaction *)transaction
{
TSOutgoingMessageBuilder *messageBuilder = [TSOutgoingMessageBuilder outgoingMessageBuilderWithThread:thread];
self = [super initOutgoingMessageWithBuilder:messageBuilder
additionalRecipients:@[]
explicitRecipients:@[]
skippedRecipients:@[]
transaction:transaction];
if (!self) {
return self;
}
_messageUniqueIds = [receiptSet.uniqueIds copy];
_messageTimestamps = [receiptSet.timestamps copy];
_receiptType = receiptType;
return self;
}
#pragma mark - TSOutgoingMessage overrides
- (BOOL)shouldSyncTranscript
{
return NO;
}
- (BOOL)isUrgent
{
return NO;
}
- (nullable SSKProtoContentBuilder *)contentBuilderWithThread:(TSThread *)thread
transaction:(SDSAnyReadTransaction *)transaction
{
SSKProtoReceiptMessage *_Nullable receiptMessage = [self buildReceiptMessageWithTransaction:transaction];
if (!receiptMessage) {
OWSFailDebug(@"could not build protobuf.");
return nil;
}
SSKProtoContentBuilder *contentBuilder = [SSKProtoContent builder];
[contentBuilder setReceiptMessage:receiptMessage];
return contentBuilder;
}
- (nullable SSKProtoReceiptMessage *)buildReceiptMessageWithTransaction:(SDSAnyReadTransaction *)transaction
{
OWSAssertDebug(self.recipientAddresses.count == 1);
OWSAssertDebug(self.messageTimestamps.count > 0);
SSKProtoReceiptMessageBuilder *builder = [SSKProtoReceiptMessage builder];
[builder setType:self.receiptType];
for (NSNumber *messageTimestamp in self.messageTimestamps) {
[builder addTimestamp:[messageTimestamp unsignedLongLongValue]];
}
return [builder buildInfallibly];
}
#pragma mark - TSYapDatabaseObject overrides
- (BOOL)shouldBeSaved
{
return NO;
}
- (NSString *)debugDescription
{
return [NSString
stringWithFormat:@"%@ with message timestamps: %lu", self.logTag, (unsigned long)self.messageTimestamps.count];
}
- (NSSet<NSString *> *)relatedUniqueIds
{
if (self.messageUniqueIds) {
return [[super relatedUniqueIds] setByAddingObjectsFromSet:self.messageUniqueIds];
} else {
return [super relatedUniqueIds];
}
}
@end
NS_ASSUME_NONNULL_END