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

135 lines
3.9 KiB
Objective-C

#import "TGSignalImageViewModel.h"
#import "TGSignalImageView.h"
#import "TGSignalImageViewWithProgress.h"
typedef enum {
TGSignalImageViewModelOverlayNone = 0,
TGSignalImageViewModelOverlayProgress,
TGSignalImageViewModelOverlayDownload,
TGSignalImageViewModelOverlayPlay
} TGSignalImageViewModelOverlay;
@interface TGSignalImageViewModel ()
{
SSignal *(^_signalGenerator)();
NSString *_identifier;
CGFloat _progress;
TGSignalImageViewModelOverlay _overlay;
}
@end
@implementation TGSignalImageViewModel
- (instancetype)init
{
self = [super init];
if (self != nil)
{
_progress = -1.0f;
}
return self;
}
- (Class)viewClass
{
return (_showProgress || _manualProgress) ? [TGSignalImageViewWithProgress class] : [TGSignalImageView class];
}
- (void)setSignalGenerator:(SSignal *(^)())signalGenerator identifier:(NSString *)identifier
{
_signalGenerator = [signalGenerator copy];
_identifier = identifier;
}
- (void)_updateViewStateIdentifier
{
self.viewStateIdentifier = [[NSString alloc] initWithFormat:@"TGSignalImageView/%@", _identifier];
}
- (void)bindViewToContainer:(UIView *)container viewStorage:(TGModernViewStorage *)viewStorage
{
[self _updateViewStateIdentifier];
[super bindViewToContainer:container viewStorage:viewStorage];
if (_manualProgress) {
if ([[self boundView] isKindOfClass:[TGSignalImageViewWithProgress class]]) {
switch (_overlay) {
case TGSignalImageViewModelOverlayProgress:
((TGSignalImageViewWithProgress *)self.boundView).progress = _progress;
break;
case TGSignalImageViewModelOverlayDownload:
[((TGSignalImageViewWithProgress *)self.boundView) setDownload];
break;
case TGSignalImageViewModelOverlayNone:
[((TGSignalImageViewWithProgress *)self.boundView) setNone];
break;
case TGSignalImageViewModelOverlayPlay:
[((TGSignalImageViewWithProgress *)self.boundView) setPlay];
break;
}
}
} else {
if (_showProgress)
((TGSignalImageViewWithProgress *)self.boundView).progress = _progress;
}
((TGSignalImageView *)self.boundView).transitionContentRect = _transitionContentRect;
if (_signalGenerator)
[((TGSignalImageView *)self.boundView) setSignal:_signalGenerator()];
}
- (void)unbindView:(TGModernViewStorage *)viewStorage
{
if (_showProgress)
_progress = ((TGSignalImageViewWithProgress *)self.boundView).progress;
[super unbindView:viewStorage];
}
- (void)setProgress:(float)progress animated:(bool)animated {
_progress = progress;
_overlay = TGSignalImageViewModelOverlayProgress;
if ([[self boundView] isKindOfClass:[TGSignalImageViewWithProgress class]]) {
[((TGSignalImageViewWithProgress *)self.boundView) setProgress:progress animated:animated];
}
}
- (void)setDownload {
_overlay = TGSignalImageViewModelOverlayDownload;
if ([[self boundView] isKindOfClass:[TGSignalImageViewWithProgress class]]) {
[((TGSignalImageViewWithProgress *)self.boundView) setDownload];
}
}
- (void)setNone {
_overlay = TGSignalImageViewModelOverlayNone;
if ([[self boundView] isKindOfClass:[TGSignalImageViewWithProgress class]]) {
[((TGSignalImageViewWithProgress *)self.boundView) setNone];
}
}
- (void)setPlay {
_overlay = TGSignalImageViewModelOverlayPlay;
if ([[self boundView] isKindOfClass:[TGSignalImageViewWithProgress class]]) {
[((TGSignalImageViewWithProgress *)self.boundView) setPlay];
}
}
- (void)reload {
if (_signalGenerator) {
[((TGSignalImageView *)self.boundView) setSignal:_signalGenerator()];
}
}
- (void)setVideoPathSignal:(SSignal *)videoPathSignal {
[((TGSignalImageView *)self.boundView) setVideoPathSignal:videoPathSignal];
}
@end