From 3e8437ae559487362fae3525beb79c534c213a51 Mon Sep 17 00:00:00 2001 From: 单军华 Date: Thu, 12 Jul 2018 13:44:34 +0800 Subject: [PATCH] bug修复和功能优化 --- screendisplay/Pods/EaseUI/EaseUI/EMUIKit/ViewController/EaseConversationListViewController.m | 321 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 321 insertions(+), 0 deletions(-) diff --git a/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/ViewController/EaseConversationListViewController.m b/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/ViewController/EaseConversationListViewController.m new file mode 100755 index 0000000..1b58891 --- /dev/null +++ b/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/ViewController/EaseConversationListViewController.m @@ -0,0 +1,321 @@ +/************************************************************ + * * Hyphenate CONFIDENTIAL + * __________________ + * Copyright (C) 2016 Hyphenate Inc. All rights reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of Hyphenate Inc. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from Hyphenate Inc. + */ + +#import "EaseConversationListViewController.h" + +#import "EaseEmotionEscape.h" +#import "EaseConversationCell.h" +#import "EaseConvertToCommonEmoticonsHelper.h" +#import "EaseMessageViewController.h" +#import "NSDate+Category.h" +#import "EaseLocalDefine.h" + +@interface EaseConversationListViewController () + +@end + +@implementation EaseConversationListViewController + +-(void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + [self registerNotifications]; +} + +-(void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + [self unregisterNotifications]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + [self tableViewDidTriggerHeaderRefresh]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + // Return the number of rows in the section. + return [self.dataArray count]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSString *CellIdentifier = [EaseConversationCell cellIdentifierWithModel:nil]; + EaseConversationCell *cell = (EaseConversationCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + + // Configure the cell... + if (cell == nil) { + cell = [[EaseConversationCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + if ([self.dataArray count] <= indexPath.row) { + return cell; + } + + id<IConversationModel> model = [self.dataArray objectAtIndex:indexPath.row]; + cell.model = model; + + if (_dataSource && [_dataSource respondsToSelector:@selector(conversationListViewController:latestMessageTitleForConversationModel:)]) { + NSMutableAttributedString *attributedText = [[_dataSource conversationListViewController:self latestMessageTitleForConversationModel:model] mutableCopy]; + [attributedText addAttributes:@{NSFontAttributeName : cell.detailLabel.font} range:NSMakeRange(0, attributedText.length)]; + cell.detailLabel.attributedText = attributedText; + } else { + cell.detailLabel.attributedText = [[EaseEmotionEscape sharedInstance] attStringFromTextForChatting:[self _latestMessageTitleForConversationModel:model]textFont:cell.detailLabel.font]; + } + + if (_dataSource && [_dataSource respondsToSelector:@selector(conversationListViewController:latestMessageTimeForConversationModel:)]) { + cell.timeLabel.text = [_dataSource conversationListViewController:self latestMessageTimeForConversationModel:model]; + } else { + cell.timeLabel.text = [self _latestMessageTimeForConversationModel:model]; + } + + return cell; +} + +#pragma mark - Table view delegate + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return [EaseConversationCell cellHeightWithModel:nil]; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + if (_delegate && [_delegate respondsToSelector:@selector(conversationListViewController:didSelectConversationModel:)]) { + EaseConversationModel *model = [self.dataArray objectAtIndex:indexPath.row]; + [_delegate conversationListViewController:self didSelectConversationModel:model]; + } else { + EaseConversationModel *model = [self.dataArray objectAtIndex:indexPath.row]; + EaseMessageViewController *viewController = [[EaseMessageViewController alloc] initWithConversationChatter:model.conversation.conversationId conversationType:model.conversation.type]; + viewController.title = model.title; + [self.navigationController pushViewController:viewController animated:YES]; + } +} + +-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ + return YES; +} + +- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return [self setupCellEditActions:indexPath]; +} + +- (nullable NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return [self setupCellEditActions:indexPath]; +} + +#pragma mark - Action + +- (void)deleteCellAction:(NSIndexPath *)aIndexPath +{ + EaseConversationModel *model = [self.dataArray objectAtIndex:aIndexPath.row]; + [[EMClient sharedClient].chatManager deleteConversation:model.conversation.conversationId isDeleteMessages:YES completion:nil]; + [self.dataArray removeObjectAtIndex:aIndexPath.row]; + [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:aIndexPath] withRowAnimation:UITableViewRowAnimationFade]; +} + +- (id)setupCellEditActions:(NSIndexPath *)aIndexPath +{ + if ([UIDevice currentDevice].systemVersion.floatValue < 11.0) { + UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:NSLocalizedString(@"delete",@"Delete") handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) { + [self deleteCellAction:indexPath]; + }]; + deleteAction.backgroundColor = [UIColor redColor]; + return @[deleteAction]; + } else { + UIContextualAction *deleteAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:NSLocalizedString(@"delete",@"Delete") handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { + [self deleteCellAction:aIndexPath]; + }]; + deleteAction.backgroundColor = [UIColor redColor]; + + UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[deleteAction]]; + config.performsFirstActionWithFullSwipe = NO; + return config; + } +} + + +#pragma mark - data + +-(void)refreshAndSortView +{ + if ([self.dataArray count] > 1) { + if ([[self.dataArray objectAtIndex:0] isKindOfClass:[EaseConversationModel class]]) { + NSArray* sorted = [self.dataArray sortedArrayUsingComparator: + ^(EaseConversationModel *obj1, EaseConversationModel* obj2){ + EMMessage *message1 = [obj1.conversation latestMessage]; + EMMessage *message2 = [obj2.conversation latestMessage]; + if(message1.timestamp > message2.timestamp) { + return(NSComparisonResult)NSOrderedAscending; + }else { + return(NSComparisonResult)NSOrderedDescending; + } + }]; + [self.dataArray removeAllObjects]; + [self.dataArray addObjectsFromArray:sorted]; + } + } + [self.tableView reloadData]; +} + +/*! + @method + @brief ������������������ + @discussion + @result + */ +- (void)tableViewDidTriggerHeaderRefresh +{ + NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations]; + NSArray* sorted = [conversations sortedArrayUsingComparator: + ^(EMConversation *obj1, EMConversation* obj2){ + EMMessage *message1 = [obj1 latestMessage]; + EMMessage *message2 = [obj2 latestMessage]; + if(message1.timestamp > message2.timestamp) { + return(NSComparisonResult)NSOrderedAscending; + }else { + return(NSComparisonResult)NSOrderedDescending; + } + }]; + + + + [self.dataArray removeAllObjects]; + for (EMConversation *converstion in sorted) { + EaseConversationModel *model = nil; + if (self.dataSource && [self.dataSource respondsToSelector:@selector(conversationListViewController:modelForConversation:)]) { + model = [self.dataSource conversationListViewController:self + modelForConversation:converstion]; + } + else{ + model = [[EaseConversationModel alloc] initWithConversation:converstion]; + } + + if (model) { + [self.dataArray addObject:model]; + } + } + + [self.tableView reloadData]; + [self tableViewDidFinishTriggerHeader:YES reload:NO]; +} + +#pragma mark - EMGroupManagerDelegate + +- (void)didUpdateGroupList:(NSArray *)groupList +{ + [self tableViewDidTriggerHeaderRefresh]; +} + +#pragma mark - registerNotifications +-(void)registerNotifications{ + [self unregisterNotifications]; + [[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil]; + [[EMClient sharedClient].groupManager addDelegate:self delegateQueue:nil]; +} + +-(void)unregisterNotifications{ + [[EMClient sharedClient].chatManager removeDelegate:self]; + [[EMClient sharedClient].groupManager removeDelegate:self]; +} + +- (void)dealloc{ + [self unregisterNotifications]; +} + +#pragma mark - private + +/*! + @method + @brief ������������������������������������������ + @discussion + @param conversationModel ������model + @result ������������������model������������������������ + */ +- (NSString *)_latestMessageTitleForConversationModel:(id<IConversationModel>)conversationModel +{ + NSString *latestMessageTitle = @""; + EMMessage *lastMessage = [conversationModel.conversation latestMessage]; + if (lastMessage) { + EMMessageBody *messageBody = lastMessage.body; + switch (messageBody.type) { + case EMMessageBodyTypeImage:{ + latestMessageTitle = NSEaseLocalizedString(@"message.image1", @"[image]"); + } break; + case EMMessageBodyTypeText:{ + NSString *didReceiveText = [EaseConvertToCommonEmoticonsHelper + convertToSystemEmoticons:((EMTextMessageBody *)messageBody).text]; + latestMessageTitle = didReceiveText; + } break; + case EMMessageBodyTypeVoice:{ + latestMessageTitle = NSEaseLocalizedString(@"message.voice1", @"[voice]"); + } break; + case EMMessageBodyTypeLocation: { + latestMessageTitle = NSEaseLocalizedString(@"message.location1", @"[location]"); + } break; + case EMMessageBodyTypeVideo: { + latestMessageTitle = NSEaseLocalizedString(@"message.video1", @"[video]"); + } break; + case EMMessageBodyTypeFile: { + latestMessageTitle = NSEaseLocalizedString(@"message.file1", @"[file]"); + } break; + default: { + } break; + } + } + return latestMessageTitle; +} + +/*! + @method + @brief ������������������������������������ + @discussion + @param conversationModel ������model + @result ������������������model������������������������ + */ +- (NSString *)_latestMessageTimeForConversationModel:(id<IConversationModel>)conversationModel +{ + NSString *latestMessageTime = @""; + EMMessage *lastMessage = [conversationModel.conversation latestMessage];; + if (lastMessage) { + double timeInterval = lastMessage.timestamp ; + if(timeInterval > 140000000000) { + timeInterval = timeInterval / 1000; + } + NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; + [formatter setDateFormat:@"YYYY-MM-dd"]; + latestMessageTime = [formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]]; + } + return latestMessageTime; +} + +@end -- Gitblit v1.8.0