Bläddra i källkod

1.需求:下载列表缩略图下载正常流程

huangxiaodong 1 år sedan
förälder
incheckning
3149be74b3

+ 2 - 0
创维盒子/双子星云手机/AppDelegate/Config/Notification.h

@@ -80,6 +80,8 @@
 
 /* 下载缩略图通知*/
 #define downloadThumbnailBeginNotification                 @"downloadThumbnailBeginNot"
+/* 下载完成一张缩略图通知*/
+#define downloadThumbnailDoneOneNotification                 @"downloadThumbnailDoneOneNot"
 
 /* 下载文件通知*/
 #define downloadFileBeginNotification                 @"downloadFileBeginNot"

+ 12 - 2
创维盒子/双子星云手机/Class/Set/uploadFile/downLoadFile/downLoadPreviewViewController.m

@@ -50,6 +50,8 @@
     
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(searchFileListDoneFun:) name:searchFileListDoneNotification object:nil];
     
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didDownloadOneFileFun) name:downloadThumbnailDoneOneNotification object:nil];
+    
     [self drawAnyView];
 }
 
@@ -590,14 +592,16 @@
     [self.tableView reloadData];
     
     //这个要做判断 不能为空
-    //[self gotoDownThumbnailManagerFun];
+    [self gotoDownThumbnailManagerFun];
 }
 
 
 #pragma mark 去下载缩略图
 - (void)gotoDownThumbnailManagerFun
 {
-    [[downloadThumbnailManager shareInstance] handlToDownloadThumbnailWith:_curCouldPhoneFileListMod.data.list];
+    if(_curCouldPhoneFileListMod.data.list && _curCouldPhoneFileListMod.data.list.count >0){
+        [[downloadThumbnailManager shareInstance] handlToDownloadThumbnailWith:_curCouldPhoneFileListMod.data.list];
+    }
 }
 
 - (void)gotoDownloadloadFileRecordFun
@@ -643,4 +647,10 @@
     }];
     
 }
+
+- (void)didDownloadOneFileFun
+{
+    [self.tableView reloadData];
+}
+
 @end

+ 7 - 1
创维盒子/双子星云手机/Class/Set/uploadFile/downLoadFile/view/downLoadPreViewCell.m

@@ -51,7 +51,7 @@
     [mImageView setBackgroundColor:[UIColor clearColor]];
     mImageView.image = [UIImage imageNamed:@"uploadFile_image"];
     [cellBgView addSubview:mImageView];
