mirror of
https://github.com/danog/Telegram.git
synced 2024-12-03 09:57:46 +01:00
192 lines
8.3 KiB
Objective-C
192 lines
8.3 KiB
Objective-C
#import "TGPhotoMessageViewModel.h"
|
|
|
|
#import "TGModernViewContext.h"
|
|
|
|
#import "TGModernRemoteImageView.h"
|
|
#import "TGMessageImageViewModel.h"
|
|
#import "TGModernRemoteImageViewModel.h"
|
|
#import "TGModernImageViewModel.h"
|
|
#import "TGModernColorViewModel.h"
|
|
#import "TGModernButtonViewModel.h"
|
|
|
|
#import "TGMessage.h"
|
|
|
|
#import "TGStringUtils.h"
|
|
|
|
@interface TGPhotoMessageViewModel ()
|
|
{
|
|
TGImageMediaAttachment *_imageMedia;
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation TGPhotoMessageViewModel
|
|
|
|
- (instancetype)initWithMessage:(TGMessage *)message imageMedia:(TGImageMediaAttachment *)imageMedia authorPeer:(id)authorPeer context:(TGModernViewContext *)context forwardPeer:(id)forwardPeer forwardAuthor:(id)forwardAuthor forwardMessageId:(int32_t)forwardMessageId replyHeader:(TGMessage *)replyHeader replyAuthor:(id)replyAuthor viaUser:(TGUser *)viaUser
|
|
{
|
|
TGImageInfo *previewImageInfo = imageMedia.imageInfo;
|
|
|
|
CGSize largestSize = CGSizeZero;
|
|
NSString *legacyCacheUrl = [imageMedia.imageInfo closestImageUrlWithSize:CGSizeMake(1136, 1136) resultingSize:&largestSize pickLargest:true];
|
|
if (largestSize.width <= 90.0f + FLT_EPSILON || largestSize.height <= 90.0f + FLT_EPSILON) {
|
|
legacyCacheUrl = [imageMedia.imageInfo imageUrlForSizeLargerThanSize:CGSizeMake(1000.0f, 1000.0f) actualSize:&largestSize];
|
|
}
|
|
|
|
NSString *legacyThumbnailCacheUrl = [imageMedia.imageInfo closestImageUrlWithSize:CGSizeZero resultingSize:NULL];
|
|
|
|
int64_t localImageId = 0;
|
|
if (imageMedia.imageId == 0 && legacyCacheUrl.length != 0)
|
|
{
|
|
localImageId = murMurHash32(legacyCacheUrl);
|
|
}
|
|
|
|
if (legacyCacheUrl != nil && (imageMedia.imageId != 0 || localImageId != 0))
|
|
{
|
|
previewImageInfo = [[TGImageInfo alloc] init];
|
|
|
|
NSMutableString *previewUri = [[NSMutableString alloc] initWithString:@"photo-thumbnail://?"];
|
|
if (imageMedia.imageId != 0)
|
|
[previewUri appendFormat:@"id=%" PRId64 "", imageMedia.imageId];
|
|
else
|
|
[previewUri appendFormat:@"local-id=%" PRId64 "", localImageId];
|
|
|
|
CGSize thumbnailSize = CGSizeZero;
|
|
CGSize renderSize = CGSizeZero;
|
|
[TGImageMessageViewModel calculateImageSizesForImageSize:largestSize thumbnailSize:&thumbnailSize renderSize:&renderSize squareAspect:message.messageLifetime > 0 && message.messageLifetime <= 60 && message.layer >= 17];
|
|
|
|
[previewUri appendFormat:@"&width=%d&height=%d&renderWidth=%d&renderHeight=%d", (int)thumbnailSize.width, (int)thumbnailSize.height, (int)renderSize.width, (int)renderSize.height];
|
|
|
|
NSString *legacyFilePath = nil;
|
|
if ([legacyCacheUrl hasPrefix:@"file://"])
|
|
legacyFilePath = [legacyCacheUrl substringFromIndex:@"file://".length];
|
|
else
|
|
legacyFilePath = [[TGRemoteImageView sharedCache] pathForCachedData:legacyCacheUrl];
|
|
|
|
if (legacyFilePath != nil)
|
|
[previewUri appendFormat:@"&legacy-file-path=%@", legacyFilePath];
|
|
|
|
if (legacyThumbnailCacheUrl != nil)
|
|
[previewUri appendFormat:@"&legacy-thumbnail-cache-url=%@", [TGStringUtils stringByEscapingForURL:legacyThumbnailCacheUrl]];
|
|
|
|
if (message.messageLifetime > 0 && message.messageLifetime <= 60 && message.layer >= 17)
|
|
[previewUri appendString:@"&secret=1"];
|
|
|
|
[previewImageInfo addImageWithSize:thumbnailSize url:previewUri];
|
|
}
|
|
|
|
self = [super initWithMessage:message imageInfo:previewImageInfo authorPeer:authorPeer context:context forwardPeer:forwardPeer forwardAuthor:forwardAuthor forwardMessageId:forwardMessageId replyHeader:replyHeader replyAuthor:replyAuthor viaUser:viaUser caption:imageMedia.caption textCheckingResults:imageMedia.textCheckingResults];
|
|
if (self != nil)
|
|
{
|
|
_imageMedia = imageMedia;
|
|
|
|
_canDownload = _imageMedia.imageId != 0 || (![[imageMedia.imageInfo imageUrlForLargestSize:NULL] hasPrefix:@"http"]);
|
|
|
|
if (message.messageLifetime > 0 && message.messageLifetime <= 60 && message.layer >= 17)
|
|
{
|
|
self.isSecret = true;
|
|
|
|
[self enableInstantPreview];
|
|
}
|
|
|
|
if (self.isSecret)
|
|
[self.imageModel setAdditionalDataString:[self defaultAdditionalDataString]];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)updateMessage:(TGMessage *)message viewStorage:(TGModernViewStorage *)viewStorage sizeUpdated:(bool *)sizeUpdated
|
|
{
|
|
[super updateMessage:message viewStorage:viewStorage sizeUpdated:sizeUpdated];
|
|
|
|
TGImageMediaAttachment *imageMedia = nil;
|
|
for (id attachment in message.mediaAttachments)
|
|
{
|
|
if ([attachment isKindOfClass:[TGImageMediaAttachment class]])
|
|
{
|
|
imageMedia = attachment;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (imageMedia != nil)
|
|
{
|
|
TGImageInfo *previewImageInfo = imageMedia.imageInfo;
|
|
|
|
CGSize largestSize = CGSizeZero;
|
|
NSString *legacyCacheUrl = [imageMedia.imageInfo closestImageUrlWithSize:CGSizeMake(1136, 1136) resultingSize:&largestSize pickLargest:true];
|
|
NSString *legacyThumbnailCacheUrl = [imageMedia.imageInfo closestImageUrlWithSize:CGSizeZero resultingSize:NULL];
|
|
|
|
int64_t localImageId = 0;
|
|
if (imageMedia.imageId == 0 && legacyCacheUrl.length != 0)
|
|
{
|
|
localImageId = murMurHash32(legacyCacheUrl);
|
|
}
|
|
|
|
if (legacyCacheUrl != nil && (imageMedia.imageId != 0 || localImageId != 0))
|
|
{
|
|
previewImageInfo = [[TGImageInfo alloc] init];
|
|
|
|
NSMutableString *previewUri = [[NSMutableString alloc] initWithString:@"photo-thumbnail://?"];
|
|
if (imageMedia.imageId != 0)
|
|
[previewUri appendFormat:@"id=%" PRId64 "", imageMedia.imageId];
|
|
else
|
|
[previewUri appendFormat:@"local-id=%" PRId64 "", localImageId];
|
|
|
|
CGSize thumbnailSize = CGSizeZero;
|
|
CGSize renderSize = CGSizeZero;
|
|
[TGImageMessageViewModel calculateImageSizesForImageSize:largestSize thumbnailSize:&thumbnailSize renderSize:&renderSize squareAspect:message.messageLifetime > 0 && message.messageLifetime <= 60 && message.layer >= 17];
|
|
|
|
[previewUri appendFormat:@"&width=%d&height=%d&renderWidth=%d&renderHeight=%d", (int)thumbnailSize.width, (int)thumbnailSize.height, (int)renderSize.width, (int)renderSize.height];
|
|
|
|
NSString *legacyFilePath = nil;
|
|
if ([legacyCacheUrl hasPrefix:@"file://"])
|
|
legacyFilePath = [legacyCacheUrl substringFromIndex:@"file://".length];
|
|
else
|
|
legacyFilePath = [[TGRemoteImageView sharedCache] pathForCachedData:legacyCacheUrl];
|
|
|
|
if (legacyFilePath != nil)
|
|
[previewUri appendFormat:@"&legacy-file-path=%@", legacyFilePath];
|
|
|
|
if (legacyThumbnailCacheUrl != nil)
|
|
[previewUri appendFormat:@"&legacy-thumbnail-cache-url=%@", [TGStringUtils stringByEscapingForURL:legacyThumbnailCacheUrl]];
|
|
|
|
if (message.messageLifetime > 0 && message.messageLifetime <= 60 && message.layer >= 17)
|
|
[previewUri appendString:@"&secret=1"];
|
|
|
|
[previewImageInfo addImageWithSize:renderSize url:previewUri];
|
|
}
|
|
|
|
[self updateImageInfo:previewImageInfo];
|
|
}
|
|
|
|
_canDownload = _imageMedia.imageId != 0 || (![[imageMedia.imageInfo imageUrlForLargestSize:NULL] hasPrefix:@"http"]);
|
|
}
|
|
|
|
- (void)updateMessageAttributes
|
|
{
|
|
[super updateMessageAttributes];
|
|
|
|
//_overlayIconModel.hidden = [_context isSecretMessageViewed:_mid];
|
|
//_overlayIconMaskLeftModel.hidden = [_context isSecretMessageScreenshotted:_mid];
|
|
//_overlayIconMaskRightModel.hidden = _overlayIconMaskLeftModel.hidden;
|
|
//_overlayIconMaskTopModel.hidden = _overlayIconMaskLeftModel.hidden;
|
|
//_overlayIconMaskBottomModel.hidden = _overlayIconMaskLeftModel.hidden;
|
|
}
|
|
|
|
- (bool)instantPreviewGesture
|
|
{
|
|
return false;
|
|
}
|
|
|
|
- (void)bindSpecialViewsToContainer:(UIView *)container viewStorage:(TGModernViewStorage *)viewStorage atItemPosition:(CGPoint)itemPosition
|
|
{
|
|
[super bindSpecialViewsToContainer:container viewStorage:viewStorage atItemPosition:itemPosition];
|
|
}
|
|
|
|
- (void)layoutForContainerSize:(CGSize)containerSize
|
|
{
|
|
[super layoutForContainerSize:containerSize];
|
|
}
|
|
|
|
@end
|