1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-03 09:57:46 +01:00
Telegram/Telegraph/TGGenericPeerMediaGalleryImageItem.m
2016-02-25 01:03:51 +01:00

113 lines
4.5 KiB
Objective-C

#import "TGGenericPeerMediaGalleryImageItem.h"
#import "TGImageInfo.h"
#import "TGRemoteImageView.h"
#import "TGStringUtils.h"
#import "TGUser.h"
#import "TGAppDelegate.h"
@interface TGGenericPeerMediaGalleryImageItem ()
{
int64_t _imageId;
TGImageInfo *_legacyImageInfo;
}
@end
@implementation TGGenericPeerMediaGalleryImageItem
- (instancetype)initWithImageId:(int64_t)imageId orLocalId:(int64_t)localId peerId:(int64_t)peerId messageId:(int32_t)messageId legacyImageInfo:(TGImageInfo *)legacyImageInfo
{
CGSize imageSize = CGSizeZero;
NSString *legacyCacheUrl = [legacyImageInfo closestImageUrlWithSize:CGSizeMake(1000.0f, 1000.0f) resultingSize:&imageSize];
NSString *legacyThumbnailCacheUrl = [legacyImageInfo closestImageUrlWithSize:CGSizeZero resultingSize:NULL];
NSString *legacyFilePath = nil;
if ([legacyCacheUrl hasPrefix:@"file://"])
legacyFilePath = [legacyCacheUrl substringFromIndex:@"file://".length];
else
legacyFilePath = [[TGRemoteImageView sharedCache] pathForCachedData:legacyCacheUrl];
NSMutableString *imageUri = [[NSMutableString alloc] init];
[imageUri appendString:@"media-gallery-image://?"];
if (imageId != 0)
[imageUri appendFormat:@"&id=%" PRId64 "", imageId];
else if (localId != 0)
[imageUri appendFormat:@"&local-id=%" PRId64 "", localId];
[imageUri appendFormat:@"&legacy-file-path=%@", legacyFilePath];
NSString *escapedLegacyThumbnailCacheUrl = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)legacyThumbnailCacheUrl, (__bridge CFStringRef)@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-", (__bridge CFStringRef)@"&?= ", kCFStringEncodingUTF8);
[imageUri appendFormat:@"&legacy-thumbnail-cache-url=%@", escapedLegacyThumbnailCacheUrl];
[imageUri appendFormat:@"&width=%d", (int)imageSize.width];
[imageUri appendFormat:@"&height=%d", (int)imageSize.height];
[imageUri appendFormat:@"&renderWidth=%d", (int)imageSize.width];
[imageUri appendFormat:@"&renderHeight=%d", (int)imageSize.height];
[imageUri appendFormat:@"&messageId=%" PRId32 "", (int32_t)messageId];
[imageUri appendFormat:@"&conversationId=%" PRId64 "", (int64_t)peerId];
NSString *escapedCacheUrl = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)legacyCacheUrl, (__bridge CFStringRef)@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-", (__bridge CFStringRef)@"&?= :/", kCFStringEncodingUTF8);
[imageUri appendFormat:@"&legacy-cache-url=%@", escapedCacheUrl];
self = [super initWithUri:imageUri imageSize:imageSize];
if (self != nil)
{
_imageId = imageId;
_legacyImageInfo = legacyImageInfo;
_messageId = messageId;
}
return self;
}
- (BOOL)isEqual:(id)object
{
if (![super isEqual:object])
return false;
if ([object isKindOfClass:[TGGenericPeerMediaGalleryImageItem class]])
{
return TGObjectCompare(_authorPeer, ((TGGenericPeerMediaGalleryImageItem *)object).authorPeer) && ABS(_date - ((TGGenericPeerMediaGalleryImageItem *)object).date) < DBL_EPSILON && _messageId == ((TGGenericPeerMediaGalleryImageItem *)object).messageId;
}
return false;
}
- (NSString *)filePathForRemoteImageId:(int64_t)remoteImageId
{
static NSString *filesDirectory = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
filesDirectory = [[TGAppDelegate documentsPath] stringByAppendingPathComponent:@"files"];
});
NSString *photoDirectoryName = [[NSString alloc] initWithFormat:@"image-remote-%" PRIx64 "", remoteImageId];
NSString *photoDirectory = [filesDirectory stringByAppendingPathComponent:photoDirectoryName];
NSString *imagePath = [photoDirectory stringByAppendingPathComponent:@"image.jpg"];
return imagePath;
}
- (NSString *)filePath
{
NSString *localPath = [self filePathForRemoteImageId:_imageId];
if ([[NSFileManager defaultManager] fileExistsAtPath:localPath])
return localPath;
NSString *legacyCacheUrl = [_legacyImageInfo closestImageUrlWithSize:CGSizeMake(1000.0f, 1000.0f) resultingSize:NULL];
NSString *legacyFilePath = nil;
if ([legacyCacheUrl hasPrefix:@"file://"])
legacyFilePath = [legacyCacheUrl substringFromIndex:@"file://".length];
else
legacyFilePath = [[TGRemoteImageView sharedCache] pathForCachedData:legacyCacheUrl];
return legacyFilePath;
}
@end