From 83b9d5c682b21d88133f24da0f94dd56bd79e687 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 19 Jul 2018 13:38:55 +0800
Subject: [PATCH] change
---
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