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

185 lines
6.6 KiB
Objective-C

#import "TGInternalGifSearchResultItemView.h"
#import "TGStringUtils.h"
#import "TGCheckButtonView.h"
#import "TGImageView.h"
#import "TGInternalGifSearchResultItem.h"
#import "TGImageInfo.h"
#import "TGSharedFileSignals.h"
#import "TGSharedPhotoSignals.h"
#import "TGSharedMediaUtils.h"
@interface TGInternalGifSearchResultItemView ()
{
TGCheckButtonView *_checkButton;
SMetaDisposable *_itemSelectedDisposable;
}
@end
@implementation TGInternalGifSearchResultItemView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self != nil)
{
#ifdef DEBUG
UIView *overlayView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 6.0f, 6.0f)];
overlayView.backgroundColor = [UIColor greenColor];
overlayView.alpha = 0.8f;
overlayView.userInteractionEnabled = false;
[self addSubview:overlayView];
#endif
}
return self;
}
- (void)setItem:(TGInternalGifSearchResultItem *)item synchronously:(bool)synchronously
{
[super setItem:item synchronously:synchronously];
if (item.selectionContext != nil)
{
if (_checkButton == nil)
{
_checkButton = [[TGCheckButtonView alloc] initWithStyle:TGCheckButtonStyleMedia];
[_checkButton addTarget:self action:@selector(checkButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:_checkButton];
}
if (_itemSelectedDisposable == nil)
_itemSelectedDisposable = [[SMetaDisposable alloc] init];
__weak TGInternalGifSearchResultItemView *weakSelf = self;
[_checkButton setSelected:[item.selectionContext isItemSelected:item.selectableMediaItem] animated:false];
[_itemSelectedDisposable setDisposable:[[item.selectionContext itemInformativeSelectedSignal:item.selectableMediaItem] startWithNext:^(TGMediaSelectionChange *next)
{
__strong TGInternalGifSearchResultItemView *strongSelf = weakSelf;
if (strongSelf == nil)
return;
if (next.sender != strongSelf->_checkButton)
[strongSelf->_checkButton setSelected:next.selected animated:next.animated];
}]];
}
if (item.webSearchResult.photo != nil) {
[self setImageSignal:[TGSharedPhotoSignals cachedRemoteThumbnail:item.webSearchResult.photo.imageInfo size:CGSizeMake(132.0f, 132.0f) pixelProcessingBlock:nil cacheVariantKey:@"gridView" threadPool:[TGSharedMediaUtils sharedMediaImageProcessingThreadPool] memoryCache:[TGSharedMediaUtils sharedMediaMemoryImageCache] diskCache:[TGSharedMediaUtils sharedMediaTemporaryPersistentCache]]];
} else {
CGSize dimensions = CGSizeZero;
NSString *legacyThumbnailCacheUri = [item.webSearchResult.document.thumbnailInfo closestImageUrlWithSize:CGSizeMake(100.0f, 100.0f) resultingSize:&dimensions pickLargest:true];
dimensions.width *= 100.0f;
dimensions.height *= 100.0f;
for (id attribute in item.webSearchResult.document.attributes) {
if ([attribute isKindOfClass:[TGDocumentAttributeImageSize class]]) {
dimensions = ((TGDocumentAttributeImageSize *)attribute).size;
break;
} else if ([attribute isKindOfClass:[TGDocumentAttributeVideo class]]) {
dimensions = ((TGDocumentAttributeVideo *)attribute).size;
break;
}
}
CGSize thumbnailSize = CGSizeMake(90.0f, 90.0f);
CGSize renderSize = CGSizeZero;
if (dimensions.width < dimensions.height)
{
renderSize.height = CGFloor((dimensions.height * thumbnailSize.width / dimensions.width));
renderSize.width = thumbnailSize.width;
}
else
{
renderSize.width = CGFloor((dimensions.width * thumbnailSize.height / dimensions.height));
renderSize.height = thumbnailSize.height;
}
legacyThumbnailCacheUri = [item.webSearchResult.document.thumbnailInfo closestImageUrlWithSize:renderSize resultingSize:&dimensions pickLargest:true];
NSString *filePreviewUri = nil;
if ((item.webSearchResult.document.documentId != 0) && legacyThumbnailCacheUri.length != 0)
{
NSMutableString *previewUri = [[NSMutableString alloc] initWithString:@"file-thumbnail://?"];
if (item.webSearchResult.document.documentId != 0)
[previewUri appendFormat:@"id=%" PRId64 "", item.webSearchResult.document.documentId];
[previewUri appendString:@"&forceHighQuality=1"];
[previewUri appendFormat:@"&file-name=%@", [item.webSearchResult.document.fileName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[previewUri appendFormat:@"&width=%d&height=%d&renderWidth=%d&renderHeight=%d", (int)thumbnailSize.width, (int)thumbnailSize.height, (int)renderSize.width, (int)renderSize.height];
if (legacyThumbnailCacheUri != nil)
[previewUri appendFormat:@"&legacy-thumbnail-cache-url=%@", legacyThumbnailCacheUri];
filePreviewUri = previewUri;
}
[self setImageUri:filePreviewUri synchronously:synchronously];
}
}
- (void)layoutSubviews
{
[super layoutSubviews];
_checkButton.frame = (CGRect){{self.frame.size.width - _checkButton.frame.size.width - 2.0f, 2.0f}, _checkButton.frame.size};
}
- (void)checkButtonPressed
{
TGInternalGifSearchResultItem *item = (TGInternalGifSearchResultItem *)self.item;
[_checkButton setSelected:!_checkButton.selected animated:true];
[item.selectionContext setItem:item.selectableMediaItem selected:_checkButton.selected animated:false sender:_checkButton];
}
- (void)setHidden:(bool)hidden animated:(bool)animated
{
if (hidden == self.imageView.hidden)
return;
self.imageView.hidden = hidden;
if (animated)
{
if (!hidden)
{
for (UIView *view in self.subviews)
{
if (view != self.imageView)
view.alpha = 0.0f;
}
}
[UIView animateWithDuration:0.2 animations:^
{
if (!hidden)
{
for (UIView *view in self.subviews)
{
if (view != self.imageView)
view.alpha = 1.0f;
}
}
}];
}
else
{
for (UIView *view in self.subviews)
{
if (view != self.imageView)
view.alpha = hidden ? 0.0f : 1.0f;
}
}
}
@end