-    [mImageView setContentMode:(UIViewContentModeScaleAspectFill)];
+    [mImageView setContentMode:(UIViewContentModeScaleAspectFit)];
     [mImageView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.mas_equalTo(15);
         make.width.mas_equalTo(36);
@@ -140,6 +140,12 @@
     mImageView.image = [UIImage imageNamed:@"uploadFile_image"];
     checkButton.selected = curFileModel.isSelectType;
 
+    NSString *fileName = [_curFileModel getFileNameFun];
+    NSString*pathStr = [cachesFileManager getFilePathWithName:fileName type:DownLoadThumbnail];
+    UIImage *curImage = [UIImage imageWithContentsOfFile:pathStr];
+    if(curImage){
+        mImageView.image = curImage;
+    }
     
     //时间戳转换为日期
     NSString *timeStr = [[NSString alloc] initWithFormat:@"%ld",curFileModel.time];

+ 4 - 2
创维盒子/双子星云手机/Class/Set/uploadFile/uploadFileManager/downloadThumbnailManager.h

@@ -9,7 +9,7 @@
 //#import "couldPhoneFileModel.h"
 #import "couldPhoneFileListModel.h"
 
-#define downloadThumbnail_tableName @"downloadThumbnail_tableName"
+//#define downloadThumbnail_tableName @"downloadThumbnail_tableName"
 //[[NSString alloc] initWithFormat:@"downloadThumbnail_tableName_%@",[connectDeviceManager shareInstance].DeviceThirdIdMod.data.sn]
 
 NS_ASSUME_NONNULL_BEGIN
@@ -17,10 +17,12 @@ NS_ASSUME_NONNULL_BEGIN
 @interface downloadThumbnailManager : NSObject
 +(downloadThumbnailManager *)shareInstance;
 
-@property(nonatomic,strong)NSMutableArray *totalTaskArr;
+@property(nonatomic,strong)NSMutableArray *waitDownloadTaskArr;
+@property(nonatomic,strong)NSMutableArray *downloadingTaskArr;
 @property(nonatomic,strong)couldPhoneFileModel *curDownloadFileModel;
 
 - (void)handlToDownloadThumbnailWith:(NSArray*)Arr;
+- (void)DownloadFileDoneOneFileFun;
 @end
 
 NS_ASSUME_NONNULL_END

+ 42 - 56
创维盒子/双子星云手机/Class/Set/uploadFile/uploadFileManager/downloadThumbnailManager.m

@@ -34,80 +34,66 @@ static downloadThumbnailManager * cur_downloadFileShareInstance = nil;
 
 - (void)handlToDownloadThumbnailWith:(NSArray*)Arr
 {
-    KWeakSelf
-    //dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
-        [couldPhoneFileModel bg_findAsync:downloadThumbnail_tableName limit:0 orderBy:nil desc:NO complete:^(NSArray * _Nullable array) {
-            [weakSelf checkTaskRepeatWithHadTask:array withNewTask:Arr];
-        }];
-    //});
-}
-
--(void)checkTaskRepeatWithHadTask:(NSArray*)hadTaskArr withNewTask:(NSArray*)newTaskArr
-{
-    NSMutableArray *curTaskArr = [NSMutableArray arrayWithArray:hadTaskArr];
-    
-    //for (couldPhoneFileModel *addModel in newTask)
-    
-    //倒序遍历
-    [newTaskArr enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-        //NSLog(@"%ld----",idx);
-        
-        couldPhoneFileModel *addModel = newTaskArr[idx];
-        addModel.bg_tableName = downloadThumbnail_tableName;
-        
-        NSString *newFileName =  [addModel getFileNameFun];
-        BOOL isNeedAdd = YES;
-        
-        for (couldPhoneFileModel *hadModel in hadTaskArr) {
-            NSString *hadFileName =  [addModel getFileNameFun];
-            
-            if([newFileName isEqualToString:hadFileName]){
-                isNeedAdd = NO;
-                break;
-            }
+    if(Arr && Arr.count >0){
+        if (!_waitDownloadTaskArr) {
+            _waitDownloadTaskArr = [NSMutableArray arrayWithArray:Arr];
+        }
+        else{
+            [_waitDownloadTaskArr addObjectsFromArray:Arr];
         }
         
-        [curTaskArr addObject:addModel];
-    }];
-   
-    
-    KWeakSelf
-    [couldPhoneFileModel bg_saveOrUpdateArrayAsync:curTaskArr complete:^(BOOL isSuccess) {
-        [weakSelf planToDownloadThumbnailFun];
-    }];
+        [self planToDownloadThumbnailFun];
+    }
 }
 
-- (void)planToDownloadThumbnailFun
-{
-    KWeakSelf
-    [couldPhoneFileModel bg_findAsync:downloadThumbnail_tableName limit:0 orderBy:nil desc:NO complete:^(NSArray * _Nullable array) {
-        [weakSelf checkCouldPhoneFileModelTaskStateBy:array];
-    }];
-}
 
-- (void)checkCouldPhoneFileModelTaskStateBy:(NSArray*)array
+- (void)planToDownloadThumbnailFun
 {
-    NSMutableArray *taskArr = [NSMutableArray new];
-    
-    for (couldPhoneFileModel*curModel in array) {
-        if(curModel.curDownloadStateType != downloadStateDone){
-            [taskArr addObject:curModel];
-        }
+    if (!_downloadingTaskArr || _downloadingTaskArr.count == 0) {
+        _downloadingTaskArr = [NSMutableArray arrayWithArray:_waitDownloadTaskArr];
+        [_waitDownloadTaskArr removeAllObjects];
     }
     
-    _totalTaskArr = taskArr;
+    [self beginDownloadThumbnailFun];
 }
 
 - (void)beginDownloadThumbnailFun
 {
-    if (_totalTaskArr.count >0) {
-        _curDownloadFileModel = _totalTaskArr.firstObject;
+    if (_downloadingTaskArr.count > 0) {
+        _curDownloadFileModel = _downloadingTaskArr.firstObject;
     }
     else{
+        if(_waitDownloadTaskArr && _waitDownloadTaskArr.count>0){
+            _downloadingTaskArr = [NSMutableArray arrayWithArray:_waitDownloadTaskArr];
+            [_waitDownloadTaskArr removeAllObjects];
+            [self beginDownloadThumbnailFun];
+        }
         return;
     }
     
+    //检测本地是否已经下载文件了
+    NSString *fileName = [self.curDownloadFileModel getFileNameFun];
+    NSString*pathStr = [cachesFileManager getFilePathWithName:fileName type:DownLoadThumbnail];
+    
+    NSFileManager *manager0 = [NSFileManager defaultManager];
+    if([manager0 fileExistsAtPath:pathStr]) {
+        //已经下载过了
+        [_downloadingTaskArr removeObject:_curDownloadFileModel];
+        _curDownloadFileModel = nil;
+        [self beginDownloadThumbnailFun];
+        return;
+    }
+    
+    
     [[NSNotificationCenter defaultCenter] postNotificationName:downloadThumbnailBeginNotification object:_curDownloadFileModel];
 }
 
+- (void)DownloadFileDoneOneFileFun
+{
+    [_downloadingTaskArr removeObject:_curDownloadFileModel];
+    _curDownloadFileModel = nil;
+    [self beginDownloadThumbnailFun];
+    
+    [[NSNotificationCenter defaultCenter] postNotificationName:downloadThumbnailDoneOneNotification object:nil];
+}
 @end

+ 3 - 0
创维盒子/双子星云手机/CloudPlayer/PlayerViewController+downloadThumbnailImage.h

@@ -6,11 +6,14 @@
 //
 
 #import "PlayerViewController.h"
+#import "RCCommandHelp.h"
+#import "downloadThumbnailManager.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
 @interface PlayerViewController (downloadThumbnailImage)
 - (void)begindownloadThumbnailImageFun:(NSNotification *)notification;
+- (void)downloadThumbnailFileFunServiceResponseFun:(NSData *)fileData with:(BOOL)isDownloadDone;
 @end
 
 NS_ASSUME_NONNULL_END

+ 62 - 4
创维盒子/双子星云手机/CloudPlayer/PlayerViewController+downloadThumbnailImage.m

@@ -26,12 +26,70 @@
     
     self.downloadThumbnailTaskUid = [iTools getTaskUidStr];
  
+    if([self.downloadThumbnailTaskUid isEqualToString:self.backupsTaskUid]
+       ||[self.downloadThumbnailTaskUid isEqualToString:self.taskUid]
+       ||[self.downloadThumbnailTaskUid isEqualToString:self.downloadFileTaskUid])
+    {//重新生成taskUid
+        [self ApplyDownloadThumbnailFun];
+        return;
+    }
+    
+    NSString *fileName = [self.curDownloadThumbnailModel getFileNameFun];
+    NSString*pathStr = [cachesFileManager getFilePathWithName:fileName type:DownLoadThumbnail];
+    long didDownloadBytes = 0;
+    
+    NSFileManager *manager0 = [NSFileManager defaultManager];
+    if([manager0 fileExistsAtPath:pathStr]) {
+        NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:pathStr]; // 创建文件句柄
+        if (fileHandle) {
+            didDownloadBytes = [fileHandle seekToEndOfFile];
+            // 关闭文件句柄
+            [fileHandle closeFile];
+        }
+    }
+    
+    NSString * commandStr = [RCCommandHelp applyForDownloadThumbnailFileBy:self.downloadThumbnailTaskUid withFilePath:self.curDownloadThumbnailModel.path withPosition:didDownloadBytes];
+    [self.commandChannelManager rc_sendData:commandStr];
+}
+
+- (void)downloadThumbnailFileFunServiceResponseFun:(NSData *)fileData with:(BOOL)isDownloadDone
+{
+    
+    NSString *fileName = [self.curDownloadThumbnailModel getFileNameFun];
+        
+    NSString*pathStr = [cachesFileManager getFilePathWithName:fileName type:DownLoadThumbnail];
+    
+    NSFileManager *manager0 = [NSFileManager defaultManager];
+    long long endOfFile = 0;
+    
+    if(![manager0 fileExistsAtPath:pathStr]) {
+        [cachesFileManager getFileNameWithContent:fileData fileName:fileName type:DownLoadThumbnail];
+    }
+    else{
+        NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:pathStr]; // 创建文件句柄
+        if (fileHandle) {
+            endOfFile = [fileHandle seekToEndOfFile];
+            if (endOfFile >=  0) {
+                if(endOfFile == self.curDownloadThumbnailModel.didDownloadBytes){
+                    [fileHandle writeData:fileData];
+                }
+            }
+            
+            endOfFile = [fileHandle seekToEndOfFile];
+            // 关闭文件句柄
+            [fileHandle closeFile];
+        }
+    }
+    
+    long didDownloadBytes = fileData.length;
+    if(endOfFile > 0){
+        didDownloadBytes = endOfFile;
+    }
     
+    self.curDownloadThumbnailModel.didDownloadBytes = didDownloadBytes;
+   
+    [[downloadThumbnailManager shareInstance] DownloadFileDoneOneFileFun];
     
-//    NSString * commandStr = [RCCommandHelp applyForBackupsFileBy:self.backupsTaskUid withFileName:self.backupsFileName withSavePath:backupsDefaultPath];
-//    
-//    
-//    [self.commandChannelManager rc_sendData:commandStr];
 }
 
 @end

