1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-04 02:17:51 +01:00
Telegram/Watch/Extension/TGNeoAudioMessageViewModel.m
2016-02-25 01:03:51 +01:00

125 lines
5.1 KiB
Objective-C

#import "TGNeoAudioMessageViewModel.h"
#import "TGBridgeMessage.h"
@interface TGNeoAudioMessageViewModel ()
{
TGNeoLabelViewModel *_nameModel;
TGNeoLabelViewModel *_durationModel;
bool _isVoiceMessage;
int32_t _duration;
UIColor *_iconTint;
NSString *_spinnerName;
}
@end
@implementation TGNeoAudioMessageViewModel
- (instancetype)initWithMessage:(TGBridgeMessage *)message type:(TGNeoMessageType)type users:(NSDictionary *)users context:(TGBridgeContext *)context
{
self = [super initWithMessage:message type:type users:users context:context];
if (self != nil)
{
TGBridgeAudioMediaAttachment *audioAttachment = nil;
TGBridgeDocumentMediaAttachment *documentAttachment = nil;
for (TGBridgeMediaAttachment *attachment in message.media)
{
if ([attachment isKindOfClass:[TGBridgeAudioMediaAttachment class]])
{
audioAttachment = (TGBridgeAudioMediaAttachment *)attachment;
_isVoiceMessage = true;
_duration = audioAttachment.duration;
break;
}
else if ([attachment isKindOfClass:[TGBridgeDocumentMediaAttachment class]])
{
documentAttachment = (TGBridgeDocumentMediaAttachment *)attachment;
_isVoiceMessage = documentAttachment.isVoice;
_duration = documentAttachment.duration;
break;
}
}
NSString *title = TGLocalized(@"Message.Audio");
NSString *subtitle = @"";
if (!_isVoiceMessage)
{
[self removeSubmodel:self.forwardHeaderModel];
self.forwardHeaderModel = nil;
if (documentAttachment.title.length > 0)
title = documentAttachment.title;
else
title = documentAttachment.fileName;
subtitle = documentAttachment.performer.length > 0 ? documentAttachment.performer : @"";
}
else
{
NSInteger durationMinutes = floor(_duration / 60.0);
NSInteger durationSeconds = _duration % 60;
subtitle = [NSString stringWithFormat:@"%ld:%02ld", (long)durationMinutes, (long)durationSeconds];
}
_nameModel = [[TGNeoLabelViewModel alloc] initWithText:title font:[UIFont systemFontOfSize:12 weight:UIFontWeightMedium] color:[self normalColorForMessage:message] attributes:nil];
_nameModel.multiline = false;
[self addSubmodel:_nameModel];
_durationModel = [[TGNeoLabelViewModel alloc] initWithText:subtitle font:[UIFont systemFontOfSize:12] color:[self subtitleColorForMessage:message] attributes:nil];
_durationModel.multiline = false;
[self addSubmodel:_durationModel];
_iconTint = [self accentColorForMessage:message];
if (message.outgoing)
_spinnerName = @"BubbleSpinner";
else
_spinnerName = @"BubbleSpinnerIncoming";
}
return self;
}
- (CGSize)layoutWithContainerSize:(CGSize)containerSize
{
CGSize contentContainerSize = [self contentContainerSizeWithContainerSize:containerSize];
CGSize headerSize = [self layoutHeaderModelsWithContainerSize:contentContainerSize];
CGFloat maxContentWidth = headerSize.width;
CGFloat textTopOffset = headerSize.height;
CGFloat leftOffset = 26 + TGNeoBubbleMessageMetaSpacing;
UIEdgeInsets inset = UIEdgeInsetsMake(textTopOffset + 1.5f, TGNeoBubbleMessageViewModelInsets.left, 0, 0);
NSDictionary *audioButtonDictionary = @{};
if (_isVoiceMessage)
{
audioButtonDictionary = @{ TGNeoMessageAudioIcon: @"MediaAudioPlay",
TGNeoMessageAudioIconTint: _iconTint,
TGNeoMessageAudioAnimatedIcon: _spinnerName,
TGNeoMessageAudioButtonHasBackground: @false };
inset.left -= 4;
leftOffset -= 5;
}
contentContainerSize = CGSizeMake(containerSize.width - TGNeoBubbleMessageViewModelInsets.left - TGNeoBubbleMessageViewModelInsets.right - leftOffset, FLT_MAX);
CGSize nameSize = [_nameModel contentSizeWithContainerSize:contentContainerSize];
CGSize durationSize = [_durationModel contentSizeWithContainerSize:contentContainerSize];
maxContentWidth = MAX(maxContentWidth, MAX(nameSize.width, durationSize.width) + leftOffset);
_nameModel.frame = CGRectMake(TGNeoBubbleMessageViewModelInsets.left + leftOffset, textTopOffset, nameSize.width, 14);
_durationModel.frame = CGRectMake(TGNeoBubbleMessageViewModelInsets.left + leftOffset, CGRectGetMaxY(_nameModel.frame), durationSize.width, 14);
[self addAdditionalLayout:@{ TGNeoContentInset: [NSValue valueWithUIEdgeInsets:inset], TGNeoMessageAudioButton: audioButtonDictionary } withKey:TGNeoMessageMetaGroup];
CGSize contentSize = CGSizeMake(inset.left + TGNeoBubbleMessageViewModelInsets.right + maxContentWidth, CGRectGetMaxY(_durationModel.frame) + TGNeoBubbleMessageViewModelInsets.bottom);
[super layoutWithContainerSize:contentSize];
return contentSize;
}
@end