147 lines
5.3 KiB
Objective-C
147 lines
5.3 KiB
Objective-C
//
|
|
// TLChatBaseViewController+MessageDisplayView.m
|
|
// TLChat
|
|
//
|
|
// Created by 李伯坤 on 16/3/17.
|
|
// Copyright © 2016年 李伯坤. All rights reserved.
|
|
//
|
|
|
|
#import "TLChatBaseViewController+MessageDisplayView.h"
|
|
#import "TLChatBaseViewController+ChatBar.h"
|
|
#import "TLTextDisplayView.h"
|
|
|
|
@implementation TLChatBaseViewController (MessageDisplayView)
|
|
|
|
#pragma mark - # Public Methods
|
|
- (void)addToShowMessage:(TLMessage *)message
|
|
{
|
|
message.showTime = [self p_needShowTime:message.date];
|
|
[self.messageDisplayView addMessage:message];
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
[self.messageDisplayView scrollToBottomWithAnimation:YES];
|
|
});
|
|
}
|
|
|
|
- (void)addVoiceRecordingMessage:(TLMessage *)message
|
|
{
|
|
message.date = [NSDate date];
|
|
}
|
|
|
|
- (void)resetChatTVC
|
|
{
|
|
[self.messageDisplayView resetMessageView];
|
|
lastDateInterval = 0;
|
|
msgAccumulate = 0;
|
|
}
|
|
|
|
#pragma mark - # Delegate
|
|
//MARK: TLChatMessageDisplayViewDelegate
|
|
// chatView 点击事件
|
|
- (void)chatMessageDisplayViewDidTouched:(TLChatMessageDisplayView *)chatTVC
|
|
{
|
|
[self dismissKeyboard];
|
|
}
|
|
|
|
// chatView 获取历史记录
|
|
- (void)chatMessageDisplayView:(TLChatMessageDisplayView *)chatTVC getRecordsFromDate:(NSDate *)date count:(NSUInteger)count completed:(void (^)(NSDate *, NSArray *, BOOL))completed
|
|
{
|
|
TLWeakSelf(self);
|
|
[[TLMessageManager sharedInstance] messageRecordForPartner:[self.partner chat_userID] fromDate:date count:count complete:^(NSArray *array, BOOL hasMore) {
|
|
if (array.count > 0) {
|
|
int count = 0;
|
|
NSTimeInterval tm = 0;
|
|
for (TLMessage *message in array) {
|
|
if (++count > MAX_SHOWTIME_MSG_COUNT || tm == 0 || message.date.timeIntervalSince1970 - tm > MAX_SHOWTIME_MSG_SECOND) {
|
|
tm = message.date.timeIntervalSince1970;
|
|
count = 0;
|
|
message.showTime = YES;
|
|
}
|
|
if (message.ownerTyper == TLMessageOwnerTypeSelf) {
|
|
message.fromUser = weakself.user;
|
|
}
|
|
else {
|
|
if ([weakself.partner chat_userType] == TLChatUserTypeUser) {
|
|
message.fromUser = weakself.partner;
|
|
}
|
|
else if ([weakself.partner chat_userType] == TLChatUserTypeGroup){
|
|
if ([weakself.partner respondsToSelector:@selector(groupMemberByID:)]) {
|
|
message.fromUser = [weakself.partner groupMemberByID:message.friendID];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
completed(date, array, hasMore);
|
|
}];
|
|
}
|
|
|
|
- (BOOL)chatMessageDisplayView:(TLChatMessageDisplayView *)chatTVC deleteMessage:(TLMessage *)message
|
|
{
|
|
return [[TLMessageManager sharedInstance] deleteMessageByMsgID:message.messageID];
|
|
}
|
|
|
|
- (void)chatMessageDisplayView:(TLChatMessageDisplayView *)chatTVC didClickUserAvatar:(TLUser *)user
|
|
{
|
|
if ([self respondsToSelector:@selector(didClickedUserAvatar:)]) {
|
|
[self didClickedUserAvatar:user];
|
|
}
|
|
}
|
|
|
|
- (void)chatMessageDisplayView:(TLChatMessageDisplayView *)chatTVC didDoubleClickMessage:(TLMessage *)message
|
|
{
|
|
if (message.messageType == TLMessageTypeText) {
|
|
TLTextDisplayView *displayView = [[TLTextDisplayView alloc] init];
|
|
[displayView showInView:self.navigationController.view withAttrText:[(TLTextMessage *)message attrText] animation:YES];
|
|
}
|
|
}
|
|
|
|
- (void)chatMessageDisplayView:(TLChatMessageDisplayView *)chatTVC didClickMessage:(TLMessage *)message
|
|
{
|
|
if (message.messageType == TLMessageTypeImage && [self respondsToSelector:@selector(didClickedImageMessages:atIndex:)]) {
|
|
// 展示聊天图片
|
|
[[TLMessageManager sharedInstance] chatImagesAndVideosForPartnerID:[self.partner chat_userID] completed:^(NSArray *imagesData) {
|
|
NSInteger index = -1;
|
|
for (int i = 0; i < imagesData.count; i ++) {
|
|
if ([message.messageID isEqualToString:[imagesData[i] messageID]]) {
|
|
index = i;
|
|
break;
|
|
}
|
|
}
|
|
if (index >= 0) {
|
|
[self didClickedImageMessages:imagesData atIndex:index];
|
|
}
|
|
}];
|
|
}
|
|
else if (message.messageType == TLMessageTypeVoice) {
|
|
if ([(TLVoiceMessage *)message msgStatus] == TLVoiceMessageStatusNormal) {
|
|
// 播放语音消息
|
|
[(TLVoiceMessage *)message setMsgStatus:TLVoiceMessageStatusPlaying];
|
|
|
|
[[TLAudioPlayer sharedAudioPlayer] playAudioAtPath:[(TLVoiceMessage *)message path] complete:^(BOOL finished) {
|
|
[(TLVoiceMessage *)message setMsgStatus:TLVoiceMessageStatusNormal];
|
|
[self.messageDisplayView updateMessage:message];
|
|
}];
|
|
}
|
|
else {
|
|
// 停止播放语音消息
|
|
[[TLAudioPlayer sharedAudioPlayer] stopPlayingAudio];
|
|
}
|
|
}
|
|
}
|
|
|
|
#pragma mark - # Private Methods
|
|
static NSTimeInterval lastDateInterval = 0;
|
|
static NSInteger msgAccumulate = 0;
|
|
- (BOOL)p_needShowTime:(NSDate *)date
|
|
{
|
|
if (++msgAccumulate > MAX_SHOWTIME_MSG_COUNT || lastDateInterval == 0 || date.timeIntervalSince1970 - lastDateInterval > MAX_SHOWTIME_MSG_SECOND) {
|
|
lastDateInterval = date.timeIntervalSince1970;
|
|
msgAccumulate = 0;
|
|
return YES;
|
|
}
|
|
return NO;
|
|
}
|
|
|
|
|
|
@end
|