ソースを参照

1.备份新逻辑

huangxiaodong 1 年間 前
コミット
67c55df1e9

+ 6 - 1
创维盒子/双子星云手机/Class/Set/uploadFile/model/photosBackupsTaskModel.h

@@ -31,13 +31,15 @@ typedef enum{
 //@property (nonatomic, strong) PHFetchOptions *options;
 //@property (nonatomic, strong) NSArray *models;
 
-@property (nonatomic, copy) NSString *totalLocalIdentifier;
+@property (nonatomic, copy) NSString *totalLocalIdentifier;//相册全部的
+@property (nonatomic, copy) NSString *curTaskLocalIdentifier;//对比上一次相册的 的到新加入相册的内容
 @property (nonatomic, strong) NSArray *LocalIdentifierArr;
 @property (nonatomic, copy) NSString *filename;
 
 @property (nonatomic, assign) BOOL didBackupsOneFileType;//某个文件已经存在
 @property (nonatomic, assign) NSUInteger failCount;
 @property (nonatomic, assign) NSUInteger didBackupsCount;
+//@property (nonatomic, assign) NSUInteger curTaskBackupsCount;//本次任务备份的数量
 @property (nonatomic, assign) backupsSuspendType isBackupsSuspendType;
 @property (nonatomic, assign) backupsStateType curBackupsState;
 @property (nonatomic, copy) NSString *backupsTipMsg;//备份失败消息等
@@ -46,8 +48,11 @@ typedef enum{
 
 //@property (nonatomic, assign)  uploadStateType curUploadStateType;
 @property (nonatomic, assign)  uploadFileType curUploadFileType;
+
 @property (nonatomic, assign)  long didUploadBytes;//已经上传的字节数
+@property (nonatomic, assign)  long preDidUploadBytes;//上次传到了多少
 @property (nonatomic, assign)  long totalBytes;//总字节数
+
 @property (nonatomic, assign) NSTimeInterval  preTimeInterval;//计算速度用
 @property (nonatomic, assign) NSTimeInterval  curTimeInterval;//计算速度用
 

+ 78 - 8
创维盒子/双子星云手机/Class/Set/uploadFile/uploadFileManager/backupsFileManager.m

@@ -13,6 +13,7 @@
 @interface backupsFileManager ()
 /**检测任务10s后 无反馈重新开始 */
 @property (nonatomic, assign) NSInteger  taskRenewTime; //
+@property (nonatomic,strong)photosBackupsTaskModel *lastModel;//最后一次备份的数据
 @end
 
 @implementation backupsFileManager
@@ -83,20 +84,20 @@ static backupsFileManager * cur_backupsFileShareInstance = nil;
             [self keepDatabaseOneDataFun];
         }
         
-        photosBackupsTaskModel *lastModel = array.firstObject;
+        self->_lastModel = array.firstObject;
         
-        HLog(@"1 bg_id:%@",lastModel.bg_id);
+        HLog(@"1 bg_id:%@",self->_lastModel.bg_id);
         
-        if(lastModel.isBackupsSuspendType == backupsSuspendByUser){
+        if(self->_lastModel.isBackupsSuspendType == backupsSuspendByUser){
             return;
         }
         
-        if(lastModel.curBackupsState == backupsStateFail
-           ||lastModel.curBackupsState == backupsStateDone){//上次备份完成
+        if(self->_lastModel.curBackupsState == backupsStateFail
+           ||self->_lastModel.curBackupsState == backupsStateDone){//上次备份完成
             [self getAllAlbumsFun];
         }
         else{//继续上次的备份任务
-            [self handelBackupsModelFun:lastModel];
+            [self handelBackupsModelFun:self->_lastModel];
         }
     }];
     
@@ -112,6 +113,7 @@ static backupsFileManager * cur_backupsFileShareInstance = nil;
 - (void)getAllAlbumsFun
 {
     //
+    KWeakSelf
     [[TZImageManager manager] getAllAlbums:YES allowPickingImage:YES needFetchAssets:NO completion:^(NSArray<TZAlbumModel *> *models) {
         
         if(models.count >= 1){
@@ -138,6 +140,13 @@ static backupsFileManager * cur_backupsFileShareInstance = nil;
             
             taskModel.totalLocalIdentifier = allLocalIdentifier;
             
+            if(self->_lastModel && self->_lastModel.totalLocalIdentifier){//相册备份排重
+                taskModel.curTaskLocalIdentifier = [weakSelf AlbumBackupsHandleNew:taskModel];
+            }
+            else{
+                taskModel.curTaskLocalIdentifier = allLocalIdentifier;
+            }
+            
             HLog(@"2 bg_id:%@",taskModel.bg_id);
             
             [taskModel bg_saveAsync:^(BOOL isSuccess) {
@@ -153,13 +162,49 @@ static backupsFileManager * cur_backupsFileShareInstance = nil;
     }];
 }
 
+- (NSString*)AlbumBackupsHandleNew:(photosBackupsTaskModel * )taskModel
+{
+    NSArray* curLocalIdentifierArr = [taskModel.totalLocalIdentifier componentsSeparatedByString:@"&"];
+    NSArray* preLocalIdentifierArr = [_lastModel.totalLocalIdentifier componentsSeparatedByString:@"&"];
+    
+    NSMutableArray *allArr = [NSMutableArray arrayWithArray:curLocalIdentifierArr];
+    
+    for (NSString*localIdentifier in preLocalIdentifierArr) {
+        for (NSString* newlocalIdentifier in allArr) {
+            if([localIdentifier isEqualToString:newlocalIdentifier]){
+                [allArr removeObject:newlocalIdentifier];
+                break;
+            }
+        }
+    }
+    
+    NSMutableString *allLocalIdentifier= [NSMutableString new];
+    for (NSString* newlocalIdentifier in allArr) {
+        if(allLocalIdentifier.length >0){
+            [allLocalIdentifier appendString:@"&"];
+        }
+        [allLocalIdentifier appendString:newlocalIdentifier];
+    }
+    
+    return allLocalIdentifier;
+}
+
 - (void)handelBackupsModelFun:(photosBackupsTaskModel*)backupsTaskModel
 {
     _curPhotosBackupsTaskMod = backupsTaskModel;
     _curPhotosBackupsTaskMod.isBackupsSuspendType = backupsSuspendNone;
     _curPhotosBackupsTaskMod.curBackupsState = backupsStateUploading;
     
-    _curPhotosBackupsTaskMod.LocalIdentifierArr = [backupsTaskModel.totalLocalIdentifier componentsSeparatedByString:@"&"];
+    _curPhotosBackupsTaskMod.LocalIdentifierArr = [backupsTaskModel.curTaskLocalIdentifier componentsSeparatedByString:@"&"];
+    
+    if(_curPhotosBackupsTaskMod.LocalIdentifierArr.count == 0){
+        
+        _curPhotosBackupsTaskMod.didBackupsCount = 0;
+        _curPhotosBackupsTaskMod.curBackupsState = backupsStateDone;
+        [self RefreshDatabaseFun];
+        [self changeBackupsFileStateFun];
+        return;
+    }
     
     if(_curPhotosBackupsTaskMod.LocalIdentifierArr.count
        <= (_curPhotosBackupsTaskMod.didBackupsCount + _curPhotosBackupsTaskMod.failCount))
@@ -189,7 +234,7 @@ static backupsFileManager * cur_backupsFileShareInstance = nil;
     NSInteger index = _curPhotosBackupsTaskMod.didBackupsCount + _curPhotosBackupsTaskMod.failCount;
     
     if(!_curPhotosBackupsTaskMod.LocalIdentifierArr){
-        _curPhotosBackupsTaskMod.LocalIdentifierArr = [_curPhotosBackupsTaskMod.totalLocalIdentifier componentsSeparatedByString:@"&"];
+        _curPhotosBackupsTaskMod.LocalIdentifierArr = [_curPhotosBackupsTaskMod.curTaskLocalIdentifier componentsSeparatedByString:@"&"];
     }
     
     if(index >= _curPhotosBackupsTaskMod.LocalIdentifierArr.count){
@@ -303,6 +348,7 @@ static backupsFileManager * cur_backupsFileShareInstance = nil;
 - (void)afterGetImageDataFun:(NSData*)imageData
 {
     _curPhotosBackupsTaskMod.imageData = imageData;
+    _curPhotosBackupsTaskMod.didUploadBytes = 0;
     _curPhotosBackupsTaskMod.totalBytes = [imageData length];
     [[NSNotificationCenter defaultCenter] postNotificationName:backupsFileBeginNotification object:_curPhotosBackupsTaskMod];
 }
@@ -316,6 +362,24 @@ static backupsFileManager * cur_backupsFileShareInstance = nil;
 
 - (void)afterGetVideoDataFun
 {
+    NSString *filePath = [cachesFileManager getFilePathWithName:_curPhotosBackupsTaskMod.filename type:uploadFileTypeVideo]; // 文件路径
+    
+    NSFileManager *manager0 = [NSFileManager defaultManager];
+    if([manager0 fileExistsAtPath:filePath]) {
+        NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath]; // 创建文件句柄
+        
+        if (fileHandle) {
+            long long endOfFile = [fileHandle seekToEndOfFile];
+            
+            _curPhotosBackupsTaskMod.didUploadBytes = 0;
+            _curPhotosBackupsTaskMod.totalBytes = endOfFile;
+            [fileHandle closeFile];
+        }
+        
+    }
+    
+    
+    
     [[NSNotificationCenter defaultCenter] postNotificationName:backupsFileBeginNotification object:_curPhotosBackupsTaskMod];
 }
 
@@ -323,6 +387,12 @@ static backupsFileManager * cur_backupsFileShareInstance = nil;
 {
     [self deleteVideoFun];
     _curPhotosBackupsTaskMod.didBackupsCount += 1;
+    
+//    if(!_curPhotosBackupsTaskMod.didBackupsOneFileType)
+//    {
+//        _curPhotosBackupsTaskMod.curTaskBackupsCount += 1; 
+//    }
+    
     [self RefreshDatabaseFun];
     [self changeBackupsFileStateFun];
     

+ 106 - 4
创维盒子/双子星云手机/Class/Set/uploadFile/uploadFileView/backupsFileRecordCell.m

@@ -21,6 +21,7 @@
 @property(nonatomic,strong) CAGradientLayer *glayer;
 
 @property(nonatomic,strong) UILabel *fileNamelabel;
+@property(nonatomic,strong) UILabel *fileTimelabel;
 @property(nonatomic,strong) UILabel *fileProgresslabel;
 @property(nonatomic,strong) UILabel *fileSpeedlabel;
 
@@ -127,16 +128,32 @@
     _fileNamelabel = [[UILabel alloc] init];
     _fileNamelabel.font = [UIFont boldSystemFontOfSize:16.0];
     _fileNamelabel.textColor = [UIColor blackColor];
-    //_fileNamelabel.backgroundColor = [UIColor greenColor];
+    //_fileNamelabel.backgroundColor = [UIColor orangeColor];
     [self.contentView addSubview:_fileNamelabel];
     
     [_fileNamelabel mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.mas_equalTo(_fileImageView.mas_right).offset(10);
-        make.right.mas_equalTo(_upLoadStateButton.mas_left).offset(-10);
+        make.right.mas_equalTo(self.mas_centerX).offset(-20);
         make.height.mas_equalTo(19);
         make.bottom.mas_equalTo(_progressBgView.mas_top).offset(-3);
     }];
     
+    
+    _fileTimelabel = [[UILabel alloc] init];
+    //_fileTimelabel.font = [UIFont systemFontOfSize:13.0];
+    _fileTimelabel.adjustsFontSizeToFitWidth = YES;
+    _fileTimelabel.textColor = [UIColor blackColor];
+    _fileTimelabel.textAlignment = NSTextAlignmentRight;
+    //_fileTimelabel.backgroundColor = [UIColor greenColor];
+    [self.contentView addSubview:_fileTimelabel];
+    //_fileTimelabel.text = @"当前文件预计需20分";
+    [_fileTimelabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(self.mas_centerX).offset(-20);
+        make.right.mas_equalTo(_upLoadStateButton.mas_left).offset(-10);
+        make.height.mas_equalTo(15);
+        make.bottom.mas_equalTo(_progressBgView.mas_top).offset(-3);
+    }];
+    
     _fileProgresslabel = [[UILabel alloc] init];
     _fileProgresslabel.font = [UIFont systemFontOfSize:12.0];
     _fileProgresslabel.textColor = [UIColor hwColor:@"#959799" alpha:1.0];
@@ -253,6 +270,7 @@
         
         if(_curPhotosBackupsTaskModel.preTimeInterval <= 0){
             _fileSpeedlabel.text = @"--";
+            [self handlFileTimelabelFunBy:0];
         }
         else{
             NSTimeInterval  timers = _curPhotosBackupsTaskModel.curTimeInterval - _curPhotosBackupsTaskModel.preTimeInterval;
@@ -270,6 +288,8 @@
                 }
                 
                 _fileSpeedlabel.text = speedStr;
+                
+                [self handlFileTimelabelFunBy:speed];
             }
         }
         
@@ -282,14 +302,17 @@
         _fileSpeedlabel.hidden = NO;
         
         _upLoadStateButton.hidden = NO;
+        [self handlFileTimelabelFunBy:-1];
     }
     else if(_curPhotosBackupsTaskModel.curBackupsState == backupsStateFail){
         _upLoadStateButton.hidden = YES;
         _progressBgView.hidden = YES;
+        [self handlFileTimelabelFunBy:-1];
     }
     else{
         _upLoadStateButton.hidden = YES;
         _progressBgView.hidden = YES;
+        [self handlFileTimelabelFunBy:-1];
     }
     
     _fileNamelabel.text = NSLocalizedString(@"set_Privacy_title_image",nil);
@@ -310,7 +333,7 @@
         
         _rightTiplabel.hidden = NO;
         
-        _rightTiplabel.text = [[NSString alloc] initWithFormat:@"%@:%ld",NSLocalizedString(@"File_Transfer_List_head_title_done",nil),_curPhotosBackupsTaskModel.didBackupsCount];
+        _rightTiplabel.text = [[NSString alloc] initWithFormat:@"%@:%ld",NSLocalizedString(@"backups_cur_task_done_numbers",nil),_curPhotosBackupsTaskModel.didBackupsCount];
     }
     else if(_curPhotosBackupsTaskModel.curBackupsState == backupsStateFail){
         
@@ -322,7 +345,9 @@
         _rightTiplabel.text = _curPhotosBackupsTaskModel.backupsTipMsg;
     }
     else{
-        _fileProgresslabel.text = [[NSString alloc] initWithFormat:@"%ld/%ld",_curPhotosBackupsTaskModel.didBackupsCount,_curPhotosBackupsTaskModel.count - _curPhotosBackupsTaskModel.failCount];
+        //_fileProgresslabel.text = [[NSString alloc] initWithFormat:@"%ld/%ld",_curPhotosBackupsTaskModel.didBackupsCount,_curPhotosBackupsTaskModel.count - _curPhotosBackupsTaskModel.failCount];
+        
+        [self handlFileProgresslabelFun];
         
         //进度设置
         CGRect frame = CGRectMake(0, 0, SCREEN_W - 15*2 - 34*2, 2);
@@ -346,6 +371,83 @@
     
 }
 