+ 5 - 2
创维盒子/双子星云手机/CloudPlayer/PlayerViewController+otherDelegate.mm

@@ -16,6 +16,7 @@
 #import "HaveNewVersionView.h"
 #import "connectDeviceManager.h"
 #import "PlayerViewController+downloadFile.h"
+#import "PlayerViewController+downloadThumbnailImage.h"
 #import "downloadManager.h"
 #import "uploadFileManager.h"
 #import "cloudPhoneExtraFileListModel.h"
@@ -352,7 +353,7 @@
     NSData *msgTypeData = [curData subdataWithRange:NSMakeRange(1, 1)];
     char msgType = 0;
     [msgTypeData getBytes:&msgType length:sizeof(msgType)];
-    //HLog(@"msgType: %d",msgType);
+    HLog(@"msgType: %d",msgType);
     
     //taskId  6位字符串
     NSData *taskIdData = [curData subdataWithRange:NSMakeRange(2, 6)];
@@ -424,7 +425,9 @@
     if([taskIdStr isEqualToString:self.downloadFileTaskUid]){
         [self downloadFileFunServiceResponseFun:fileData with:NO];
     }
-    
+    else if ([taskIdStr isEqualToString:self.downloadThumbnailTaskUid]){
+        [self downloadThumbnailFileFunServiceResponseFun:fileData with:YES];
+    }
 }
 
 - (void)checkAllTaskFun

