Przeglądaj źródła

发消息进度显示

zwp 3 miesięcy temu
rodzic
commit
08bb3179c4

+ 4 - 4
AIIM.xcodeproj/project.pbxproj

@@ -220,13 +220,9 @@
 			);
 			inputFileListPaths = (
 			);
-			inputPaths = (
-			);
 			name = "[CP] Embed Pods Frameworks";
 			outputFileListPaths = (
 			);
-			outputPaths = (
-			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
 			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AIIM/Pods-AIIM-frameworks.sh\"\n";
@@ -260,6 +256,8 @@
 				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = ANJCTZ9L4P;
 				ENABLE_DEBUG_DYLIB = NO;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
+				EXCLUDED_ARCHS = "";
+				"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
 				GCC_PREFIX_HEADER = "${SRCROOT}/AIIM/Prefix&Header/PrefixHeader.pch";
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIIM/Info.plist;
@@ -314,6 +312,8 @@
 				"DEVELOPMENT_TEAM[sdk=iphoneos*]" = ANJCTZ9L4P;
 				ENABLE_DEBUG_DYLIB = NO;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
+				EXCLUDED_ARCHS = "";
+				"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
 				GCC_PREFIX_HEADER = "${SRCROOT}/AIIM/Prefix&Header/PrefixHeader.pch";
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIIM/Info.plist;

+ 0 - 54
AIIM/Common/Manager/MessageStatusManager.h

@@ -1,54 +0,0 @@
-//
-//  MessageStatusManager.h
-//  AIIM
-//
-//  Created by AI Assistant on 2025/10/21.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// 消息状态管理器 - 使用 plist 文件存储消息状态
-@interface MessageStatusManager : NSObject
-
-/// 单例
-+ (instancetype)sharedInstance;
-
-/// 保存消息状态
-/// @param messageId 消息ID
-/// @param status 消息状态 (0=发送中, 1=发送成功, 2=发送失败, 3=已删除, 4=已撤回)
-- (void)saveMessageStatus:(NSInteger)status forMessageId:(NSString *)messageId;
-
-/// 获取消息状态
-/// @param messageId 消息ID
-/// @return 消息状态,如果不存在则返回1(发送成功)
-- (NSInteger)getMessageStatusForMessageId:(NSString *)messageId;
-
-/// 批量保存消息状态
-/// @param statusDict 字典,key为消息ID,value为状态值
-- (void)batchSaveMessageStatus:(NSDictionary<NSString *, NSNumber *> *)statusDict;
-
-/// 批量获取消息状态
-/// @param messageIds 消息ID数组
-/// @return 字典,key为消息ID,value为状态值
-- (NSDictionary<NSString *, NSNumber *> *)batchGetMessageStatusForMessageIds:(NSArray<NSString *> *)messageIds;
-
-/// 删除消息状态
-/// @param messageId 消息ID
-- (void)removeMessageStatusForMessageId:(NSString *)messageId;
-
-/// 批量删除消息状态
-/// @param messageIds 消息ID数组
-- (void)batchRemoveMessageStatusForMessageIds:(NSArray<NSString *> *)messageIds;
-
-/// 清空所有消息状态
-- (void)clearAllMessageStatus;
-
-/// 获取所有消息状态数量
-- (NSInteger)getAllMessageStatusCount;
-
-@end
-
-NS_ASSUME_NONNULL_END
-

+ 0 - 221
AIIM/Common/Manager/MessageStatusManager.m

@@ -1,221 +0,0 @@
-//
-//  MessageStatusManager.m
-//  AIIM
-//
-//  Created by AI Assistant on 2025/10/21.
-//
-
-#import "MessageStatusManager.h"
-
-// plist 文件名
-static NSString *const kMessageStatusPlistName = @"MessageStatus.plist";
-
-@interface MessageStatusManager ()
-
-@property (nonatomic, strong) NSMutableDictionary<NSString *, NSNumber *> *statusCache;
-@property (nonatomic, strong) dispatch_queue_t ioQueue;
-@property (nonatomic, copy) NSString *plistPath;
-
-@end
-
-@implementation MessageStatusManager
-
-#pragma mark - Singleton
-
-+ (instancetype)sharedInstance {
-    static MessageStatusManager *instance = nil;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        instance = [[self alloc] init];
-    });
-    return instance;
-}
-
-- (instancetype)init {
-    self = [super init];
-    if (self) {
-        // 创建串行队列用于文件读写,避免并发问题
-        _ioQueue = dispatch_queue_create("com.aiim.messageStatus.io", DISPATCH_QUEUE_SERIAL);
-        
-        // 获取 plist 文件路径
-        _plistPath = [self plistFilePath];
-        
-        // 加载缓存
-        [self loadCache];
-    }
-    return self;
-}
-
-#pragma mark - Public Methods
-
-- (void)saveMessageStatus:(NSInteger)status forMessageId:(NSString *)messageId {
-    if (!messageId || messageId.length == 0) {
-        NSLog(@"[MessageStatusManager] 保存失败: messageId 为空");
-        return;
-    }
-    
-    dispatch_async(self.ioQueue, ^{
-        // 更新内存缓存
-        self.statusCache[messageId] = @(status);
-        
-        // 保存到文件
-        [self saveCacheToDisk];
-        
-        NSLog(@"[MessageStatusManager] 保存成功: messageId=%@, status=%ld", messageId, (long)status);
-    });
-}
-
-- (NSInteger)getMessageStatusForMessageId:(NSString *)messageId {
-    if (!messageId || messageId.length == 0) {
-        NSLog(@"getMessageStatusForMessageId 1: 1");
-        return 1; // 默认返回发送成功
-    }
-    
-    if (![self.statusCache.allKeys containsObject:messageId]) {
-        NSLog(@"getMessageStatusForMessageId 2: 1");
-        return 0;
-    }
-    
-    __block NSInteger status = 0; // 默认值
-    dispatch_sync(self.ioQueue, ^{
-        NSNumber *statusNumber = self.statusCache[messageId];
-        if (statusNumber) {
-            status = [statusNumber integerValue];
-        }
-    });
-    NSLog(@"getMessageStatusForMessageId 3: %ld", status);
-    return status;
-}
-
-- (void)batchSaveMessageStatus:(NSDictionary<NSString *, NSNumber *> *)statusDict {
-    if (!statusDict || statusDict.count == 0) {
-        return;
-    }
-    
-    dispatch_async(self.ioQueue, ^{
-        // 批量更新内存缓存
-        [self.statusCache addEntriesFromDictionary:statusDict];
-        
-        // 保存到文件
-        [self saveCacheToDisk];
-        
-        NSLog(@"[MessageStatusManager] 批量保存成功: %lu 条", (unsigned long)statusDict.count);
-    });
-}
-
-- (NSDictionary<NSString *, NSNumber *> *)batchGetMessageStatusForMessageIds:(NSArray<NSString *> *)messageIds {
-    if (!messageIds || messageIds.count == 0) {
-        return @{};
-    }
-    
-    __block NSMutableDictionary *result = [NSMutableDictionary dictionary];
-    dispatch_sync(self.ioQueue, ^{
-        for (NSString *messageId in messageIds) {
-            NSNumber *status = self.statusCache[messageId];
-            if (status) {
-                result[messageId] = status;
-            } else {
-                result[messageId] = @(1); // 默认发送成功
-            }
-        }
-    });
-    
-    return [result copy];
-}
-
-- (void)removeMessageStatusForMessageId:(NSString *)messageId {
-    if (!messageId || messageId.length == 0) {
-        return;
-    }
-    
-    dispatch_async(self.ioQueue, ^{
-        [self.statusCache removeObjectForKey:messageId];
-        
-        // 保存到文件
-        [self saveCacheToDisk];
-        
-        NSLog(@"[MessageStatusManager] 删除成功: messageId=%@", messageId);
-    });
-}
-
-- (void)batchRemoveMessageStatusForMessageIds:(NSArray<NSString *> *)messageIds {
-    if (!messageIds || messageIds.count == 0) {
-        return;
-    }
-    
-    dispatch_async(self.ioQueue, ^{
-        [self.statusCache removeObjectsForKeys:messageIds];
-        
-        // 保存到文件
-        [self saveCacheToDisk];
-        
-        NSLog(@"[MessageStatusManager] 批量删除成功: %lu 条", (unsigned long)messageIds.count);
-    });
-}
-
-- (void)clearAllMessageStatus {
-    dispatch_async(self.ioQueue, ^{
-        [self.statusCache removeAllObjects];
-        
-        // 删除文件
-        NSFileManager *fileManager = [NSFileManager defaultManager];
-        if ([fileManager fileExistsAtPath:self.plistPath]) {
-            NSError *error = nil;
-            [fileManager removeItemAtPath:self.plistPath error:&error];
-            if (error) {
-                NSLog(@"[MessageStatusManager] 清空失败: %@", error);
-            } else {
-                NSLog(@"[MessageStatusManager] 清空成功");
-            }
-        }
-    });
-}
-
-- (NSInteger)getAllMessageStatusCount {
-    __block NSInteger count = 0;
-    dispatch_sync(self.ioQueue, ^{
-        count = self.statusCache.count;
-    });
-    return count;
-}
-
-#pragma mark - Private Methods
-
-/// 获取 plist 文件路径
-- (NSString *)plistFilePath {
-    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *documentsDirectory = [paths firstObject];
-    return [documentsDirectory stringByAppendingPathComponent:kMessageStatusPlistName];
-}
-
-/// 从磁盘加载缓存
-- (void)loadCache {
-    dispatch_sync(self.ioQueue, ^{
-        NSFileManager *fileManager = [NSFileManager defaultManager];
-        if ([fileManager fileExistsAtPath:self.plistPath]) {
-            NSDictionary *diskData = [NSDictionary dictionaryWithContentsOfFile:self.plistPath];
-            if (diskData) {
-                self.statusCache = [diskData mutableCopy];
-                NSLog(@"[MessageStatusManager] 加载缓存成功: %lu 条", (unsigned long)self.statusCache.count);
-            } else {
-                self.statusCache = [NSMutableDictionary dictionary];
-                NSLog(@"[MessageStatusManager] 缓存文件为空,创建新缓存");
-            }
-        } else {
-            self.statusCache = [NSMutableDictionary dictionary];
-            NSLog(@"[MessageStatusManager] 缓存文件不存在,创建新缓存");
-        }
-    });
-}
-
-/// 将缓存保存到磁盘
-- (void)saveCacheToDisk {
-    // 注意: 此方法必须在 ioQueue 中调用
-    BOOL success = [self.statusCache writeToFile:self.plistPath atomically:YES];
-    if (!success) {
-        NSLog(@"[MessageStatusManager] 保存到磁盘失败");
-    }
-}
-
-@end
-

