diff --git a/SignalServiceKit/protobuf/OWSSignalServiceProtos.proto b/SignalServiceKit/protobuf/OWSSignalServiceProtos.proto index 127564f86..13112b352 100644 --- a/SignalServiceKit/protobuf/OWSSignalServiceProtos.proto +++ b/SignalServiceKit/protobuf/OWSSignalServiceProtos.proto @@ -31,10 +31,21 @@ message Envelope { } message Content { - optional DataMessage dataMessage = 1; - optional SyncMessage syncMessage = 2; - optional CallMessage callMessage = 3; - optional NullMessage nullMessage = 4; + optional DataMessage dataMessage = 1; + optional SyncMessage syncMessage = 2; + optional CallMessage callMessage = 3; + optional NullMessage nullMessage = 4; + optional ReceiptMessage receiptMessage = 5; +} + +message ReceiptMessage { + enum Type { + DELIVERY = 0; + READ = 1; + } + + optional Type type = 1; + repeated uint64 timestamp = 2; } message CallMessage { diff --git a/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.h b/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.h index 37430bee2..f72a555e5 100644 --- a/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.h +++ b/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.h @@ -36,6 +36,8 @@ @class OWSSignalServiceProtosGroupDetailsBuilder; @class OWSSignalServiceProtosNullMessage; @class OWSSignalServiceProtosNullMessageBuilder; +@class OWSSignalServiceProtosReceiptMessage; +@class OWSSignalServiceProtosReceiptMessageBuilder; @class OWSSignalServiceProtosSyncMessage; @class OWSSignalServiceProtosSyncMessageBlocked; @class OWSSignalServiceProtosSyncMessageBlockedBuilder; @@ -109,6 +111,14 @@ typedef NS_ENUM(SInt32, OWSSignalServiceProtosEnvelopeType) { BOOL OWSSignalServiceProtosEnvelopeTypeIsValidValue(OWSSignalServiceProtosEnvelopeType value); NSString *NSStringFromOWSSignalServiceProtosEnvelopeType(OWSSignalServiceProtosEnvelopeType value); +typedef NS_ENUM(SInt32, OWSSignalServiceProtosReceiptMessageType) { + OWSSignalServiceProtosReceiptMessageTypeDelivery = 0, + OWSSignalServiceProtosReceiptMessageTypeRead = 1, +}; + +BOOL OWSSignalServiceProtosReceiptMessageTypeIsValidValue(OWSSignalServiceProtosReceiptMessageType value); +NSString *NSStringFromOWSSignalServiceProtosReceiptMessageType(OWSSignalServiceProtosReceiptMessageType value); + typedef NS_ENUM(SInt32, OWSSignalServiceProtosDataMessageFlags) { OWSSignalServiceProtosDataMessageFlagsEndSession = 1, OWSSignalServiceProtosDataMessageFlagsExpirationTimerUpdate = 2, @@ -276,25 +286,30 @@ NSString *NSStringFromOWSSignalServiceProtosGroupContextType(OWSSignalServicePro #define Content_syncMessage @"syncMessage" #define Content_callMessage @"callMessage" #define Content_nullMessage @"nullMessage" +#define Content_receiptMessage @"receiptMessage" @interface OWSSignalServiceProtosContent : PBGeneratedMessage { @private BOOL hasDataMessage_:1; BOOL hasSyncMessage_:1; BOOL hasCallMessage_:1; BOOL hasNullMessage_:1; + BOOL hasReceiptMessage_:1; OWSSignalServiceProtosDataMessage* dataMessage; OWSSignalServiceProtosSyncMessage* syncMessage; OWSSignalServiceProtosCallMessage* callMessage; OWSSignalServiceProtosNullMessage* nullMessage; + OWSSignalServiceProtosReceiptMessage* receiptMessage; } - (BOOL) hasDataMessage; - (BOOL) hasSyncMessage; - (BOOL) hasCallMessage; - (BOOL) hasNullMessage; +- (BOOL) hasReceiptMessage; @property (readonly, strong) OWSSignalServiceProtosDataMessage* dataMessage; @property (readonly, strong) OWSSignalServiceProtosSyncMessage* syncMessage; @property (readonly, strong) OWSSignalServiceProtosCallMessage* callMessage; @property (readonly, strong) OWSSignalServiceProtosNullMessage* nullMessage; +@property (readonly, strong) OWSSignalServiceProtosReceiptMessage* receiptMessage; + (instancetype) defaultInstance; - (instancetype) defaultInstance; @@ -358,6 +373,74 @@ NSString *NSStringFromOWSSignalServiceProtosGroupContextType(OWSSignalServicePro - (OWSSignalServiceProtosContentBuilder*) setNullMessageBuilder:(OWSSignalServiceProtosNullMessageBuilder*) builderForValue; - (OWSSignalServiceProtosContentBuilder*) mergeNullMessage:(OWSSignalServiceProtosNullMessage*) value; - (OWSSignalServiceProtosContentBuilder*) clearNullMessage; + +- (BOOL) hasReceiptMessage; +- (OWSSignalServiceProtosReceiptMessage*) receiptMessage; +- (OWSSignalServiceProtosContentBuilder*) setReceiptMessage:(OWSSignalServiceProtosReceiptMessage*) value; +- (OWSSignalServiceProtosContentBuilder*) setReceiptMessageBuilder:(OWSSignalServiceProtosReceiptMessageBuilder*) builderForValue; +- (OWSSignalServiceProtosContentBuilder*) mergeReceiptMessage:(OWSSignalServiceProtosReceiptMessage*) value; +- (OWSSignalServiceProtosContentBuilder*) clearReceiptMessage; +@end + +#define ReceiptMessage_type @"type" +#define ReceiptMessage_timestamp @"timestamp" +@interface OWSSignalServiceProtosReceiptMessage : PBGeneratedMessage { +@private + BOOL hasType_:1; + OWSSignalServiceProtosReceiptMessageType type; + PBAppendableArray * timestampArray; +} +- (BOOL) hasType; +@property (readonly) OWSSignalServiceProtosReceiptMessageType type; +@property (readonly, strong) PBArray * timestamp; +- (UInt64)timestampAtIndex:(NSUInteger)index; + ++ (instancetype) defaultInstance; +- (instancetype) defaultInstance; + +- (BOOL) isInitialized; +- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output; +- (OWSSignalServiceProtosReceiptMessageBuilder*) builder; ++ (OWSSignalServiceProtosReceiptMessageBuilder*) builder; ++ (OWSSignalServiceProtosReceiptMessageBuilder*) builderWithPrototype:(OWSSignalServiceProtosReceiptMessage*) prototype; +- (OWSSignalServiceProtosReceiptMessageBuilder*) toBuilder; + ++ (OWSSignalServiceProtosReceiptMessage*) parseFromData:(NSData*) data; ++ (OWSSignalServiceProtosReceiptMessage*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry; ++ (OWSSignalServiceProtosReceiptMessage*) parseFromInputStream:(NSInputStream*) input; ++ (OWSSignalServiceProtosReceiptMessage*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; ++ (OWSSignalServiceProtosReceiptMessage*) parseFromCodedInputStream:(PBCodedInputStream*) input; ++ (OWSSignalServiceProtosReceiptMessage*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; +@end + +@interface OWSSignalServiceProtosReceiptMessageBuilder : PBGeneratedMessageBuilder { +@private + OWSSignalServiceProtosReceiptMessage* resultReceiptMessage; +} + +- (OWSSignalServiceProtosReceiptMessage*) defaultInstance; + +- (OWSSignalServiceProtosReceiptMessageBuilder*) clear; +- (OWSSignalServiceProtosReceiptMessageBuilder*) clone; + +- (OWSSignalServiceProtosReceiptMessage*) build; +- (OWSSignalServiceProtosReceiptMessage*) buildPartial; + +- (OWSSignalServiceProtosReceiptMessageBuilder*) mergeFrom:(OWSSignalServiceProtosReceiptMessage*) other; +- (OWSSignalServiceProtosReceiptMessageBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; +- (OWSSignalServiceProtosReceiptMessageBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; + +- (BOOL) hasType; +- (OWSSignalServiceProtosReceiptMessageType) type; +- (OWSSignalServiceProtosReceiptMessageBuilder*) setType:(OWSSignalServiceProtosReceiptMessageType) value; +- (OWSSignalServiceProtosReceiptMessageBuilder*) clearType; + +- (PBAppendableArray *)timestamp; +- (UInt64)timestampAtIndex:(NSUInteger)index; +- (OWSSignalServiceProtosReceiptMessageBuilder *)addTimestamp:(UInt64)value; +- (OWSSignalServiceProtosReceiptMessageBuilder *)setTimestampArray:(NSArray *)array; +- (OWSSignalServiceProtosReceiptMessageBuilder *)setTimestampValues:(const UInt64 *)values count:(NSUInteger)count; +- (OWSSignalServiceProtosReceiptMessageBuilder *)clearTimestamp; @end #define CallMessage_offer @"offer" diff --git a/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.m b/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.m index 7c8c8c478..b176a1ffc 100644 --- a/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.m +++ b/SignalServiceKit/src/Messages/OWSSignalServiceProtos.pb.m @@ -560,6 +560,7 @@ NSString *NSStringFromOWSSignalServiceProtosEnvelopeType(OWSSignalServiceProtosE @property (strong) OWSSignalServiceProtosSyncMessage* syncMessage; @property (strong) OWSSignalServiceProtosCallMessage* callMessage; @property (strong) OWSSignalServiceProtosNullMessage* nullMessage; +@property (strong) OWSSignalServiceProtosReceiptMessage* receiptMessage; @end @implementation OWSSignalServiceProtosContent @@ -592,12 +593,20 @@ NSString *NSStringFromOWSSignalServiceProtosEnvelopeType(OWSSignalServiceProtosE hasNullMessage_ = !!_value_; } @synthesize nullMessage; +- (BOOL) hasReceiptMessage { + return !!hasReceiptMessage_; +} +- (void) setHasReceiptMessage:(BOOL) _value_ { + hasReceiptMessage_ = !!_value_; +} +@synthesize receiptMessage; - (instancetype) init { if ((self = [super init])) { self.dataMessage = [OWSSignalServiceProtosDataMessage defaultInstance]; self.syncMessage = [OWSSignalServiceProtosSyncMessage defaultInstance]; self.callMessage = [OWSSignalServiceProtosCallMessage defaultInstance]; self.nullMessage = [OWSSignalServiceProtosNullMessage defaultInstance]; + self.receiptMessage = [OWSSignalServiceProtosReceiptMessage defaultInstance]; } return self; } @@ -629,6 +638,9 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan if (self.hasNullMessage) { [output writeMessage:4 value:self.nullMessage]; } + if (self.hasReceiptMessage) { + [output writeMessage:5 value:self.receiptMessage]; + } [self.unknownFields writeToCodedOutputStream:output]; } - (SInt32) serializedSize { @@ -650,6 +662,9 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan if (self.hasNullMessage) { size_ += computeMessageSize(4, self.nullMessage); } + if (self.hasReceiptMessage) { + size_ += computeMessageSize(5, self.receiptMessage); + } size_ += self.unknownFields.serializedSize; memoizedSerializedSize = size_; return size_; @@ -709,6 +724,12 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan withIndent:[NSString stringWithFormat:@"%@ ", indent]]; [output appendFormat:@"%@}\n", indent]; } + if (self.hasReceiptMessage) { + [output appendFormat:@"%@%@ {\n", indent, @"receiptMessage"]; + [self.receiptMessage writeDescriptionTo:output + withIndent:[NSString stringWithFormat:@"%@ ", indent]]; + [output appendFormat:@"%@}\n", indent]; + } [self.unknownFields writeDescriptionTo:output withIndent:indent]; } - (void) storeInDictionary:(NSMutableDictionary *)dictionary { @@ -732,6 +753,11 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan [self.nullMessage storeInDictionary:messageDictionary]; [dictionary setObject:[NSDictionary dictionaryWithDictionary:messageDictionary] forKey:@"nullMessage"]; } + if (self.hasReceiptMessage) { + NSMutableDictionary *messageDictionary = [NSMutableDictionary dictionary]; + [self.receiptMessage storeInDictionary:messageDictionary]; + [dictionary setObject:[NSDictionary dictionaryWithDictionary:messageDictionary] forKey:@"receiptMessage"]; + } [self.unknownFields storeInDictionary:dictionary]; } - (BOOL) isEqual:(id)other { @@ -751,6 +777,8 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan (!self.hasCallMessage || [self.callMessage isEqual:otherMessage.callMessage]) && self.hasNullMessage == otherMessage.hasNullMessage && (!self.hasNullMessage || [self.nullMessage isEqual:otherMessage.nullMessage]) && + self.hasReceiptMessage == otherMessage.hasReceiptMessage && + (!self.hasReceiptMessage || [self.receiptMessage isEqual:otherMessage.receiptMessage]) && (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields])); } - (NSUInteger) hash { @@ -767,6 +795,9 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan if (self.hasNullMessage) { hashCode = hashCode * 31 + [self.nullMessage hash]; } + if (self.hasReceiptMessage) { + hashCode = hashCode * 31 + [self.receiptMessage hash]; + } hashCode = hashCode * 31 + [self.unknownFields hash]; return hashCode; } @@ -822,6 +853,9 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan if (other.hasNullMessage) { [self mergeNullMessage:other.nullMessage]; } + if (other.hasReceiptMessage) { + [self mergeReceiptMessage:other.receiptMessage]; + } [self mergeUnknownFields:other.unknownFields]; return self; } @@ -879,6 +913,15 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan [self setNullMessage:[subBuilder buildPartial]]; break; } + case 42: { + OWSSignalServiceProtosReceiptMessageBuilder* subBuilder = [OWSSignalServiceProtosReceiptMessage builder]; + if (self.hasReceiptMessage) { + [subBuilder mergeFrom:self.receiptMessage]; + } + [input readMessage:subBuilder extensionRegistry:extensionRegistry]; + [self setReceiptMessage:[subBuilder buildPartial]]; + break; + } } } } @@ -1002,6 +1045,342 @@ static OWSSignalServiceProtosContent* defaultOWSSignalServiceProtosContentInstan resultContent.nullMessage = [OWSSignalServiceProtosNullMessage defaultInstance]; return self; } +- (BOOL) hasReceiptMessage { + return resultContent.hasReceiptMessage; +} +- (OWSSignalServiceProtosReceiptMessage*) receiptMessage { + return resultContent.receiptMessage; +} +- (OWSSignalServiceProtosContentBuilder*) setReceiptMessage:(OWSSignalServiceProtosReceiptMessage*) value { + resultContent.hasReceiptMessage = YES; + resultContent.receiptMessage = value; + return self; +} +- (OWSSignalServiceProtosContentBuilder*) setReceiptMessageBuilder:(OWSSignalServiceProtosReceiptMessageBuilder*) builderForValue { + return [self setReceiptMessage:[builderForValue build]]; +} +- (OWSSignalServiceProtosContentBuilder*) mergeReceiptMessage:(OWSSignalServiceProtosReceiptMessage*) value { + if (resultContent.hasReceiptMessage && + resultContent.receiptMessage != [OWSSignalServiceProtosReceiptMessage defaultInstance]) { + resultContent.receiptMessage = + [[[OWSSignalServiceProtosReceiptMessage builderWithPrototype:resultContent.receiptMessage] mergeFrom:value] buildPartial]; + } else { + resultContent.receiptMessage = value; + } + resultContent.hasReceiptMessage = YES; + return self; +} +- (OWSSignalServiceProtosContentBuilder*) clearReceiptMessage { + resultContent.hasReceiptMessage = NO; + resultContent.receiptMessage = [OWSSignalServiceProtosReceiptMessage defaultInstance]; + return self; +} +@end + +@interface OWSSignalServiceProtosReceiptMessage () +@property OWSSignalServiceProtosReceiptMessageType type; +@property (strong) PBAppendableArray * timestampArray; +@end + +@implementation OWSSignalServiceProtosReceiptMessage + +- (BOOL) hasType { + return !!hasType_; +} +- (void) setHasType:(BOOL) _value_ { + hasType_ = !!_value_; +} +@synthesize type; +@synthesize timestampArray; +@dynamic timestamp; +- (instancetype) init { + if ((self = [super init])) { + self.type = OWSSignalServiceProtosReceiptMessageTypeDelivery; + } + return self; +} +static OWSSignalServiceProtosReceiptMessage* defaultOWSSignalServiceProtosReceiptMessageInstance = nil; ++ (void) initialize { + if (self == [OWSSignalServiceProtosReceiptMessage class]) { + defaultOWSSignalServiceProtosReceiptMessageInstance = [[OWSSignalServiceProtosReceiptMessage alloc] init]; + } +} ++ (instancetype) defaultInstance { + return defaultOWSSignalServiceProtosReceiptMessageInstance; +} +- (instancetype) defaultInstance { + return defaultOWSSignalServiceProtosReceiptMessageInstance; +} +- (PBArray *)timestamp { + return timestampArray; +} +- (UInt64)timestampAtIndex:(NSUInteger)index { + return [timestampArray uint64AtIndex:index]; +} +- (BOOL) isInitialized { + return YES; +} +- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output { + if (self.hasType) { + [output writeEnum:1 value:self.type]; + } + const NSUInteger timestampArrayCount = self.timestampArray.count; + if (timestampArrayCount > 0) { + const UInt64 *values = (const UInt64 *)self.timestampArray.data; + for (NSUInteger i = 0; i < timestampArrayCount; ++i) { + [output writeUInt64:2 value:values[i]]; + } + } + [self.unknownFields writeToCodedOutputStream:output]; +} +- (SInt32) serializedSize { + __block SInt32 size_ = memoizedSerializedSize; + if (size_ != -1) { + return size_; + } + + size_ = 0; + if (self.hasType) { + size_ += computeEnumSize(1, self.type); + } + { + __block SInt32 dataSize = 0; + const NSUInteger count = self.timestampArray.count; + const UInt64 *values = (const UInt64 *)self.timestampArray.data; + for (NSUInteger i = 0; i < count; ++i) { + dataSize += computeUInt64SizeNoTag(values[i]); + } + size_ += dataSize; + size_ += (SInt32)(1 * count); + } + size_ += self.unknownFields.serializedSize; + memoizedSerializedSize = size_; + return size_; +} ++ (OWSSignalServiceProtosReceiptMessage*) parseFromData:(NSData*) data { + return (OWSSignalServiceProtosReceiptMessage*)[[[OWSSignalServiceProtosReceiptMessage builder] mergeFromData:data] build]; +} ++ (OWSSignalServiceProtosReceiptMessage*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry { + return (OWSSignalServiceProtosReceiptMessage*)[[[OWSSignalServiceProtosReceiptMessage builder] mergeFromData:data extensionRegistry:extensionRegistry] build]; +} ++ (OWSSignalServiceProtosReceiptMessage*) parseFromInputStream:(NSInputStream*) input { + return (OWSSignalServiceProtosReceiptMessage*)[[[OWSSignalServiceProtosReceiptMessage builder] mergeFromInputStream:input] build]; +} ++ (OWSSignalServiceProtosReceiptMessage*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { + return (OWSSignalServiceProtosReceiptMessage*)[[[OWSSignalServiceProtosReceiptMessage builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build]; +} ++ (OWSSignalServiceProtosReceiptMessage*) parseFromCodedInputStream:(PBCodedInputStream*) input { + return (OWSSignalServiceProtosReceiptMessage*)[[[OWSSignalServiceProtosReceiptMessage builder] mergeFromCodedInputStream:input] build]; +} ++ (OWSSignalServiceProtosReceiptMessage*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { + return (OWSSignalServiceProtosReceiptMessage*)[[[OWSSignalServiceProtosReceiptMessage builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build]; +} ++ (OWSSignalServiceProtosReceiptMessageBuilder*) builder { + return [[OWSSignalServiceProtosReceiptMessageBuilder alloc] init]; +} ++ (OWSSignalServiceProtosReceiptMessageBuilder*) builderWithPrototype:(OWSSignalServiceProtosReceiptMessage*) prototype { + return [[OWSSignalServiceProtosReceiptMessage builder] mergeFrom:prototype]; +} +- (OWSSignalServiceProtosReceiptMessageBuilder*) builder { + return [OWSSignalServiceProtosReceiptMessage builder]; +} +- (OWSSignalServiceProtosReceiptMessageBuilder*) toBuilder { + return [OWSSignalServiceProtosReceiptMessage builderWithPrototype:self]; +} +- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent { + if (self.hasType) { + [output appendFormat:@"%@%@: %@\n", indent, @"type", NSStringFromOWSSignalServiceProtosReceiptMessageType(self.type)]; + } + [self.timestampArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + [output appendFormat:@"%@%@: %@\n", indent, @"timestamp", obj]; + }]; + [self.unknownFields writeDescriptionTo:output withIndent:indent]; +} +- (void) storeInDictionary:(NSMutableDictionary *)dictionary { + if (self.hasType) { + [dictionary setObject: @(self.type) forKey: @"type"]; + } + NSMutableArray * timestampArrayArray = [NSMutableArray new]; + NSUInteger timestampArrayCount=self.timestampArray.count; + for(int i=0;i 0) { + if (resultReceiptMessage.timestampArray == nil) { + resultReceiptMessage.timestampArray = [other.timestampArray copy]; + } else { + [resultReceiptMessage.timestampArray appendArray:other.timestampArray]; + } + } + [self mergeUnknownFields:other.unknownFields]; + return self; +} +- (OWSSignalServiceProtosReceiptMessageBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input { + return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]]; +} +- (OWSSignalServiceProtosReceiptMessageBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry { + PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields]; + while (YES) { + SInt32 tag = [input readTag]; + switch (tag) { + case 0: + [self setUnknownFields:[unknownFields build]]; + return self; + default: { + if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) { + [self setUnknownFields:[unknownFields build]]; + return self; + } + break; + } + case 8: { + OWSSignalServiceProtosReceiptMessageType value = (OWSSignalServiceProtosReceiptMessageType)[input readEnum]; + if (OWSSignalServiceProtosReceiptMessageTypeIsValidValue(value)) { + [self setType:value]; + } else { + [unknownFields mergeVarintField:1 value:value]; + } + break; + } + case 16: { + [self addTimestamp:[input readUInt64]]; + break; + } + } + } +} +- (BOOL) hasType { + return resultReceiptMessage.hasType; +} +- (OWSSignalServiceProtosReceiptMessageType) type { + return resultReceiptMessage.type; +} +- (OWSSignalServiceProtosReceiptMessageBuilder*) setType:(OWSSignalServiceProtosReceiptMessageType) value { + resultReceiptMessage.hasType = YES; + resultReceiptMessage.type = value; + return self; +} +- (OWSSignalServiceProtosReceiptMessageBuilder*) clearType { + resultReceiptMessage.hasType = NO; + resultReceiptMessage.type = OWSSignalServiceProtosReceiptMessageTypeDelivery; + return self; +} +- (PBAppendableArray *)timestamp { + return resultReceiptMessage.timestampArray; +} +- (UInt64)timestampAtIndex:(NSUInteger)index { + return [resultReceiptMessage timestampAtIndex:index]; +} +- (OWSSignalServiceProtosReceiptMessageBuilder *)addTimestamp:(UInt64)value { + if (resultReceiptMessage.timestampArray == nil) { + resultReceiptMessage.timestampArray = [PBAppendableArray arrayWithValueType:PBArrayValueTypeUInt64]; + } + [resultReceiptMessage.timestampArray addUint64:value]; + return self; +} +- (OWSSignalServiceProtosReceiptMessageBuilder *)setTimestampArray:(NSArray *)array { + resultReceiptMessage.timestampArray = [PBAppendableArray arrayWithArray:array valueType:PBArrayValueTypeUInt64]; + return self; +} +- (OWSSignalServiceProtosReceiptMessageBuilder *)setTimestampValues:(const UInt64 *)values count:(NSUInteger)count { + resultReceiptMessage.timestampArray = [PBAppendableArray arrayWithValues:values count:count valueType:PBArrayValueTypeUInt64]; + return self; +} +- (OWSSignalServiceProtosReceiptMessageBuilder *)clearTimestamp { + resultReceiptMessage.timestampArray = nil; + return self; +} @end @interface OWSSignalServiceProtosCallMessage ()