mirror of
https://github.com/danog/Telegram.git
synced 2024-12-02 09:27:55 +01:00
135 lines
3.9 KiB
Objective-C
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
|