mirror of
https://github.com/danog/Telegram.git
synced 2024-12-03 09:57:46 +01:00
185 lines
6.6 KiB
Objective-C
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
|