+ 1 - 6
AIIM/Common/Network/aliOSS/OSSManager.m

@@ -12,7 +12,6 @@
 #import "ChatsStore.h"
 #import "GDBManager.h"
 #import "GWebSocket.h"
-#import "MessageStatusManager.h"
 
 // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
 #define endpoint @"https://oss-ap-southeast-1.aliyuncs.com"//生产服务器
@@ -376,10 +375,6 @@
 
 -(void)updataFileMsg:(NSString *)thrid state:(NSString *)state{
     
-    NSInteger status = [state integerValue];
-    NSInteger value = status-1;
-    [[MessageStatusManager sharedInstance] saveMessageStatus:value forMessageId:thrid];
-    
     [GDBManager.shareInstance selectLocalmsgWithLocaltime:thrid succ:^(NSArray * _Nullable array) {
         NSLog(@"selectLocalmsgWithLocaltime:%@",array);
         
@@ -407,7 +402,7 @@
                 }
                 else if([state isEqualToString:@"3"]){
                     [mextend setObject:@"" forKey:@"url"];
-                    [mextend setObject:@"" forKey:@"fileName"];
+//                    [mextend setObject:@"" forKey:@"fileName"];
                     [mextend setObject:[NSNumber numberWithInt:1] forKey:@"fileError"];
                     
                     [mmsg setObject:mextend forKey:@"extend"];

+ 27 - 28
AIIM/Controller/chat/ChatController.m

@@ -793,10 +793,10 @@ static const CGFloat kQuoteViewHeight = 46.0f;
                 NSLog(@"------保存------");
                 [weakself saveFile:message];
                 break;
-            case 8:
-                NSLog(@"------文件视频图片重新上传------");
-                [weakself resendFile:message];
-                break;
+//            case 8:
+//                NSLog(@"------文件视频图片重新上传------");
+//                [weakself resendFile:message];
+//                break;
             case 99:
 //                NSLog(@"------长按开始------");
                 [weakself dismissKeyboard];
@@ -835,6 +835,14 @@ static const CGFloat kQuoteViewHeight = 46.0f;
 //        [weakself presentViewController :uiNavC animated:YES completion:nil];
     };
     
+    [cell setResendMessageBlock:^(ChatMessageModel *message) {
+        if (message.isUploadFile) {
+            [weakself resendFile:message];
+        } else {
+            [weakself resendMsg:message.formerMessage];
+        }
+    }];
+    
     return cell;
 }
 
@@ -1721,16 +1729,15 @@ static const CGFloat kQuoteViewHeight = 46.0f;
 }
 
 -(void)stateChange:(NSDictionary *)changeMsg{
-    NSString *loacaltime = changeMsg[@"thrid"];
-    NSString *pcent = changeMsg[@"pcent"];
-    NSString *state = changeMsg[@"state"];
-    if([state isEqualToString:@"1"]){
-        [self Ossupdatajidu:loacaltime uploadProgress:pcent.intValue];
-    }
-//    if([state isEqualToString:@"2"]){
-//        [self Ossupdatajidu:loacaltime uploadProgress:pcent.intValue];
-//    }
-    
+    dispatch_main_async_safe(^{
+        NSString *loacaltime = changeMsg[@"thrid"];
+        NSString *pcent = changeMsg[@"pcent"];
+        NSString *state = changeMsg[@"state"];
+        NSLog(@"uploadProgress: %@",pcent);
+        if([state isEqualToString:@"1"]){
+            [self Ossupdatajidu:loacaltime uploadProgress:pcent.intValue];
+        }
+    })
 }
 
 -(void)resendFile:(ChatMessageModel *)msg{
@@ -1943,23 +1950,15 @@ static const CGFloat kQuoteViewHeight = 46.0f;
     
 }
 
