Code generate Swift wrappers for protocol buffers.
This commit is contained in:
parent
ab31e5a07f
commit
d3adb80242
|
@ -616,6 +616,7 @@ public func serializedData() throws -> Data {
|
||||||
# Setters
|
# Setters
|
||||||
for field in self.fields():
|
for field in self.fields():
|
||||||
if field.rules == 'repeated':
|
if field.rules == 'repeated':
|
||||||
|
# Add
|
||||||
accessor_name = field.name_swift
|
accessor_name = field.name_swift
|
||||||
accessor_name = 'add' + accessor_name[0].upper() + accessor_name[1:]
|
accessor_name = 'add' + accessor_name[0].upper() + accessor_name[1:]
|
||||||
writer.add('@objc public func %s(_ valueParam: %s) {' % ( accessor_name, self.base_swift_type_for_field(field), ))
|
writer.add('@objc public func %s(_ valueParam: %s) {' % ( accessor_name, self.base_swift_type_for_field(field), ))
|
||||||
|
@ -633,6 +634,37 @@ public func serializedData() throws -> Data {
|
||||||
writer.pop_indent()
|
writer.pop_indent()
|
||||||
writer.add('}')
|
writer.add('}')
|
||||||
writer.newline()
|
writer.newline()
|
||||||
|
|
||||||
|
# Set
|
||||||
|
accessor_name = field.name_swift
|
||||||
|
accessor_name = 'set' + accessor_name[0].upper() + accessor_name[1:]
|
||||||
|
writer.add('@objc public func %s(_ wrappedItems: [%s]) {' % ( accessor_name, self.base_swift_type_for_field(field), ))
|
||||||
|
writer.push_indent()
|
||||||
|
list_wrapped_swift_name = None
|
||||||
|
if self.is_field_a_proto(field):
|
||||||
|
message_context = self.context_for_proto_type(field)
|
||||||
|
list_wrapped_swift_name = message_context.derive_wrapped_swift_name()
|
||||||
|
else:
|
||||||
|
# TODO: Assert not an enum.
|
||||||
|
list_wrapped_swift_name = self.base_swift_type_for_field(field)
|
||||||
|
writer.add('var unwrappedItems = [%s]()' % list_wrapped_swift_name)
|
||||||
|
writer.add('for wrappedItem in wrappedItems {')
|
||||||
|
writer.push_indent()
|
||||||
|
|
||||||
|
if self.is_field_an_enum(field):
|
||||||
|
enum_context = self.context_for_proto_type(field)
|
||||||
|
writer.add('unwrappedItems.append(%sUnwrap(wrappedItem))' % enum_context.swift_name )
|
||||||
|
elif self.is_field_a_proto(field):
|
||||||
|
writer.add('unwrappedItems.append(wrappedItem.proto)')
|
||||||
|
else:
|
||||||
|
writer.add('unwrappedItems.append(wrappedItem)')
|
||||||
|
|
||||||
|
writer.pop_indent()
|
||||||
|
writer.add('}')
|
||||||
|
writer.add('proto.%s = unwrappedItems' % ( field.name_swift, ) )
|
||||||
|
writer.pop_indent()
|
||||||
|
writer.add('}')
|
||||||
|
writer.newline()
|
||||||
else:
|
else:
|
||||||
accessor_name = field.name_swift
|
accessor_name = field.name_swift
|
||||||
accessor_name = 'set' + accessor_name[0].upper() + accessor_name[1:]
|
accessor_name = 'set' + accessor_name[0].upper() + accessor_name[1:]
|
||||||
|
|
|
@ -32,14 +32,19 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
||||||
{
|
{
|
||||||
SSKProtoSyncMessageBlockedBuilder *blockedPhoneNumbersBuilder =
|
SSKProtoSyncMessageBlockedBuilder *blockedBuilder = [SSKProtoSyncMessageBlockedBuilder new];
|
||||||
[SSKProtoSyncMessageBlockedBuilder new];
|
[blockedBuilder setNumbers:_phoneNumbers];
|
||||||
[blockedPhoneNumbersBuilder setNumbersArray:_phoneNumbers];
|
NSError *error;
|
||||||
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
SSKProtoSyncMessageBlocked *_Nullable blockedProto = [blockedBuilder buildAndReturnError:&error];
|
||||||
[syncMessageBuilder setBlocked:[blockedPhoneNumbersBuilder build]];
|
if (error || !blockedProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
||||||
|
[syncMessageBuilder setBlocked:blockedProto];
|
||||||
return syncMessageBuilder;
|
return syncMessageBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,15 @@ disappearingMessagesConfiguration:(nullable OWSDisappearingMessagesConfiguration
|
||||||
verifiedBuilder.destination = recipientIdentity.recipientId;
|
verifiedBuilder.destination = recipientIdentity.recipientId;
|
||||||
verifiedBuilder.identityKey = [recipientIdentity.identityKey prependKeyType];
|
verifiedBuilder.identityKey = [recipientIdentity.identityKey prependKeyType];
|
||||||
verifiedBuilder.state = OWSVerificationStateToProtoState(recipientIdentity.verificationState);
|
verifiedBuilder.state = OWSVerificationStateToProtoState(recipientIdentity.verificationState);
|
||||||
contactBuilder.verifiedBuilder = verifiedBuilder;
|
|
||||||
|
NSError *error;
|
||||||
|
SSKProtoVerified *_Nullable verified = [verifiedBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !verified) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
contactBuilder.verified = verified;
|
||||||
}
|
}
|
||||||
|
|
||||||
UIImage *_Nullable rawAvatar = [contactsManager avatarImageForCNContactId:signalAccount.contact.cnContactId];
|
UIImage *_Nullable rawAvatar = [contactsManager avatarImageForCNContactId:signalAccount.contact.cnContactId];
|
||||||
|
@ -53,10 +61,16 @@ disappearingMessagesConfiguration:(nullable OWSDisappearingMessagesConfiguration
|
||||||
if (avatarPng) {
|
if (avatarPng) {
|
||||||
SSKProtoContactDetailsAvatarBuilder *avatarBuilder =
|
SSKProtoContactDetailsAvatarBuilder *avatarBuilder =
|
||||||
[SSKProtoContactDetailsAvatarBuilder new];
|
[SSKProtoContactDetailsAvatarBuilder new];
|
||||||
|
|
||||||
[avatarBuilder setContentType:OWSMimeTypeImagePng];
|
[avatarBuilder setContentType:OWSMimeTypeImagePng];
|
||||||
[avatarBuilder setLength:(uint32_t)avatarPng.length];
|
[avatarBuilder setLength:(uint32_t)avatarPng.length];
|
||||||
[contactBuilder setAvatarBuilder:avatarBuilder];
|
|
||||||
|
NSError *error;
|
||||||
|
SSKProtoContactDetailsAvatar *_Nullable avatar = [avatarBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !avatar) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
[contactBuilder setAvatar:avatar];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +92,17 @@ disappearingMessagesConfiguration:(nullable OWSDisappearingMessagesConfiguration
|
||||||
[contactBuilder setBlocked:YES];
|
[contactBuilder setBlocked:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
NSData *contactData = [[contactBuilder build] data];
|
NSError *error;
|
||||||
|
SSKProtoContactDetails *_Nullable contactProto = [contactBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !contactProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSData *_Nullable contactData = [contactProto serializedDataAndReturnError:&error];
|
||||||
|
if (error || !contactData) {
|
||||||
|
OWSFail(@"%@ could not serialize protobuf: %@", self.logTag, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t contactDataLength = (uint32_t)contactData.length;
|
uint32_t contactDataLength = (uint32_t)contactData.length;
|
||||||
[self.delegateStream writeRawVarint32:contactDataLength];
|
[self.delegateStream writeRawVarint32:contactDataLength];
|
||||||
|
|
|
@ -33,7 +33,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
return [super initWithCoder:coder];
|
return [super initWithCoder:coder];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
||||||
{
|
{
|
||||||
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
||||||
for (OWSLinkedDeviceReadReceipt *readReceipt in self.readReceipts) {
|
for (OWSLinkedDeviceReadReceipt *readReceipt in self.readReceipts) {
|
||||||
|
@ -41,9 +41,15 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
[SSKProtoSyncMessageReadBuilder new];
|
[SSKProtoSyncMessageReadBuilder new];
|
||||||
[readProtoBuilder setSender:readReceipt.senderId];
|
[readProtoBuilder setSender:readReceipt.senderId];
|
||||||
[readProtoBuilder setTimestamp:readReceipt.messageIdTimestamp];
|
[readProtoBuilder setTimestamp:readReceipt.messageIdTimestamp];
|
||||||
[syncMessageBuilder addRead:[readProtoBuilder build]];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
NSError *error;
|
||||||
|
SSKProtoSyncMessageRead *_Nullable readProto = [readProtoBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !readProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[syncMessageBuilder addRead:readProto];
|
||||||
|
}
|
||||||
return syncMessageBuilder;
|
return syncMessageBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
return [super initWithCoder:coder];
|
return [super initWithCoder:coder];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
||||||
{
|
{
|
||||||
OWSAssert(self.identityKey.length == kIdentityKeyLength);
|
OWSAssert(self.identityKey.length == kIdentityKeyLength);
|
||||||
OWSAssert(self.verificationForRecipientId.length > 0);
|
OWSAssert(self.verificationForRecipientId.length > 0);
|
||||||
|
@ -63,8 +63,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
// will figure that out on it's own.
|
// will figure that out on it's own.
|
||||||
OWSAssert(self.verificationState != OWSVerificationStateNoLongerVerified);
|
OWSAssert(self.verificationState != OWSVerificationStateNoLongerVerified);
|
||||||
|
|
||||||
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
|
||||||
|
|
||||||
SSKProtoVerifiedBuilder *verifiedBuilder = [SSKProtoVerifiedBuilder new];
|
SSKProtoVerifiedBuilder *verifiedBuilder = [SSKProtoVerifiedBuilder new];
|
||||||
verifiedBuilder.destination = self.verificationForRecipientId;
|
verifiedBuilder.destination = self.verificationForRecipientId;
|
||||||
verifiedBuilder.identityKey = self.identityKey;
|
verifiedBuilder.identityKey = self.identityKey;
|
||||||
|
@ -79,8 +77,15 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
// verification sync which is ~1-512 bytes larger then that.
|
// verification sync which is ~1-512 bytes larger then that.
|
||||||
verifiedBuilder.nullMessage = [Cryptography generateRandomBytes:self.paddingBytesLength];
|
verifiedBuilder.nullMessage = [Cryptography generateRandomBytes:self.paddingBytesLength];
|
||||||
|
|
||||||
syncMessageBuilder.verifiedBuilder = verifiedBuilder;
|
NSError *error;
|
||||||
|
SSKProtoVerified *_Nullable verifiedProto = [verifiedBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !verifiedProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
||||||
|
[syncMessageBuilder setVerified:verifiedProto];
|
||||||
return syncMessageBuilder;
|
return syncMessageBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,12 @@
|
||||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "SignalServiceKit-Swift.h"
|
|
||||||
#import "TSAttachment.h"
|
#import "TSAttachment.h"
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@class SSKProtoAttachmentPointer;
|
||||||
|
|
||||||
typedef NS_ENUM(NSUInteger, TSAttachmentPointerState) {
|
typedef NS_ENUM(NSUInteger, TSAttachmentPointerState) {
|
||||||
TSAttachmentPointerStateEnqueued = 0,
|
TSAttachmentPointerStateEnqueued = 0,
|
||||||
TSAttachmentPointerStateDownloading = 1,
|
TSAttachmentPointerStateDownloading = 1,
|
||||||
|
|
|
@ -53,19 +53,23 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
return [super initWithCoder:coder];
|
return [super initWithCoder:coder];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
||||||
{
|
{
|
||||||
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
|
||||||
|
|
||||||
SSKProtoSyncMessageSentBuilder *sentBuilder = [SSKProtoSyncMessageSentBuilder new];
|
SSKProtoSyncMessageSentBuilder *sentBuilder = [SSKProtoSyncMessageSentBuilder new];
|
||||||
[sentBuilder setTimestamp:self.message.timestamp];
|
[sentBuilder setTimestamp:self.message.timestamp];
|
||||||
|
|
||||||
[sentBuilder setDestination:self.sentRecipientId];
|
[sentBuilder setDestination:self.sentRecipientId];
|
||||||
[sentBuilder setMessage:[self.message buildDataMessage:self.sentRecipientId]];
|
[sentBuilder setMessage:[self.message buildDataMessage:self.sentRecipientId]];
|
||||||
[sentBuilder setExpirationStartTimestamp:self.message.timestamp];
|
[sentBuilder setExpirationStartTimestamp:self.message.timestamp];
|
||||||
|
|
||||||
[syncMessageBuilder setSentBuilder:sentBuilder];
|
NSError *error;
|
||||||
|
SSKProtoSyncMessageSent *_Nullable sentProto = [sentBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !sentProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
||||||
|
[syncMessageBuilder setSent:sentProto];
|
||||||
return syncMessageBuilder;
|
return syncMessageBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,28 +48,57 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method should not be overridden, since we want to add random padding to *every* sync message
|
// This method should not be overridden, since we want to add random padding to *every* sync message
|
||||||
- (SSKProtoSyncMessage *)buildSyncMessage
|
- (nullable SSKProtoSyncMessage *)buildSyncMessage
|
||||||
{
|
{
|
||||||
SSKProtoSyncMessageBuilder *builder = [self syncMessageBuilder];
|
SSKProtoSyncMessageBuilder *_Nullable builder = [self syncMessageBuilder];
|
||||||
|
if (!builder) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
// Add a random 1-512 bytes to obscure sync message type
|
// Add a random 1-512 bytes to obscure sync message type
|
||||||
size_t paddingBytesLength = arc4random_uniform(512) + 1;
|
size_t paddingBytesLength = arc4random_uniform(512) + 1;
|
||||||
builder.padding = [Cryptography generateRandomBytes:paddingBytesLength];
|
builder.padding = [Cryptography generateRandomBytes:paddingBytesLength];
|
||||||
|
|
||||||
return [builder build];
|
NSError *error;
|
||||||
|
SSKProtoSyncMessage *_Nullable proto = [builder buildAndReturnError:&error];
|
||||||
|
if (error || !proto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
return proto;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
||||||
{
|
{
|
||||||
OWSFail(@"Abstract method should be overridden in subclass.");
|
OWS_ABSTRACT_METHOD();
|
||||||
|
|
||||||
return [SSKProtoSyncMessageBuilder new];
|
return [SSKProtoSyncMessageBuilder new];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (nullable NSData *)buildPlainTextData:(SignalRecipient *)recipient
|
- (nullable NSData *)buildPlainTextData:(SignalRecipient *)recipient
|
||||||
{
|
{
|
||||||
|
SSKProtoSyncMessage *_Nullable syncMessage = [self buildSyncMessage];
|
||||||
|
if (!syncMessage) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
SSKProtoContentBuilder *contentBuilder = [SSKProtoContentBuilder new];
|
SSKProtoContentBuilder *contentBuilder = [SSKProtoContentBuilder new];
|
||||||
[contentBuilder setSyncMessage:[self buildSyncMessage]];
|
[contentBuilder setSyncMessage:syncMessage];
|
||||||
return [[contentBuilder build] data];
|
|
||||||
|
NSError *error;
|
||||||
|
SSKProtoContent *_Nullable contentProto = [contentBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !contentProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSData *_Nullable data = [contentProto serializedDataAndReturnError:&error];
|
||||||
|
if (error || !data) {
|
||||||
|
OWSFail(@"%@ could not serialize protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -32,17 +32,21 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
return [super initWithCoder:coder];
|
return [super initWithCoder:coder];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
||||||
{
|
{
|
||||||
|
|
||||||
SSKProtoSyncMessageConfigurationBuilder *configurationBuilder =
|
SSKProtoSyncMessageConfigurationBuilder *configurationBuilder =
|
||||||
[SSKProtoSyncMessageConfigurationBuilder new];
|
[SSKProtoSyncMessageConfigurationBuilder new];
|
||||||
configurationBuilder.readReceipts = self.areReadReceiptsEnabled;
|
configurationBuilder.readReceipts = self.areReadReceiptsEnabled;
|
||||||
|
|
||||||
|
NSError *error;
|
||||||
|
SSKProtoSyncMessageConfiguration *_Nullable configurationProto = [configurationBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !configurationProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
SSKProtoSyncMessageBuilder *builder = [SSKProtoSyncMessageBuilder new];
|
SSKProtoSyncMessageBuilder *builder = [SSKProtoSyncMessageBuilder new];
|
||||||
|
builder.configuration = configurationProto;
|
||||||
builder.configurationBuilder = configurationBuilder;
|
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
return [super initWithCoder:coder];
|
return [super initWithCoder:coder];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
||||||
{
|
{
|
||||||
if (self.attachmentIds.count != 1) {
|
if (self.attachmentIds.count != 1) {
|
||||||
DDLogError(@"expected sync contact message to have exactly one attachment, but found %lu",
|
DDLogError(@"expected sync contact message to have exactly one attachment, but found %lu",
|
||||||
|
@ -61,12 +61,16 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
SSKProtoSyncMessageContactsBuilder *contactsBuilder =
|
SSKProtoSyncMessageContactsBuilder *contactsBuilder =
|
||||||
[SSKProtoSyncMessageContactsBuilder new];
|
[SSKProtoSyncMessageContactsBuilder new];
|
||||||
|
|
||||||
[contactsBuilder setBlob:attachmentProto];
|
[contactsBuilder setBlob:attachmentProto];
|
||||||
[contactsBuilder setIsComplete:YES];
|
[contactsBuilder setIsComplete:YES];
|
||||||
|
|
||||||
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
NSError *error;
|
||||||
[syncMessageBuilder setContactsBuilder:contactsBuilder];
|
SSKProtoSyncMessageContacts *_Nullable contactsProto = [contactsBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !contactsProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[syncMessageBuilder setContacts:contactsProto];
|
||||||
|
|
||||||
return syncMessageBuilder;
|
return syncMessageBuilder;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
return [super initWithCoder:coder];
|
return [super initWithCoder:coder];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
- (nullable SSKProtoSyncMessageBuilder *)syncMessageBuilder
|
||||||
{
|
{
|
||||||
|
|
||||||
if (self.attachmentIds.count != 1) {
|
if (self.attachmentIds.count != 1) {
|
||||||
|
@ -37,11 +37,17 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
SSKProtoSyncMessageGroupsBuilder *groupsBuilder =
|
SSKProtoSyncMessageGroupsBuilder *groupsBuilder =
|
||||||
[SSKProtoSyncMessageGroupsBuilder new];
|
[SSKProtoSyncMessageGroupsBuilder new];
|
||||||
|
|
||||||
[groupsBuilder setBlob:attachmentProto];
|
[groupsBuilder setBlob:attachmentProto];
|
||||||
|
|
||||||
|
NSError *error;
|
||||||
|
SSKProtoSyncMessageGroups *_Nullable groupsProto = [groupsBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !groupsProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
SSKProtoSyncMessageBuilder *syncMessageBuilder = [SSKProtoSyncMessageBuilder new];
|
||||||
[syncMessageBuilder setGroupsBuilder:groupsBuilder];
|
[syncMessageBuilder setGroups:groupsProto];
|
||||||
|
|
||||||
return syncMessageBuilder;
|
return syncMessageBuilder;
|
||||||
}
|
}
|
||||||
|
|
|
@ -796,7 +796,14 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||||
contactBuilder.organization = contactName.organizationName.ows_stripped;
|
contactBuilder.organization = contactName.organizationName.ows_stripped;
|
||||||
}
|
}
|
||||||
nameBuilder.displayName = contactName.displayName;
|
nameBuilder.displayName = contactName.displayName;
|
||||||
[contactBuilder setNameBuilder:nameBuilder];
|
|
||||||
|
NSError *error;
|
||||||
|
SSKProtoDataMessageContactName *_Nullable nameProto = [nameBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !nameProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[contactBuilder setName:nameProto];
|
||||||
|
|
||||||
for (OWSContactPhoneNumber *phoneNumber in contact.phoneNumbers) {
|
for (OWSContactPhoneNumber *phoneNumber in contact.phoneNumbers) {
|
||||||
SSKProtoDataMessageContactPhoneBuilder *phoneBuilder =
|
SSKProtoDataMessageContactPhoneBuilder *phoneBuilder =
|
||||||
|
@ -819,7 +826,12 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||||
phoneBuilder.type = SSKProtoDataMessageContactPhoneTypeCustom;
|
phoneBuilder.type = SSKProtoDataMessageContactPhoneTypeCustom;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
[contactBuilder addNumber:phoneBuilder.build];
|
SSKProtoDataMessageContactPhone *_Nullable numberProto = [phoneBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !numberProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[contactBuilder addNumber:numberProto];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (OWSContactEmail *email in contact.emails) {
|
for (OWSContactEmail *email in contact.emails) {
|
||||||
|
@ -843,7 +855,12 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||||
emailBuilder.type = SSKProtoDataMessageContactEmailTypeCustom;
|
emailBuilder.type = SSKProtoDataMessageContactEmailTypeCustom;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
[contactBuilder addEmail:emailBuilder.build];
|
SSKProtoDataMessageContactEmail *_Nullable emailProto = [emailBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !emailProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[contactBuilder addEmail:emailProto];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (OWSContactAddress *address in contact.addresses) {
|
for (OWSContactAddress *address in contact.addresses) {
|
||||||
|
@ -873,7 +890,12 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||||
if (address.country.ows_stripped.length > 0) {
|
if (address.country.ows_stripped.length > 0) {
|
||||||
addressBuilder.country = address.country.ows_stripped;
|
addressBuilder.country = address.country.ows_stripped;
|
||||||
}
|
}
|
||||||
[contactBuilder addAddress:addressBuilder.build];
|
SSKProtoDataMessageContactPostalAddress *_Nullable addressProto = [addressBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !addressProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[contactBuilder addAddress:addressProto];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (contact.avatarAttachmentId != nil) {
|
if (contact.avatarAttachmentId != nil) {
|
||||||
|
@ -881,10 +903,19 @@ NSString *NSStringForContactAddressType(OWSContactAddressType value)
|
||||||
[SSKProtoDataMessageContactAvatarBuilder new];
|
[SSKProtoDataMessageContactAvatarBuilder new];
|
||||||
avatarBuilder.avatar =
|
avatarBuilder.avatar =
|
||||||
[TSAttachmentStream buildProtoForAttachmentId:contact.avatarAttachmentId];
|
[TSAttachmentStream buildProtoForAttachmentId:contact.avatarAttachmentId];
|
||||||
contactBuilder.avatar = [avatarBuilder build];
|
SSKProtoDataMessageContactAvatar *_Nullable avatarProto = [avatarBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !avatarProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
contactBuilder.avatar = avatarProto;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSKProtoDataMessageContact *contactProto = [contactBuilder build];
|
SSKProtoDataMessageContact *_Nullable contactProto = [contactBuilder buildAndReturnError:&error];
|
||||||
|
if (error || !contactProto) {
|
||||||
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
if (contactProto.number.count < 1 && contactProto.email.count < 1 && contactProto.address.count < 1) {
|
if (contactProto.number.count < 1 && contactProto.email.count < 1 && contactProto.address.count < 1) {
|
||||||
OWSProdLogAndFail(@"%@ contact has neither phone, email or address.", self.logTag);
|
OWSProdLogAndFail(@"%@ contact has neither phone, email or address.", self.logTag);
|
||||||
return nil;
|
return nil;
|
||||||
|
|
|
@ -134,14 +134,14 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
[builder setCallMessage:[self buildCallMessage:recipient.recipientId]];
|
[builder setCallMessage:[self buildCallMessage:recipient.recipientId]];
|
||||||
|
|
||||||
NSError *error;
|
NSError *error;
|
||||||
SSKProtoCallMessage *_Nullable result = [builder buildAndReturnError:&error];
|
SSKProtoContent *_Nullable result = [builder buildAndReturnError:&error];
|
||||||
if (error || !result) {
|
if (error || !result) {
|
||||||
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
NSData *_Nullable data = [result serializedDataAndReturnError:&error];
|
NSData *_Nullable data = [result serializedDataAndReturnError:&error];
|
||||||
if (error || !result) {
|
if (error || !data) {
|
||||||
OWSFail(@"%@ could not build protobuf: %@", self.logTag, error);
|
OWSFail(@"%@ could not serialize protobuf: %@", self.logTag, error);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
|
@ -152,25 +152,45 @@ NS_ASSUME_NONNULL_BEGIN
|
||||||
SSKProtoCallMessageBuilder *builder = [SSKProtoCallMessageBuilder new];
|
SSKProtoCallMessageBuilder *builder = [SSKProtoCallMessageBuilder new];
|
||||||
|
|
||||||
if (self.offerMessage) {
|
if (self.offerMessage) {
|
||||||
[builder setOffer:[self.offerMessage asProtobuf]];
|
SSKProtoCallMessageOffer *_Nullable proto = [self.offerMessage asProtobuf];
|
||||||
|
if (!proto) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[builder setOffer:proto];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.answerMessage) {
|
if (self.answerMessage) {
|
||||||
[builder setAnswer:[self.answerMessage asProtobuf]];
|
SSKProtoCallMessageAnswer *_Nullable proto = [self.answerMessage asProtobuf];
|
||||||
|
if (!proto) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[builder setAnswer:proto];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.iceUpdateMessages) {
|
if (self.iceUpdateMessages) {
|
||||||
for (OWSCallIceUpdateMessage *iceUpdateMessage in self.iceUpdateMessages) {
|
for (OWSCallIceUpdateMessage *iceUpdateMessage in self.iceUpdateMessages) {
|
||||||
[builder addIceUpdate:[iceUpdateMessage asProtobuf]];
|
SSKProtoCallMessageIceUpdate *_Nullable proto = [iceUpdateMessage asProtobuf];
|
||||||
|
if (!proto) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[builder addIceUpdate:proto];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.hangupMessage) {
|
if (self.hangupMessage) {
|
||||||
[builder setHangup:[self.hangupMessage asProtobuf]];
|
SSKProtoCallMessageHangup *_Nullable proto = [self.hangupMessage asProtobuf];
|
||||||
|
if (!proto) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[builder setHangup:proto];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.busyMessage) {
|
if (self.busyMessage) {
|
||||||
[builder setBusy:[self.busyMessage asProtobuf]];
|
SSKProtoCallMessageBusy *_Nullable proto = [self.busyMessage asProtobuf];
|
||||||
|
if (!proto) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
[builder setBusy:proto];
|
||||||
}
|
}
|
||||||
|
|
||||||
[builder addLocalProfileKeyIfNecessary:self.thread recipientId:recipientId];
|
[builder addLocalProfileKeyIfNecessary:self.thread recipientId:recipientId];
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -672,6 +672,14 @@ public enum SSKProtoError: Error {
|
||||||
proto.iceUpdate = items
|
proto.iceUpdate = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setIceUpdate(_ wrappedItems: [SSKProtoCallMessageIceUpdate]) {
|
||||||
|
var unwrappedItems = [SignalServiceProtos_CallMessage.IceUpdate]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem.proto)
|
||||||
|
}
|
||||||
|
proto.iceUpdate = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func setHangup(_ valueParam: SSKProtoCallMessageHangup) {
|
@objc public func setHangup(_ valueParam: SSKProtoCallMessageHangup) {
|
||||||
proto.hangup = valueParam.proto
|
proto.hangup = valueParam.proto
|
||||||
}
|
}
|
||||||
|
@ -918,6 +926,14 @@ public enum SSKProtoError: Error {
|
||||||
proto.attachments = items
|
proto.attachments = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setAttachments(_ wrappedItems: [SSKProtoDataMessageQuoteQuotedAttachment]) {
|
||||||
|
var unwrappedItems = [SignalServiceProtos_DataMessage.Quote.QuotedAttachment]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem.proto)
|
||||||
|
}
|
||||||
|
proto.attachments = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func build() throws -> SSKProtoDataMessageQuote {
|
@objc public func build() throws -> SSKProtoDataMessageQuote {
|
||||||
let wrapper = try SSKProtoDataMessageQuote.parseProto(proto)
|
let wrapper = try SSKProtoDataMessageQuote.parseProto(proto)
|
||||||
return wrapper
|
return wrapper
|
||||||
|
@ -1619,18 +1635,42 @@ public enum SSKProtoError: Error {
|
||||||
proto.number = items
|
proto.number = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setNumber(_ wrappedItems: [SSKProtoDataMessageContactPhone]) {
|
||||||
|
var unwrappedItems = [SignalServiceProtos_DataMessage.Contact.Phone]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem.proto)
|
||||||
|
}
|
||||||
|
proto.number = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func addEmail(_ valueParam: SSKProtoDataMessageContactEmail) {
|
@objc public func addEmail(_ valueParam: SSKProtoDataMessageContactEmail) {
|
||||||
var items = proto.email
|
var items = proto.email
|
||||||
items.append(valueParam.proto)
|
items.append(valueParam.proto)
|
||||||
proto.email = items
|
proto.email = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setEmail(_ wrappedItems: [SSKProtoDataMessageContactEmail]) {
|
||||||
|
var unwrappedItems = [SignalServiceProtos_DataMessage.Contact.Email]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem.proto)
|
||||||
|
}
|
||||||
|
proto.email = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func addAddress(_ valueParam: SSKProtoDataMessageContactPostalAddress) {
|
@objc public func addAddress(_ valueParam: SSKProtoDataMessageContactPostalAddress) {
|
||||||
var items = proto.address
|
var items = proto.address
|
||||||
items.append(valueParam.proto)
|
items.append(valueParam.proto)
|
||||||
proto.address = items
|
proto.address = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setAddress(_ wrappedItems: [SSKProtoDataMessageContactPostalAddress]) {
|
||||||
|
var unwrappedItems = [SignalServiceProtos_DataMessage.Contact.PostalAddress]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem.proto)
|
||||||
|
}
|
||||||
|
proto.address = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func setAvatar(_ valueParam: SSKProtoDataMessageContactAvatar) {
|
@objc public func setAvatar(_ valueParam: SSKProtoDataMessageContactAvatar) {
|
||||||
proto.avatar = valueParam.proto
|
proto.avatar = valueParam.proto
|
||||||
}
|
}
|
||||||
|
@ -1776,6 +1816,14 @@ public enum SSKProtoError: Error {
|
||||||
proto.attachments = items
|
proto.attachments = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setAttachments(_ wrappedItems: [SSKProtoAttachmentPointer]) {
|
||||||
|
var unwrappedItems = [SignalServiceProtos_AttachmentPointer]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem.proto)
|
||||||
|
}
|
||||||
|
proto.attachments = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func setGroup(_ valueParam: SSKProtoGroupContext) {
|
@objc public func setGroup(_ valueParam: SSKProtoGroupContext) {
|
||||||
proto.group = valueParam.proto
|
proto.group = valueParam.proto
|
||||||
}
|
}
|
||||||
|
@ -1806,6 +1854,14 @@ public enum SSKProtoError: Error {
|
||||||
proto.contact = items
|
proto.contact = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setContact(_ wrappedItems: [SSKProtoDataMessageContact]) {
|
||||||
|
var unwrappedItems = [SignalServiceProtos_DataMessage.Contact]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem.proto)
|
||||||
|
}
|
||||||
|
proto.contact = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func build() throws -> SSKProtoDataMessage {
|
@objc public func build() throws -> SSKProtoDataMessage {
|
||||||
let wrapper = try SSKProtoDataMessage.parseProto(proto)
|
let wrapper = try SSKProtoDataMessage.parseProto(proto)
|
||||||
return wrapper
|
return wrapper
|
||||||
|
@ -2019,6 +2075,14 @@ public enum SSKProtoError: Error {
|
||||||
proto.timestamp = items
|
proto.timestamp = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setTimestamp(_ wrappedItems: [UInt64]) {
|
||||||
|
var unwrappedItems = [UInt64]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem)
|
||||||
|
}
|
||||||
|
proto.timestamp = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func build() throws -> SSKProtoReceiptMessage {
|
@objc public func build() throws -> SSKProtoReceiptMessage {
|
||||||
let wrapper = try SSKProtoReceiptMessage.parseProto(proto)
|
let wrapper = try SSKProtoReceiptMessage.parseProto(proto)
|
||||||
return wrapper
|
return wrapper
|
||||||
|
@ -2425,6 +2489,14 @@ public enum SSKProtoError: Error {
|
||||||
proto.numbers = items
|
proto.numbers = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setNumbers(_ wrappedItems: [String]) {
|
||||||
|
var unwrappedItems = [String]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem)
|
||||||
|
}
|
||||||
|
proto.numbers = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func build() throws -> SSKProtoSyncMessageBlocked {
|
@objc public func build() throws -> SSKProtoSyncMessageBlocked {
|
||||||
let wrapper = try SSKProtoSyncMessageBlocked.parseProto(proto)
|
let wrapper = try SSKProtoSyncMessageBlocked.parseProto(proto)
|
||||||
return wrapper
|
return wrapper
|
||||||
|
@ -2709,6 +2781,14 @@ public enum SSKProtoError: Error {
|
||||||
proto.read = items
|
proto.read = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setRead(_ wrappedItems: [SSKProtoSyncMessageRead]) {
|
||||||
|
var unwrappedItems = [SignalServiceProtos_SyncMessage.Read]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem.proto)
|
||||||
|
}
|
||||||
|
proto.read = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func setBlocked(_ valueParam: SSKProtoSyncMessageBlocked) {
|
@objc public func setBlocked(_ valueParam: SSKProtoSyncMessageBlocked) {
|
||||||
proto.blocked = valueParam.proto
|
proto.blocked = valueParam.proto
|
||||||
}
|
}
|
||||||
|
@ -3091,6 +3171,14 @@ public enum SSKProtoError: Error {
|
||||||
proto.members = items
|
proto.members = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setMembers(_ wrappedItems: [String]) {
|
||||||
|
var unwrappedItems = [String]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem)
|
||||||
|
}
|
||||||
|
proto.members = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func setAvatar(_ valueParam: SSKProtoAttachmentPointer) {
|
@objc public func setAvatar(_ valueParam: SSKProtoAttachmentPointer) {
|
||||||
proto.avatar = valueParam.proto
|
proto.avatar = valueParam.proto
|
||||||
}
|
}
|
||||||
|
@ -3481,6 +3569,14 @@ public enum SSKProtoError: Error {
|
||||||
proto.members = items
|
proto.members = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc public func setMembers(_ wrappedItems: [String]) {
|
||||||
|
var unwrappedItems = [String]()
|
||||||
|
for wrappedItem in wrappedItems {
|
||||||
|
unwrappedItems.append(wrappedItem)
|
||||||
|
}
|
||||||
|
proto.members = unwrappedItems
|
||||||
|
}
|
||||||
|
|
||||||
@objc public func setAvatar(_ valueParam: SSKProtoGroupDetailsAvatar) {
|
@objc public func setAvatar(_ valueParam: SSKProtoGroupDetailsAvatar) {
|
||||||
proto.avatar = valueParam.proto
|
proto.avatar = valueParam.proto
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue