mirror of
https://github.com/danog/Telegram.git
synced 2024-12-03 09:57:46 +01:00
196 lines
4.8 KiB
Objective-C
196 lines
4.8 KiB
Objective-C
#import "TGWallpapersCollectionItem.h"
|
|
|
|
#import "ActionStage.h"
|
|
|
|
#import "TGWallpapersCollectionItemView.h"
|
|
#import "TGWallpaperManager.h"
|
|
|
|
#import "TGImageUtils.h"
|
|
|
|
@interface TGWallpapersCollectionItem ()
|
|
{
|
|
NSArray *_wallpaperItems;
|
|
TGWallpaperInfo *_selectedWallpaperInfo;
|
|
|
|
bool _requestedList;
|
|
bool _firstBind;
|
|
|
|
SEL _action;
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation TGWallpapersCollectionItem
|
|
|
|
- (instancetype)initWithAction:(SEL)action title:(NSString *)title
|
|
{
|
|
self = [super init];
|
|
if (self != nil)
|
|
{
|
|
_actionHandle = [[ASHandle alloc] initWithDelegate:self releaseOnMainThread:true];
|
|
|
|
_title = title;
|
|
|
|
_wallpaperItems = [[TGWallpaperManager instance] builtinWallpaperList];
|
|
_selectedWallpaperInfo = [[TGWallpaperManager instance] currentWallpaperInfo];
|
|
|
|
_firstBind = true;
|
|
|
|
_action = action;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
[_actionHandle reset];
|
|
[ActionStageInstance() removeWatcher:self];
|
|
}
|
|
|
|
- (Class)itemViewClass
|
|
{
|
|
return [TGWallpapersCollectionItemView class];
|
|
}
|
|
|
|
- (CGSize)itemSizeForContainerSize:(CGSize)containerSize
|
|
{
|
|
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
|
|
{
|
|
CGSize screenSize = TGScreenSize();
|
|
CGFloat widescreenWidth = MAX(screenSize.width, screenSize.height);
|
|
|
|
CGSize itemSize = CGSizeZero;
|
|
|
|
if ([UIScreen mainScreen].scale >= 2.0f - FLT_EPSILON)
|
|
{
|
|
if (widescreenWidth >= 736.0f - FLT_EPSILON)
|
|
{
|
|
itemSize = CGSizeMake(122.0f, 216.0f);
|
|
}
|
|
else if (widescreenWidth >= 667.0f - FLT_EPSILON)
|
|
{
|
|
itemSize = CGSizeMake(108.0f, 163.0f);
|
|
}
|
|
else
|
|
{
|
|
itemSize = CGSizeMake(91.0f, 162.0f);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
itemSize = CGSizeMake(91.0f, 162.0f);
|
|
}
|
|
|
|
return CGSizeMake(containerSize.width, itemSize.height + 59.0f);
|
|
}
|
|
else
|
|
{
|
|
if (containerSize.width > 320.0f + FLT_EPSILON)
|
|
return CGSizeMake(containerSize.width, 207.0f);
|
|
else
|
|
return CGSizeMake(containerSize.width, 181.0f);
|
|
}
|
|
}
|
|
|
|
- (void)bindView:(TGWallpapersCollectionItemView *)view
|
|
{
|
|
[super bindView:view];
|
|
|
|
view.itemHandle = _actionHandle;
|
|
|
|
[((TGWallpapersCollectionItemView *)self.view) setSelectedWallpaperInfo:_selectedWallpaperInfo];
|
|
[view setTitle:_title];
|
|
[view setIcon:_icon];
|
|
[view setWallpaperInfos:_wallpaperItems synchronous:_firstBind];
|
|
_firstBind = false;
|
|
|
|
if (!_requestedList)
|
|
{
|
|
_requestedList = true;
|
|
|
|
[ActionStageInstance() watchForPaths:@[
|
|
//@"/tg/assets/wallpaperList",
|
|
@"/tg/assets/currentWallpaperInfo"
|
|
] watcher:self];
|
|
//[ActionStageInstance() requestActor:@"/tg/assets/wallpaperList/(cached)" options:nil flags:0 watcher:self];
|
|
}
|
|
}
|
|
|
|
- (void)unbindView
|
|
{
|
|
((TGWallpapersCollectionItemView *)self.view).itemHandle = nil;
|
|
|
|
[super unbindView];
|
|
}
|
|
|
|
- (void)setTitle:(NSString *)title
|
|
{
|
|
_title = title;
|
|
|
|
[((TGWallpapersCollectionItemView *)self.view) setTitle:_title];
|
|
}
|
|
|
|
- (void)setIcon:(UIImage *)icon
|
|
{
|
|
_icon = icon;
|
|
|
|
[((TGWallpapersCollectionItemView *)self.view) setIcon:_icon];
|
|
}
|
|
|
|
- (void)setCurrentWallpaperInfo:(TGWallpaperInfo *)currentWallpaperInfo
|
|
{
|
|
_selectedWallpaperInfo = currentWallpaperInfo;
|
|
[((TGWallpapersCollectionItemView *)self.view) setSelectedWallpaperInfo:_selectedWallpaperInfo];
|
|
}
|
|
|
|
- (void)itemSelected:(id)actionTarget
|
|
{
|
|
if (_action != NULL && [actionTarget respondsToSelector:_action])
|
|
{
|
|
#pragma clang diagnostic push
|
|
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
|
|
[actionTarget performSelector:_action];
|
|
#pragma clang diagnostic pop
|
|
}
|
|
}
|
|
|
|
#pragma mark -
|
|
|
|
- (void)actionStageResourceDispatched:(NSString *)path resource:(id)resource arguments:(id)__unused arguments
|
|
{
|
|
if ([path hasPrefix:@"/tg/assets/wallpaperList"])
|
|
{
|
|
[self actorCompleted:ASStatusSuccess path:path result:resource];
|
|
}
|
|
else if ([path hasPrefix:@"/tg/assets/currentWallpaperInfo"])
|
|
{
|
|
TGDispatchOnMainThread(^
|
|
{
|
|
[self setCurrentWallpaperInfo:resource];
|
|
});
|
|
}
|
|
}
|
|
|
|
- (void)actorCompleted:(int)status path:(NSString *)path result:(id)__unused result
|
|
{
|
|
if ([path hasPrefix:@"/tg/assets/wallpaperList"])
|
|
{
|
|
dispatch_async(dispatch_get_main_queue(), ^
|
|
{
|
|
if (status == ASStatusSuccess)
|
|
{
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
- (void)actionStageActionRequested:(NSString *)action options:(id)options
|
|
{
|
|
if ([action isEqualToString:@"wallpaperImagePressed"])
|
|
{
|
|
[_interfaceHandle requestAction:action options:options];
|
|
}
|
|
}
|
|
|
|
@end
|