+- (void)handlFileTimelabelFunBy:(NSInteger)speed
+{
+    NSString * timeStr = @"--";
+    CGFloat estimateTime = 0.0;
+    if(speed < 0){
+        _fileTimelabel.text = @"";
+        return;
+    }
+    else if (speed == 0){
+        //不处理
+        //estimateTime = 0.0;
+    }
+    else{
+        if(_curPhotosBackupsTaskModel.totalBytes >0
+           && _curPhotosBackupsTaskModel.didUploadBytes>0
+           && _curPhotosBackupsTaskModel.totalBytes > _curPhotosBackupsTaskModel.didUploadBytes){
+            estimateTime = (_curPhotosBackupsTaskModel.totalBytes - _curPhotosBackupsTaskModel.didUploadBytes)/speed;
+        }
+        
+    }
+    
+    if(estimateTime>0){
+        NSInteger seconds = (NSInteger)estimateTime;
+        if(seconds >= 60){
+            timeStr = [[NSString alloc] initWithFormat:@"%ld%@",seconds/60,NSLocalizedString(@"common_minute",nil)];
+        }
+        else{
+            timeStr = [[NSString alloc] initWithFormat:@"%ld%@",seconds,NSLocalizedString(@"common_minute",nil)];
+        }
+        
+    }
+    
+    _fileTimelabel.text = [[NSString alloc] initWithFormat:@"%@%@",NSLocalizedString(@"Estimated_time",nil),timeStr];
+
+    
+//    "Estimated_time"      = "当前文件预计需";
+//    "common_minute"      = "分";
+//    "common_second"      = "秒";
+}
+
+- (void)handlFileProgresslabelFun
+{
+    if(_curPhotosBackupsTaskModel.totalBytes == 0
+       || _curPhotosBackupsTaskModel.didUploadBytes == 0){
+        _fileProgresslabel.text = @"";
+        return;
+    }
+    
+    NSString * totalSizeStr = nil;
+    NSInteger totalSize_k = _curPhotosBackupsTaskModel.totalBytes / 1024;
+    if(totalSize_k < 1024){
+        totalSizeStr = [[NSString alloc] initWithFormat:@"%ldKB",totalSize_k];
+    }
+    else if( totalSize_k >= 1024 && totalSize_k < 1024*1024){
+        totalSizeStr = [[NSString alloc] initWithFormat:@"%.1fMB",totalSize_k/1024.0];
+        
+    }
+    else{
+        totalSizeStr = [[NSString alloc] initWithFormat:@"%.2fG",totalSize_k/1024.0/1024.0];
+    }
+    
+    NSString * didUploadStr = nil;
+    NSInteger didUploadSize_k = _curPhotosBackupsTaskModel.didUploadBytes / 1024;
+    if(didUploadSize_k < 1024){
+        didUploadStr = [[NSString alloc] initWithFormat:@"%ldKB",didUploadSize_k];
+    }
+    else if( didUploadSize_k >= 1024 && didUploadSize_k < 1024*1024){
+        didUploadStr = [[NSString alloc] initWithFormat:@"%.1fMB",didUploadSize_k/1024.0];
+        
+    }
+    else{
+        didUploadStr = [[NSString alloc] initWithFormat:@"%.2fG",didUploadSize_k/1024.0/1024.0];
+    }
+    
+    
+    _fileProgresslabel.text = [[NSString alloc] initWithFormat:@"%@/%@",didUploadStr,totalSizeStr];
+}
 
 -(void)longPressClick:(UILongPressGestureRecognizer *)press{
     //state属性是所有手势父类提供的方法,用于记录手势的状态

+ 7 - 0
创维盒子/双子星云手机/CloudPlayer/PlayerViewController+backupsFile.m

@@ -163,6 +163,9 @@
 #pragma mark 图片上传
 -(void)beginGotoBackupsImageFun:(NSNumber*)fileLengthNum{
     
+    self.curPhotosBackupsTaskMod.didUploadBytes = [fileLengthNum longLongValue];
+    self.curPhotosBackupsTaskMod.preDidUploadBytes = self.curPhotosBackupsTaskMod.didUploadBytes;
+    
     self.backupsCutFileDataArr = [self backupsFileCutPartsBy:self.backupsAllFileData withDidUpLoadSize:[fileLengthNum integerValue]];
     
     if(!self.backupsCutFileDataArr || self.backupsCutFileDataArr.count == 0){
@@ -178,6 +181,9 @@
 //每次从文件重新切一片 传一片
 -(void)backupsBeginGotoUploadVidelFun:(NSNumber*)fileLengthNum{
     
+    self.curPhotosBackupsTaskMod.didUploadBytes = [fileLengthNum longLongValue];
+    self.curPhotosBackupsTaskMod.preDidUploadBytes = self.curPhotosBackupsTaskMod.didUploadBytes;
+    
     NSData *data = [self backupsCutVideoFileFunAtIndex:fileLengthNum.longLongValue];
     HLog(@"data leng:%ld",[data length]);
 
@@ -358,6 +364,7 @@
         return;
     }
     
+    self.curPhotosBackupsTaskMod.didUploadBytes = [fileLengthNum longLongValue];
     [[backupsFileManager shareInstance] changeBackupsFileStateFun];
     
     if(self.backupsIndexOfUploadFlie < self.backupsCutFileDataArr.count -1) {

+ 4 - 0
创维盒子/双子星云手机/zh-Hans.lproj/Localizable.strings

@@ -427,3 +427,7 @@
 "other_clear"      = "清理";
 "clear_cache_tip"      = "清理的缓存包括上传下载图片、视频等缓存,请问是否清理?";
 "clear_cache_include_file_Transfer"      = "勾选清除上传/下载/备份完成及失败的记录";
+"Estimated_time"      = "当前文件预计需";
+"common_minute"      = "分";
+"common_second"      = "秒";
+"backups_cur_task_done_numbers"   = "本次更新备份";