| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- //
- // TUIFileMessageCellData.m
- // TXIMSDK_TUIKit_iOS
- //
- // Created by annidyfeng on 2019/5/21.
- // Copyright © 2023 Tencent. All rights reserved.
- //
- #import "TUIFileMessageCellData.h"
- #import <TIMCommon/TIMDefine.h>
- #import <TUICore/NSString+TUIUtil.h>
- #import "TUIMessageProgressManager.h"
- @interface TUIFileMessageCellData ()
- @property(nonatomic, strong) NSMutableArray *progressBlocks;
- @property(nonatomic, strong) NSMutableArray *responseBlocks;
- @end
- @implementation TUIFileMessageCellData
- + (TUIMessageCellData *)getCellData:(V2TIMMessage *)message {
- V2TIMFileElem *elem = message.fileElem;
- TUIFileMessageCellData *fileData = [[TUIFileMessageCellData alloc] initWithDirection:(message.isSelf ? MsgDirectionOutgoing : MsgDirectionIncoming)];
- fileData.path = [elem.path safePathString];
- fileData.fileName = elem.filename;
- fileData.length = elem.fileSize;
- fileData.uuid = elem.uuid;
- fileData.reuseId = TFileMessageCell_ReuseId;
- return fileData;
- }
- + (NSString *)getDisplayString:(V2TIMMessage *)message {
- return TIMCommonLocalizableString(TUIkitMessageTypeFile); // @"[File]";
- }
- - (Class)getReplyQuoteViewDataClass {
- return NSClassFromString(@"TUIFileReplyQuoteViewData");
- }
- - (Class)getReplyQuoteViewClass {
- return NSClassFromString(@"TUIFileReplyQuoteView");
- }
- - (int)length {
- if (self.innerMessage) {
- _length = self.innerMessage.fileElem.fileSize;
- }
- return _length;
- }
- - (instancetype)initWithDirection:(TMsgDirection)direction {
- self = [super initWithDirection:direction];
- if (self) {
- _uploadProgress = 100;
- _downladProgress = 100;
- _isDownloading = NO;
- _progressBlocks = [NSMutableArray array];
- _responseBlocks = [NSMutableArray array];
- }
- return self;
- }
- - (void)downloadFile {
- BOOL isExist = NO;
- NSString *path = [self getFilePath:&isExist];
- if (isExist) {
- return;
- }
- NSInteger progress = [TUIMessageProgressManager.shareManager downloadProgressForMessage:self.msgID];
- if (progress != 0) {
- return;
- }
- if (self.isDownloading) return;
- self.isDownloading = YES;
- @weakify(self);
- if (self.innerMessage.elemType == V2TIM_ELEM_TYPE_FILE) {
- NSString *msgID = self.msgID;
- [self.innerMessage.fileElem downloadFile:path
- progress:^(NSInteger curSize, NSInteger totalSize) {
- @strongify(self);
- NSInteger progress = curSize * 100 / totalSize;
- [self updateDownalodProgress:MIN(progress, 99)];
- [TUIMessageProgressManager.shareManager appendDownloadProgress:msgID progress:MIN(progress, 99)];
- }
- succ:^{
- @strongify(self);
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- self.isDownloading = NO;
- [self updateDownalodProgress:100];
- [TUIMessageProgressManager.shareManager appendDownloadProgress:msgID progress:100];
- dispatch_async(dispatch_get_main_queue(), ^{
- self.path = path;
- });
- });
- }
- fail:^(int code, NSString *msg) {
- @strongify(self);
- self.isDownloading = NO;
- }];
- }
- }
- - (void)updateDownalodProgress:(NSUInteger)progress {
- dispatch_async(dispatch_get_main_queue(), ^{
- self.downladProgress = progress;
- });
- }
- - (BOOL)isLocalExist {
- BOOL isExist;
- [self getFilePath:&isExist];
- return isExist;
- }
- - (NSString *)getFilePath:(BOOL *)isExist {
- NSString *path = nil;
- BOOL isDir = NO;
- *isExist = NO;
- if (self.direction == MsgDirectionOutgoing) {
- // The origin file path is valid when uploading
- path = [NSString stringWithFormat:@"%@%@", TUIKit_File_Path, _path.lastPathComponent];
- if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]) {
- if (!isDir) {
- *isExist = YES;
- }
- }
- }
- if (!*isExist) {
- path = [NSString stringWithFormat:@"%@%@%@", TUIKit_File_Path,self.uuid, _fileName];
- if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]) {
- if (!isDir) {
- *isExist = YES;
- }
- }
- }
- if (*isExist) {
- _path = path;
- }
- // TODO: uuid
- return path;
- }
- @end
|