Signal-iOS/SignalServiceKit/src/Devices/OWSStickerPackSyncMessage.m
Evan Hahn da322d3bf9 Add "urgent" boolean to outgoing messages
To improve message reliability, we're adding an urgency flag to outgoing
messages. For example, outgoing calls are urgent, but delivery receipts
are not. [Android][] and [Desktop][] have already done this work.

At a high level, I added an `isUrgent` property to `TSOutgoingMessage`s.
It defaults to `true`. Some subclasses, like
`OWSReceiptsForSenderMessage`, override it to return `false`.

Builds off of a few other commits (not necessary to understand this
commit, but might be useful for posterity):

- e858a0d916
- 8c6d2ebe8c
- 402b117221
- 2ba0cd764d
- 266a4663e9
- 8e5009bbf7

[Android]: dc04c8ed98
[Desktop]: 06190b1434
2022-08-18 07:35:41 -05:00

87 lines
2.4 KiB
Objective-C

//
// Copyright (c) 2022 Open Whisper Systems. All rights reserved.
//
#import "OWSStickerPackSyncMessage.h"
#import <SignalServiceKit/SignalServiceKit-Swift.h>
NS_ASSUME_NONNULL_BEGIN
@interface OWSStickerPackSyncMessage ()
@property (nonatomic, readonly) NSArray<StickerPackInfo *> *packs;
@property (nonatomic, readonly) StickerPackOperationType operationType;
@end
#pragma mark -
@implementation OWSStickerPackSyncMessage
- (nullable instancetype)initWithCoder:(NSCoder *)coder
{
return [super initWithCoder:coder];
}
- (instancetype)initWithThread:(TSThread *)thread
packs:(NSArray<StickerPackInfo *> *)packs
operationType:(StickerPackOperationType)operationType
transaction:(SDSAnyReadTransaction *)transaction
{
self = [super initWithThread:thread transaction:transaction];
if (!self) {
return self;
}
_packs = packs;
_operationType = operationType;
return self;
}
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilderWithTransaction:(SDSAnyReadTransaction *)transaction
{
SSKProtoSyncMessageStickerPackOperationType operationType;
switch (self.operationType) {
case StickerPackOperationType_Install:
operationType = SSKProtoSyncMessageStickerPackOperationTypeInstall;
break;
case StickerPackOperationType_Remove:
operationType = SSKProtoSyncMessageStickerPackOperationTypeRemove;
break;
}
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessage builder];
for (StickerPackInfo *pack in self.packs) {
SSKProtoSyncMessageStickerPackOperationBuilder *packOperationBuilder =
[SSKProtoSyncMessageStickerPackOperation builderWithPackID:pack.packId packKey:pack.packKey];
[packOperationBuilder setType:operationType];
NSError *error;
SSKProtoSyncMessageStickerPackOperation *_Nullable packOperationProto =
[packOperationBuilder buildAndReturnError:&error];
if (error || !packOperationProto) {
OWSFailDebug(@"could not build protobuf: %@", error);
return nil;
}
[syncMessageBuilder addStickerPackOperation:packOperationProto];
}
return syncMessageBuilder;
}
- (BOOL)isUrgent
{
return NO;
}
- (SealedSenderContentHint)contentHint
{
return SealedSenderContentHintImplicit;
}
@end
NS_ASSUME_NONNULL_END