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

101 lines
2.9 KiB
Objective-C

#import "TGLocationMediaAttachment.h"
@implementation TGVenueAttachment
- (instancetype)initWithTitle:(NSString *)title address:(NSString *)address provider:(NSString *)provider venueId:(NSString *)venueId
{
self = [super init];
if (self != nil)
{
_title = title;
_address = address;
_provider = provider;
_venueId = venueId;
}
return self;
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
return [self initWithTitle:[aDecoder decodeObjectForKey:@"title"] address:[aDecoder decodeObjectForKey:@"address"] provider:[aDecoder decodeObjectForKey:@"provider"] venueId:[aDecoder decodeObjectForKey:@"venueId"]];
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
if (_title != nil)
[aCoder encodeObject:_title forKey:@"title"];
if (_address != nil)
[aCoder encodeObject:_address forKey:@"address"];
if (_provider != nil)
[aCoder encodeObject:_provider forKey:@"provider"];
if (_venueId != nil)
[aCoder encodeObject:_venueId forKey:@"venueId"];
}
@end
@implementation TGLocationMediaAttachment
- (id)init
{
self = [super init];
if (self != nil)
{
self.type = TGLocationMediaAttachmentType;
}
return self;
}
- (void)serialize:(NSMutableData *)data
{
int dataLengthPtr = (int)data.length;
int zero = 0;
[data appendBytes:&zero length:4];
[data appendBytes:&_latitude length:8];
[data appendBytes:&_longitude length:8];
NSData *venueData = nil;
if (_venue != nil)
venueData = [NSKeyedArchiver archivedDataWithRootObject:_venue];
int32_t venueDataLength = (int32_t)venueData.length;
[data appendBytes:&venueDataLength length:4];
[data appendData:venueData];
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];
TGLocationMediaAttachment *locationAttachment = [[TGLocationMediaAttachment alloc] init];
double tmp = 0;
[is read:(uint8_t *)&tmp maxLength:8];
locationAttachment.latitude = tmp;
tmp = 0;
[is read:(uint8_t *)&tmp maxLength:8];
locationAttachment.longitude = tmp;
if (dataLength >= 8 + 8 + 4)
{
int32_t venueDataLength = 0;
[is read:(uint8_t *)&venueDataLength maxLength:4];
if (venueDataLength > 0)
{
uint8_t *venueBytes = malloc(venueDataLength);
[is read:venueBytes maxLength:venueDataLength];
NSData *venueData = [[NSData alloc] initWithBytesNoCopy:venueBytes length:venueDataLength freeWhenDone:true];
locationAttachment.venue = [NSKeyedUnarchiver unarchiveObjectWithData:venueData];
}
}
return locationAttachment;
}
@end