1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-04 10:27:46 +01:00
Telegram/legacy/TelegraphKit/TGLocalMessageMetaMediaAttachment.m
2015-10-01 19:19:52 +03:00

102 lines
3.2 KiB
Objective-C

#import "TGLocalMessageMetaMediaAttachment.h"
#import "TGImageInfo.h"
@implementation TGLocalMessageMetaMediaAttachment
@synthesize imageInfoList = _imageInfoList;
@synthesize imageUrlToDataFile = _imageUrlToDataFile;
@synthesize localMediaId = _localMediaId;
- (id)init
{
self = [super init];
if (self != nil)
{
self.type = TGLocalMessageMetaMediaAttachmentType;
_imageInfoList = [[NSMutableArray alloc] init];
_imageUrlToDataFile = [[NSMutableDictionary alloc] init];
}
return self;
}
- (void)serialize:(NSMutableData *)data
{
int dataLengthPtr = (int)data.length;
int zero = 0;
[data appendBytes:&zero length:4];
int count = (int)_imageInfoList.count;
[data appendBytes:&count length:4];
for (int i = 0; i < count; i++)
{
[(TGImageInfo *)[_imageInfoList objectAtIndex:i] serialize:data];
}
count = (int)_imageUrlToDataFile.count;
[data appendBytes:&count length:4];
[_imageUrlToDataFile enumerateKeysAndObjectsUsingBlock:^(NSString *imageUrl, NSString *filePath, __unused BOOL *stop)
{
NSData *byteData = [imageUrl dataUsingEncoding:NSUTF8StringEncoding];
int length = (int)byteData.length;
[data appendBytes:&length length:4];
[data appendData:byteData];
byteData = [filePath dataUsingEncoding:NSUTF8StringEncoding];
length = (int)byteData.length;
[data appendBytes:&length length:4];
[data appendData:byteData];
}];
[data appendBytes:&_localMediaId length:4];
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];
TGLocalMessageMetaMediaAttachment *attachment = [[TGLocalMessageMetaMediaAttachment alloc] init];
int count = 0;
[is read:(uint8_t *)&count maxLength:4];
for (int i = 0; i < count; i++)
{
TGImageInfo *imageInfo = [TGImageInfo deserialize:is];
if (imageInfo != nil)
[attachment.imageInfoList addObject:imageInfo];
}
count = 0;
[is read:(uint8_t *)&count maxLength:4];
for (int i = 0; i < count; i++)
{
int length = 0;
[is read:(uint8_t *)&length maxLength:4];
uint8_t *bytes = malloc(length);
[is read:bytes maxLength:length];
NSString *imageUrl = [[NSString alloc] initWithBytesNoCopy:bytes length:length encoding:NSUTF8StringEncoding freeWhenDone:true];
length = 0;
[is read:(uint8_t *)&length maxLength:4];
bytes = malloc(length);
[is read:bytes maxLength:length];
NSString *filePath = [[NSString alloc] initWithBytesNoCopy:bytes length:length encoding:NSUTF8StringEncoding freeWhenDone:true];
if (imageUrl != nil && filePath != nil)
[attachment.imageUrlToDataFile setObject:filePath forKey:imageUrl];
}
int mediaId = 0;
[is read:(uint8_t *)&mediaId maxLength:4];
attachment.localMediaId = mediaId;
return attachment;
}
@end