--(void)updatajidu:(NSString *)localtime uploadProgress:(NSProgress *)Progress{
-    CGFloat progres = Progress.completedUnitCount/(double)Progress.totalUnitCount;
-    CGFloat Pcode =progres*100;
-    NSLog(@"Pcode:%f",Pcode);
-    for (ChatMessageModel *message in self.messageArray) {
-        
-        if(message.localtime==localtime.integerValue){
-            NSLog(@"%ld|%ld",(long)message.localtime,(long)localtime.integerValue);
-            [message setuploadPersent:Pcode localtime:localtime.integerValue];
-        }
-    }
+-(void)Ossupdatajidu:(NSString *)localtime uploadProgress:(NSInteger )Progress{
+    [self updateProgress:Progress localtime:localtime];
 }
 
--(void)Ossupdatajidu:(NSString *)localtime uploadProgress:(NSInteger )Progress{
-    for (ChatMessageModel *message in self.messageArray) {
+- (void)updateProgress:(NSInteger )Progress localtime:(NSString *)localtime {
+    for (chatCellView *cell in self._tableView.visibleCells) {
+        ChatMessageModel *message = cell.messageModel;
         if(message.localtime==localtime.integerValue){
-            [message setuploadPersent:Progress localtime:localtime.integerValue];
+            [cell fileUploadProgressDidChanged:Progress localtime:localtime.integerValue];
         }
     }
 }

+ 6 - 20
AIIM/Controller/chat/chetCell/ChatMessageModel.h

@@ -25,15 +25,7 @@ typedef NS_ENUM(NSUInteger, ChatMessageType) {
     ChatMessageTypeDFBUSY = 13,// 对方正在忙
 };
 
-/// 消息状态
-typedef NS_ENUM(NSInteger, MessageSendStatus){
-    MessageSending             = 0,  ///< 消息发送中
-    MessageSent                = 1,  ///< 消息发送成功
-    MessageSendFail            = 2,  ///< 消息发送失败
-};
-
 @interface ChatMessageModel : NSObject
-@property (nonatomic, assign) MessageSendStatus messageSendStatus;
 @property (nonatomic, assign) ChatMessageType messageType;
 @property (nonatomic, assign) NSInteger type; //0=友聊 1=群聊
 @property (nonatomic, assign) BOOL isSender; // 是否是发送方
@@ -51,7 +43,6 @@ typedef NS_ENUM(NSInteger, MessageSendStatus){
 
 // 已读状态
 @property (nonatomic, copy) NSString * readStatus;
-@property (nonatomic, assign) NSInteger readstate;
 //引用消息
 @property (nonatomic,strong) ChatMessageModel * quoteMessage;
 
@@ -87,6 +78,10 @@ typedef NS_ENUM(NSInteger, MessageSendStatus){
 
 @property (nonatomic,  copy) NSDictionary * formerMessage;
 @property (nonatomic, assign, readonly) BOOL isUploadFile;
+@property (nonatomic, assign) CGFloat uploadProgress;
+
+/// 是否发送成功
+@property (nonatomic, assign, readonly) BOOL isSent;
 
 // 从字典初始化方法
 + (instancetype)modelWithDictionary:(NSDictionary *)dict;
@@ -95,22 +90,13 @@ typedef NS_ENUM(NSInteger, MessageSendStatus){
 - (void)setupWithDictionary:(NSDictionary *)dict;
 // 从模型设置属性方法
 - (void)exchangeModelWithModel:(ChatMessageModel *)model;
-// 更新消息状态到 plist
-- (void)updateMessageStatus:(MessageSendStatus)status;
-// 从 plist 刷新消息状态
-- (void)refreshMessageStatus;
+
 // 生成缩略图的方法,同时判断是否开始下载视频
 - (void)generateThumbnailWithCompletion:(void(^)(UIImage *thumbnail))completion;
 //下载文件保存本地
 -(void)downloadFileIfNeed:(void(^)(NSInteger persent))loading;
 
-
-
-//上传文件
-@property (nonatomic,copy) void(^uploadPersentChange)(NSInteger index,NSInteger localtime);
-
-
--(void)setuploadPersent:(NSInteger)persent localtime:(NSInteger)localtime;
+- (BOOL)checkIsSendFail;
 
 @end
 

+ 28 - 87
AIIM/Controller/chat/chetCell/ChatMessageModel.m

@@ -11,7 +11,6 @@
 #import "AVFoundation/AVFoundation.h"
 #import "FileNetApi.h"
 #import <SDWebImage/SDImageCache.h>
-#import "MessageStatusManager.h"
 
 @implementation ChatMessageModel
 
@@ -92,17 +91,7 @@
     self.voiceWidth = [self voiceBubbleWidth];
     
     //文件传输成功或失败
-    self.fileError = 0;
-    NSInteger fileError = [extend[@"fileError"] integerValue];
-    if (fileError!=0) {
-        self.fileError = fileError;
-    }
-    else{
-        if(self.url.length>0){
-            self.fileError = 0;
-        }
-    }
-    
+    self.fileError = [extend[@"fileError"] integerValue];
     
     //合并转发
     self.forwardMsgArray = extend[@"messageList"] ?:@[];
@@ -121,9 +110,6 @@
     self.localtime = [mutableDict[@"localtime"] longLongValue];
     self.formatterTime = [self timeF:self.timestamp];
     
-    // 从 plist 读取状态
-    self.messageSendStatus = [[MessageStatusManager sharedInstance] getMessageStatusForMessageId:self.msgId];
-    
     // 其他自定义字段...
     self.readStatus = [self getReadStatus];
     
@@ -171,8 +157,7 @@
     self.timestamp = model.timestamp;
     self.localtime = model.localtime;
     self.formatterTime = model.formatterTime;
-    // 消息状态
-    self.messageSendStatus = model.messageSendStatus;
+    
 //    // 其他自定义字段...
     // 其他自定义字段...
     self.readStatus = [self getReadStatus];
@@ -238,55 +223,16 @@
 }
 
 - (NSString *)getReadStatus{
-    NSString * readStatus;
-    self.readstate = 0;
-    if(self.timestamp == 0){
-        return @"";
-    }
-    if(self.messageType==11||self.messageType==12){
-        return @"";
-    }
-    
-    
-    if(self.type==0){
-        if (self.localtime != 0 && self.localtime == self.timestamp) {
-            NSDate *now = [NSDate date];
-            NSTimeInterval trt = [now timeIntervalSince1970];
-            NSInteger time = trt*1000;
-            NSInteger outTime =time-self.localtime;
-            if(outTime>33000){
-                if(self.messageType==1||self.messageType==2||self.messageType==5){
-                    readStatus = @"正在发送";
-                    self.readstate = 3;
-                }else{
-                    readStatus = @"发送失败";
-                    self.readstate = 4;
-                }
-            }else{
-                readStatus = @"正在发送";
-                self.readstate = 3;
-            }
+    if(self.isSent){
+        //判断已读未读
+        if(self.timestamp>ChatsStore.shareInstance.lastreadTime){
+            return @"未读";
         }
         else{
-            //判断已读未读
-            if(self.timestamp>ChatsStore.shareInstance.lastreadTime){
-                readStatus = @"未读";
-                self.readstate = 1;
-            }
-            else{
-                readStatus = @"已读";
-                self.readstate = 2;
-            }
-            if(self.fileError==1){
-                readStatus = @"發送失敗,點擊重發";
-                self.readstate = 4;
-            }
+            return @"已读";
         }
-    }else{
-        return @"";
     }
-    
-    return readStatus;
+    return @"";
 }
 
 - (void)generateThumbnailWithCompletion:(void(^)(UIImage *thumbnail))completion {
@@ -431,6 +377,11 @@
         return;
     }
     
+    if (![self.url hasPrefix:@"http"]) {
+        NSLog(@"文件URL异常:%@", self.formerMessage);
+        return;
+    }
+    
     [FileNetApi downLoadWToken:getURL(self.url) thrid:self.msgId succ:^(int code, NSDictionary * res) {
         if(res!=nil){
             NSMutableDictionary *mutableDict = [self.formerMessage mutableCopy];
@@ -458,14 +409,6 @@
 }
 
 
--(void)setuploadPersent:(NSInteger)persent localtime:(NSInteger)localtime{
-    if(self.uploadPersentChange && localtime==self.localtime){
-        self.uploadPersentChange(persent,localtime);
-    }
-}
-
-
-
 // 根据语音时长计算气泡宽度
 - (CGFloat)voiceBubbleWidth {
     // 基础宽度
@@ -484,23 +427,6 @@
 
 #pragma mark - 消息状态管理
 
-// 更新消息状态到 plist
-- (void)updateMessageStatus:(MessageSendStatus)status {
-    self.messageSendStatus = status;
-    if (self.msgId.length > 0) {
-        [[MessageStatusManager sharedInstance] saveMessageStatus:status forMessageId:self.msgId];
-        NSLog(@"[ChatMessageModel] 更新消息状态: msgId=%@, status=%ld", self.msgId, (long)status);
-    }
-}
-
-// 从 plist 刷新消息状态
-- (void)refreshMessageStatus {
-    if (self.msgId.length > 0) {
-        NSInteger status = [[MessageStatusManager sharedInstance] getMessageStatusForMessageId:self.msgId];
-        self.messageSendStatus = (MessageSendStatus)status;
-    }
-}
-
 - (NSString *)getFileSize {
     NSString *filePath = self.localurl;
 
@@ -561,4 +487,19 @@
     self.messageType == ChatMessageTypeVideo;
 }
 
+- (BOOL)isSent {
+    return ![self.msgId isEqualToString:[NSString stringWithFormat:@"%ld", self.localtime]];
+}
+
+- (BOOL)checkIsSendFail {
+//    NSDate *now = [NSDate date];
+//    NSTimeInterval trt = [now timeIntervalSince1970];
+//    NSInteger time = trt*1000;
+//    NSInteger outTime =time-self.localtime;
+//    if(outTime>33000){
+//        return YES;
+//    }
+    return NO;
+}
+
 @end

+ 2 - 0
AIIM/Controller/chat/chetCell/chatCellView.h

@@ -27,5 +27,7 @@
 @property (nonatomic) CGFloat height;
 @property (nonatomic, strong) ChatMessageModel *messageModel;
 
+-(void)fileUploadProgressDidChanged:(NSInteger)persent localtime:(NSInteger)localtime;
+
 + (CGFloat)cellHeightForMessage:(ChatMessageModel *)message;
 @end

+ 62 - 73
AIIM/Controller/chat/chetCell/chatCellView.m

@@ -101,7 +101,7 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     [super layoutSubviews];
     
     if (_currentContentView && _messageModel.isSender) {
-        CGFloat offset = _messageModel.messageType == ChatMessageTypeFile ? 16 : 8;
+        CGFloat offset = (_messageModel.messageType == ChatMessageTypeFile || _messageModel.messageType == ChatMessageTypeVoice)  ? 16 : 8;
         [_progressContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
             make.width.height.mas_equalTo(30);
             make.right.equalTo(_currentContentView.mas_left).offset(-offset);
@@ -109,7 +109,7 @@ static const CGFloat kMediaCornerRadius = 4.0f;
         }];
         
         [_resendButton mas_remakeConstraints:^(MASConstraintMaker *make) {
-            make.right.equalTo(_currentContentView.mas_left).offset(-8);
+            make.right.equalTo(_currentContentView.mas_left).offset(-offset);
             make.centerY.equalTo(_currentContentView);
         }];
     }
@@ -224,14 +224,16 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 - (void)updateProgress:(CGFloat)progress {
     if (progress < 0) progress = 0;
     if (progress > 1) progress = 1;
-    
+    self.messageModel.uploadProgress = progress;
     dispatch_async(dispatch_get_main_queue(), ^{
+        if (self.progressContainerView.isHidden) {
+            [self showProgressView];
+        }
         self.progressLayer.strokeEnd = progress;
-        
-//        // 如果进度完成,隐藏圆环
-//        if (progress >= 1.0) {
-//            self.progressContainerView.hidden = YES;
-//        }
+        // 如果进度完成,隐藏圆环
+        if (progress >= 1.0) {
+            self.progressContainerView.hidden = YES;
+        }
     });
 }
 
@@ -239,7 +241,7 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 - (void)showProgressView {
     dispatch_async(dispatch_get_main_queue(), ^{
         self.progressContainerView.hidden = NO;
-        self.progressLayer.strokeEnd = 0.0f;
+        self.progressLayer.strokeEnd = self.messageModel.uploadProgress;
     });
 }
 
@@ -276,6 +278,8 @@ static const CGFloat kMediaCornerRadius = 4.0f;
 // 重发按钮点击事件
 - (void)handleResendButtonTap {
     NSLog(@"点击重发按钮: msgId=%@", _messageModel.msgId);
+    [self hideResendButton];
+    self.messageModel.fileError = 0;
     
     // 触发重发回调
     if (self.resendMessageBlock) {
@@ -624,6 +628,14 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     [self setupSendingProgress];
     
 }
+
+- (void)fileUploadProgressDidChanged:(NSInteger)persent localtime:(NSInteger)localtime {
+    if (localtime == _messageModel.localtime) {
+        CGFloat progress = persent / 100.0f;
+        [self updateProgress:progress];
+    }
+}
+
 #pragma mark - 批量状态
 - (void)setBatchState:(BOOL)batchState{
     
@@ -664,12 +676,6 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     
     _timeLabel.text = _messageModel.formatterTime;
     _readStateLbl.text = _messageModel.readStatus;
-    if(_messageModel.readstate==4){
-        _readStateLbl.textColor = globalColor(GCTypeOrangeR);
-    }
-    else{
-        _readStateLbl.textColor = [UIColor whiteColor];
-    }
     
     
     if (_messageModel.type==1) {
@@ -744,40 +750,19 @@ static const CGFloat kMediaCornerRadius = 4.0f;
         [self hideResendButton];
         return;
     }
-        
-    // 根据消息状态显示进度或失败按钮
-    switch (_messageModel.messageSendStatus) {
-        case     MessageSending: {
-            // 发送中,显示进度圆环,隐藏失败按钮
-            [self showProgressView];
-            [self hideResendButton];
-            
-            // 如果有上传进度回调,监听进度
-            weakSelf(self);
-            if (_messageModel.isUploadFile) {
-                _messageModel.uploadPersentChange = ^(NSInteger persent, NSInteger localtime) {
-                    if (localtime == weakself.messageModel.localtime) {
-                        CGFloat progress = persent / 100.0f;
-                        [weakself updateProgress:progress];
-                        if (progress >= 1) {
-                            weakself.messageModel.messageSendStatus = MessageSent;
-                        }
-                    }
-                };
-            }
-            break;
-        }
-        case     MessageSendFail: {
-            // 发送失败,显示失败按钮,隐藏进度圆环
-            [self hideProgressView];
-            [self showResendButton];
-            break;
-        }
-        case     MessageSent:
-            // 其他状态隐藏进度和失败按钮
-            [self hideProgressView];
-            [self hideResendButton];
-            break;
+    
+    if (self.messageModel.isSent) {
+        [self hideProgressView];
+    } else {
+        // 发送中,显示进度圆环,隐藏失败按钮
+        [self showProgressView];
+    }
+    
+    if (self.messageModel.fileError) {
+        [self showResendButton];
+        [self hideProgressView];
+    } else {
+        [self hideResendButton];
     }
     
 }
@@ -1276,11 +1261,15 @@ static const CGFloat kMediaCornerRadius = 4.0f;
             make.top.mas_equalTo(self.avatarImageView);
         }];
         
-        if (_currentContentView) {
+        if (_currentContentView && _bubbleImageView) {
+            BOOL isBubble = self.messageModel.messageType == ChatMessageTypeText ||
+                self.messageModel.messageType == ChatMessageTypeFile ||
+                self.messageModel.messageType == ChatMessageTypeVoice;
+            UIView *content = isBubble ? _bubbleImageView : _currentContentView;
             [_readStateLbl mas_remakeConstraints:^(MASConstraintMaker *make) {
-                make.left.mas_equalTo(_currentContentView.mas_right).offset(6);
+                make.left.mas_equalTo(content.mas_right).offset(3);
                 make.height.mas_equalTo(14);
-                make.bottom.mas_equalTo(_currentContentView.mas_bottom);
+                make.bottom.mas_equalTo(content.mas_bottom);
             }];
         }
     } else {
@@ -1597,13 +1586,13 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     if (_messageModel.messageType == ChatMessageTypeImage) {
         // 处理图片点击
         NSLog(@"点击了图片: %@", _messageModel.url);
-        if(_messageModel.fileError==1){
-            weakSelf(self);
-            if(weakself.bubbleCellLongPressMenuBlock){
-                weakself.bubbleCellLongPressMenuBlock(8);
-            }
-            return;
-        }
+//        if(_messageModel.fileError==1){
+//            weakSelf(self);
+//            if(weakself.bubbleCellLongPressMenuBlock){
+//                weakself.bubbleCellLongPressMenuBlock(8);
+//            }
+//            return;
+//        }
         if (_messageModel.url.length == 0 && !_messageModel.isSender) {
             [MBProgressHUD showWithText:@"图片正在上传"];
             return;
@@ -1617,13 +1606,13 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     if (_messageModel.messageType == ChatMessageTypeVideo) {
         // 处理视频点击
         NSLog(@"点击了视频: %@", _messageModel.url);
-        if(_messageModel.fileError==1){
-            weakSelf(self);
-            if(weakself.bubbleCellLongPressMenuBlock){
-                weakself.bubbleCellLongPressMenuBlock(8);
-            }
-            return;
-        }
+//        if(_messageModel.fileError==1){
+//            weakSelf(self);
+//            if(weakself.bubbleCellLongPressMenuBlock){
+//                weakself.bubbleCellLongPressMenuBlock(8);
+//            }
+//            return;
+//        }
         if (_messageModel.url.length == 0 && !_messageModel.isSender) {
             [MBProgressHUD showWithText:@"视频正在上传"];
             return;
@@ -1642,13 +1631,13 @@ static const CGFloat kMediaCornerRadius = 4.0f;
     if (_messageModel.messageType == ChatMessageTypeFile) {
         // 处理视频点击
         NSLog(@"点击了文件: %@", _messageModel.url);
-        if(_messageModel.fileError==1){
-            weakSelf(self);
-            if(weakself.bubbleCellLongPressMenuBlock){
-                weakself.bubbleCellLongPressMenuBlock(8);
-            }
-            return;
-        }
+//        if(_messageModel.fileError==1){
+//            weakSelf(self);
+//            if(weakself.bubbleCellLongPressMenuBlock){
+//                weakself.bubbleCellLongPressMenuBlock(8);
+//            }
+//            return;
+//        }
         if (_messageModel.url.length == 0 && !_messageModel.isSender) {
             [MBProgressHUD showWithText:@"文件正在上传"];
             return;

+ 1 - 0
Podfile

@@ -30,6 +30,7 @@ post_install do |installer|
           project.targets.each do |target|
               target.build_configurations.each do |config|
                   config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.1'
+                  config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
                end
           end
    end