+ 1 - 0
创维盒子/双子星云手机/CloudPlayer/PlayerViewController.mm

@@ -14,6 +14,7 @@
 #import "PlayerViewController+upLoadFile.h"
 #import "PlayerViewController+backupsFile.h"
 #import "PlayerViewController+downloadFile.h"
+#import "PlayerViewController+downloadThumbnailImage.h"
 
 #import <AVFoundation/AVFoundation.h>
 

+ 7 - 0
创维盒子/双子星云手机/CloudPlayer/RCCommandHelp.h

@@ -249,6 +249,13 @@ NS_ASSUME_NONNULL_BEGIN
  */
 + (NSString *)uploadOrBackupsDoneBy:(NSString *)taskUid withFileName:(NSString *)fileName
                            withType:(BOOL)isUploadType;
+
+/**
+ * @brief 下载缩略图
+ *
+ * @param taskUid
+ */
++ (NSString *)applyForDownloadThumbnailFileBy:(NSString *)taskUid withFilePath:(NSString *)filePath withPosition:(long)position;
 @end
 
 NS_ASSUME_NONNULL_END

+ 17 - 0
创维盒子/双子星云手机/CloudPlayer/RCCommandHelp.m

@@ -1157,4 +1157,21 @@ withType:(BOOL)isUploadType
     
     return dataStr;
 }
+
++ (NSString *)applyForDownloadThumbnailFileBy:(NSString *)taskUid withFilePath:(NSString *)filePath withPosition:(long)position
+{
+    NSString *dataStr =[NSString stringWithFormat:@"{\"data\":{\"taskUid\":\"%@\",\"filePath\":\"%@\",\"width\":\"150\",\"height\":\"150\",\"position\":\"%ld\"},\"type\":\"getShotCat\"}",taskUid,filePath,position];
+
+    if (USENEWCONTROLLCOMMONDNO500)
+    {
+//        dataStr = [self commondAppendingHeadAndEndStrWithSourStr:dataStr];
+    }
+    else
+    {
+        dataStr = [self commandAppending00StringWithSourStr:dataStr];
+    }
+    
+    return dataStr;
+}
+
 @end