1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-12 09:29:55 +01:00
Telegram/legacy/TelegraphKit/TGAudioMediaAttachment.m

105 lines
3.6 KiB
Mathematica
Raw Normal View History

2015-10-01 18:19:52 +02:00
#import "TGAudioMediaAttachment.h"
#import "TGAppDelegate.h"
@implementation TGAudioMediaAttachment
- (instancetype)init
{
self = [super init];
if (self != nil)
{
self.type = TGAudioMediaAttachmentType;
}
return self;
}
- (void)serialize:(NSMutableData *)data
{
int dataLengthPtr = (int)data.length;
int32_t zero = 0;
[data appendBytes:&zero length:4];
[data appendBytes:&_audioId length:8];
[data appendBytes:&_accessHash length:8];
[data appendBytes:&_datacenterId length:4];
[data appendBytes:&_localAudioId length:8];
[data appendBytes:&_duration length:4];
[data appendBytes:&_fileSize length:4];
NSData *audioUriData = [_audioUri dataUsingEncoding:NSUTF8StringEncoding];
int32_t audioUriLength = (int32_t)audioUriData.length;
[data appendBytes:&audioUriLength length:4];
if (audioUriLength != 0)
[data appendData:audioUriData];
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];
TGAudioMediaAttachment *attachment = [[TGAudioMediaAttachment alloc] init];
if (attachment != nil)
{
[is read:(uint8_t *)&attachment->_audioId maxLength:8];
[is read:(uint8_t *)&attachment->_accessHash maxLength:8];
[is read:(uint8_t *)&attachment->_datacenterId maxLength:4];
[is read:(uint8_t *)&attachment->_localAudioId maxLength:8];
[is read:(uint8_t *)&attachment->_duration maxLength:4];
[is read:(uint8_t *)&attachment->_fileSize maxLength:4];
int32_t audioUriLength = 0;
[is read:(uint8_t *)&audioUriLength maxLength:4];
if (audioUriLength != 0)
{
uint8_t *audioUriBytes = malloc(audioUriLength);
[is read:audioUriBytes maxLength:audioUriLength];
attachment.audioUri = [[NSString alloc] initWithBytesNoCopy:audioUriBytes length:audioUriLength encoding:NSUTF8StringEncoding freeWhenDone:true];
}
}
return attachment;
}
+ (NSString *)localAudioFileDirectoryForLocalAudioId:(int64_t)audioId
{
NSString *documentsDirectory = [TGAppDelegate documentsPath];
NSString *audiosDirectory = [documentsDirectory stringByAppendingPathComponent:@"audio"];
return [audiosDirectory stringByAppendingPathComponent:[[NSString alloc] initWithFormat:@"local%" PRIx64 "", audioId]];
}
+ (NSString *)localAudioFileDirectoryForRemoteAudioId:(int64_t)audioId
{
NSString *documentsDirectory = [TGAppDelegate documentsPath];
NSString *audiosDirectory = [documentsDirectory stringByAppendingPathComponent:@"audio"];
return [audiosDirectory stringByAppendingPathComponent:[[NSString alloc] initWithFormat:@"%" PRIx64 "", audioId]];
}
- (NSString *)localFilePath
{
if (_localAudioId != 0)
return [[TGAudioMediaAttachment localAudioFileDirectoryForLocalAudioId:_localAudioId] stringByAppendingPathComponent:@"audio.m4a"];
return [[TGAudioMediaAttachment localAudioFileDirectoryForRemoteAudioId:_audioId] stringByAppendingPathComponent:@"audio.m4a"];
}
2016-02-25 01:03:51 +01:00
+ (NSString *)localAudioFilePathForLocalAudioId:(int64_t)audioId
{
return [[self localAudioFileDirectoryForLocalAudioId:audioId] stringByAppendingPathComponent:@"audio.m4a"];
}
+ (NSString *)localAudioFilePathForRemoteAudioId:(int64_t)audioId
{
return [[self localAudioFileDirectoryForRemoteAudioId:audioId] stringByAppendingPathComponent:@"audio.m4a"];
}
2015-10-01 18:19:52 +02:00
@end