mirror of
https://github.com/danog/Telegram.git
synced 2024-12-12 09:29:55 +01:00
105 lines
3.6 KiB
Objective-C
105 lines
3.6 KiB
Objective-C
#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"];
|
|
}
|
|
|
|
+ (NSString *)localAudioFilePathForLocalAudioId:(int64_t)audioId
|
|
{
|
|
return [[self localAudioFileDirectoryForLocalAudioId:audioId] stringByAppendingPathComponent:@"audio.m4a"];
|
|
}
|
|
|
|
+ (NSString *)localAudioFilePathForRemoteAudioId:(int64_t)audioId
|
|
{
|
|
return [[self localAudioFileDirectoryForRemoteAudioId:audioId] stringByAppendingPathComponent:@"audio.m4a"];
|
|
}
|
|
|
|
@end
|