1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-02 09:27:55 +01:00
Telegram/Telegraph/TGAttachmentSheetEmbedItemView.m
2015-10-01 19:19:52 +03:00

100 lines
3.0 KiB
Objective-C

#import "TGAttachmentSheetEmbedItemView.h"
#import "TGViewController.h"
#import "TGImageUtils.h"
#import "TGWebPageMediaAttachment.h"
#import "TGAudioSessionManager.h"
@interface TGAttachmentSheetEmbedItemView () <UIWebViewDelegate>
{
CGSize _embedSize;
UIWebView *_webView;
UIActivityIndicatorView *_activityIndicator;
id<SDisposable> _currentAudioSession;
}
@end
@implementation TGAttachmentSheetEmbedItemView
- (instancetype)initWithWebPage:(TGWebPageMediaAttachment *)webPage
{
self = [super init];
if (self != nil)
{
_currentAudioSession = [[TGAudioSessionManager instance] requestSessionWithType:TGAudioSessionTypePlayVideo interrupted:^
{
}];
CGSize screenSize = [TGViewController screenSizeForInterfaceOrientation:UIInterfaceOrientationPortrait];
CGFloat screenWidth = MIN(screenSize.width, screenSize.height);
_embedSize = TGFitSize(CGSizeMake(webPage.embedSize.width, webPage.embedSize.height), CGSizeMake(screenWidth, CGFloor(screenWidth * 1.2f)));
_activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
_activityIndicator.hidden = true;
_webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, _embedSize.width, _embedSize.height)];
_webView.backgroundColor = [UIColor blackColor];
CGFloat factor = _embedSize.width / (_embedSize.width + 10.0f);
_webView.transform = CGAffineTransformMakeScale(factor, factor);
[self addSubview:_webView];
_webView.allowsInlineMediaPlayback = true;
_webView.delegate = self;
NSURL *url = [NSURL URLWithString:webPage.embedUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *referer = [[NSString alloc] initWithFormat:@"%@://%@", [url scheme], [url host]];
[request setValue:referer forHTTPHeaderField:@"Referer"];
[_webView loadRequest:request];
[self addSubview:_activityIndicator];
}
return self;
}
- (void)dealloc
{
[_currentAudioSession dispose];
}
- (CGFloat)preferredHeight
{
return _embedSize.height + 6.0f;
}
- (bool)wantsFullSeparator
{
return true;
}
- (void)layoutSubviews
{
[super layoutSubviews];
_webView.center = CGPointMake(self.frame.size.width / 2.0f, self.frame.size.height / 2.0f);
_activityIndicator.center = CGPointMake(self.frame.size.width / 2.0f, self.frame.size.height / 2.0f);
}
- (void)webViewDidStartLoad:(UIWebView *)__unused webView
{
_activityIndicator.hidden = false;
[_activityIndicator startAnimating];
}
- (void)webViewDidFinishLoad:(UIWebView *)__unused webView
{
_activityIndicator.hidden = true;
[_activityIndicator stopAnimating];
}
- (void)webView:(UIWebView *)__unused webView didFailLoadWithError:(NSError *)__unused error
{
_activityIndicator.hidden = true;
[_activityIndicator stopAnimating];
}
@end