Swiftgram/submodules/LegacyComponents/Sources/TGLocationLiveSessionItemView.m
2020-02-22 15:38:54 +04:00

128 lines
4.6 KiB
Objective-C

#import "TGLocationLiveSessionItemView.h"
#import "LegacyComponentsInternal.h"
#import "TGUser.h"
#import "TGConversation.h"
#import "TGLetteredAvatarView.h"
#import "TGLocationLiveElapsedView.h"
@interface TGLocationLiveSessionItemView ()
{
TGLetteredAvatarView *_avatarView;
TGLocationLiveElapsedView *_elapsedView;
UILabel *_label;
id<SDisposable> _disposable;
}
@end
@implementation TGLocationLiveSessionItemView
- (instancetype)initWithMessage:(TGMessage *)message peer:(id)peer remaining:(SSignal *)remaining action:(void (^)(void))action
{
bool isUser = [peer isKindOfClass:[TGUser class]];
NSString *title = isUser ? ((TGUser *)peer).displayName : ((TGConversation *)peer).chatTitle;
self = [super initWithTitle:@"" type:TGMenuSheetButtonTypeDefault fontSize:20.0 action:action];
if (self != nil)
{
_label = [[UILabel alloc] init];
_label.backgroundColor = [UIColor clearColor];
_label.font = _button.titleLabel.font;
_label.textColor = [UIColor blackColor];
_label.text = title;
[_label sizeToFit];
[_button addSubview:_label];
_avatarView = [[TGLetteredAvatarView alloc] init];
[_avatarView setSingleFontSize:18.0f doubleFontSize:18.0f useBoldFont:false];
[self addSubview:_avatarView];
CGFloat diameter = 36.0f;
static UIImage *placeholder = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
UIGraphicsBeginImageContextWithOptions(CGSizeMake(diameter, diameter), false, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
//!placeholder
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextFillEllipseInRect(context, CGRectMake(0.0f, 0.0f, diameter, diameter));
CGContextSetStrokeColorWithColor(context, UIColorRGB(0xd9d9d9).CGColor);
CGContextSetLineWidth(context, 1.0f);
CGContextStrokeEllipseInRect(context, CGRectMake(0.5f, 0.5f, diameter - 1.0f, diameter - 1.0f));
placeholder = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
});
NSString *avatarUrl = isUser ? ((TGUser *)peer).photoFullUrlSmall : ((TGConversation *)peer).chatPhotoFullSmall;
if (avatarUrl.length != 0)
{
_avatarView.fadeTransitionDuration = 0.3;
if (![avatarUrl isEqualToString:_avatarView.currentUrl])
[_avatarView loadImage:avatarUrl filter:@"circle:36x36" placeholder:placeholder];
}
else
{
if (isUser)
{
[_avatarView loadUserPlaceholderWithSize:CGSizeMake(diameter, diameter) uid:((TGUser *)peer).uid firstName:((TGUser *)peer).firstName lastName:((TGUser *)peer).lastName placeholder:placeholder];
}
else
{
[_avatarView loadGroupPlaceholderWithSize:CGSizeMake(diameter, diameter) conversationId:((TGConversation *)peer).conversationId title:((TGConversation *)peer).chatTitle placeholder:placeholder];
}
}
_elapsedView = [[TGLocationLiveElapsedView alloc] init];
[self addSubview:_elapsedView];
TGLocationMediaAttachment *location = nil;
for (TGMediaAttachment *attachment in message.mediaAttachments)
{
if (attachment.type == TGLocationMediaAttachmentType)
{
location = (TGLocationMediaAttachment *)attachment;
break;
}
}
__weak TGLocationLiveSessionItemView *weakSelf = self;
_disposable = [remaining startWithNext:^(NSNumber *next)
{
__strong TGLocationLiveSessionItemView *strongSelf = weakSelf;
if (strongSelf != nil)
[strongSelf->_elapsedView setRemaining:next.intValue period:location.period];
}];
}
return self;
}
- (void)dealloc
{
[_disposable dispose];
}
- (void)setPallete:(TGMenuSheetPallete *)pallete
{
[super setPallete:pallete];
_label.textColor = pallete.textColor;
[_elapsedView setColor:pallete.accentColor];
}
- (void)layoutSubviews
{
[super layoutSubviews];
_label.frame = CGRectMake(74.0f, (self.frame.size.height - ceil(_label.frame.size.height)) / 2.0f, self.frame.size.width - 74.0f - 52.0f - 10.0f, ceil(_label.frame.size.height));
_avatarView.frame = CGRectMake(23.0f, 11.0f, 36.0f, 36.0f);
_elapsedView.frame = CGRectMake(self.frame.size.width - 30.0f - 22.0f, round((self.frame.size.height - 30.0f) / 2.0f), 30.0f, 30.0f);
}
@end