1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-12 09:29:55 +01:00
Telegram/legacy/TelegraphKit/TGReplyMessageMediaAttachment.m
2015-10-01 19:19:52 +03:00

67 lines
2.0 KiB
Objective-C

#import "TGReplyMessageMediaAttachment.h"
#import "TGMessage.h"
#import "PSKeyValueDecoder.h"
#import "PSKeyValueEncoder.h"
@implementation TGReplyMessageMediaAttachment
- (id)init
{
self = [super init];
if (self != nil)
{
self.type = TGReplyMessageMediaAttachmentType;
}
return self;
}
- (id)copyWithZone:(NSZone *)__unused zone
{
TGReplyMessageMediaAttachment *attachment = [[TGReplyMessageMediaAttachment alloc] init];
attachment->_replyMessageId = _replyMessageId;
attachment->_replyMessage = [_replyMessage copy];
return attachment;
}
- (void)serialize:(NSMutableData *)data
{
int dataLengthPtr = (int)data.length;
int zero = 0;
[data appendBytes:&zero length:4];
PSKeyValueEncoder *encoder = [[PSKeyValueEncoder alloc] init];
[encoder encodeObject:_replyMessage forCKey:"replyMessage"];
[encoder encodeInt32:_replyMessageId forCKey:"replyMessageId"];
NSData *replyMessageData = [encoder data];
[data appendData:replyMessageData];
int dataLength = (int)(data.length - dataLengthPtr - 4);
[data replaceBytesInRange:NSMakeRange(dataLengthPtr, 4) withBytes:&dataLength];
}
- (TGMediaAttachment *)parseMediaAttachment:(NSInputStream *)is
{
int dataLength = 0;
[is read:(uint8_t *)&dataLength maxLength:4];
TGReplyMessageMediaAttachment *messageAttachment = [[TGReplyMessageMediaAttachment alloc] init];
uint8_t *replyMessageBytes = malloc(dataLength);
[is read:replyMessageBytes maxLength:dataLength];
NSData *replyMessageData = [NSData dataWithBytesNoCopy:replyMessageBytes length:dataLength freeWhenDone:true];
PSKeyValueDecoder *decoder = [[PSKeyValueDecoder alloc] initWithData:replyMessageData];
TGMessage *replyMessage = (TGMessage *)[decoder decodeObjectForCKey:"replyMessage"];
int32_t replyMessageId = [decoder decodeInt32ForCKey:"replyMessageId"];
messageAttachment.replyMessage = replyMessage;
messageAttachment.replyMessageId = replyMessageId;
return messageAttachment;
}
@end