// // backupsFileManager.m // 隐私保护 // // Created by xd h on 2024/1/3. // #import "backupsFileManager.h" @implementation backupsFileManager static backupsFileManager * cur_backupsFileShareInstance = nil; +(backupsFileManager *)shareInstance; { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ cur_backupsFileShareInstance = [[backupsFileManager alloc] init]; }); return cur_backupsFileShareInstance; } - (id)init { self = [super init]; if (self) { //[self initManager]; } return self; } - (void)handlePhotosBackupsFun { BOOL haveOpenBackups = [HWDataManager getBoolWithKey:Const_photo_backups_state]; if(!haveOpenBackups){ return; } //相册权限 if (![[TZImageManager manager] authorizationStatusAuthorized]){ [HWDataManager setBoolWithKey:Const_photo_backups_state value:NO]; return; } [photosBackupsTaskModel bg_findAsync:backups_photos_tableName limit:1 orderBy:nil desc:YES complete:^(NSArray * _Nullable array) { if(!array || array.count == 0){ [self getAllAlbumsFun]; return; } photosBackupsTaskModel *lastModel = array.firstObject; HLog(@"1 bg_id:%@",lastModel.bg_id); if(lastModel.isSuspendType){ return; } if(lastModel.curBackupsState == backupsStateFail ||lastModel.curBackupsState == backupsStateDone){//上次备份完成 [self getAllAlbumsFun]; } else{//继续上次的备份任务 [self handelBackupsModelFun:lastModel]; } }]; } //备份开始查询相册 - (void)getAllAlbumsFun { // [[TZImageManager manager] getAllAlbums:YES allowPickingImage:YES needFetchAssets:NO completion:^(NSArray *models) { if(models.count >= 1){ TZAlbumModel *curAlbumModel= models.firstObject; photosBackupsTaskModel * taskModel = [photosBackupsTaskModel new]; taskModel.count = curAlbumModel.count; //taskModel.result = curAlbumModel.result; taskModel.failCount = 0; taskModel.didBackupsCount = 0; taskModel.bg_tableName = backups_photos_tableName; NSMutableString *allLocalIdentifier= [NSMutableString new]; for (PHAsset *asset in curAlbumModel.result) { if (asset.localIdentifier) { if(allLocalIdentifier.length >0){ [allLocalIdentifier appendString:@"&"]; } [allLocalIdentifier appendString:asset.localIdentifier]; } } taskModel.totalLocalIdentifier = allLocalIdentifier; HLog(@"2 bg_id:%@",taskModel.bg_id); [taskModel bg_saveAsync:^(BOOL isSuccess) { if(!isSuccess){ HLog(@"\n\nError!!!\n\n"); } else{ //[self handelBackupsModelFun:taskModel]; [self handlePhotosBackupsFun]; } }]; } }]; } - (void)handelBackupsModelFun:(photosBackupsTaskModel*)backupsTaskModel { _curPhotosBackupsTaskMod = backupsTaskModel; _curPhotosBackupsTaskMod.LocalIdentifierArr = [backupsTaskModel.totalLocalIdentifier componentsSeparatedByString:@"&"]; if(_curPhotosBackupsTaskMod.LocalIdentifierArr.count <= (_curPhotosBackupsTaskMod.didBackupsCount + _curPhotosBackupsTaskMod.failCount)) { _curPhotosBackupsTaskMod.curBackupsState = backupsStateDone; [self RefreshDatabaseFun]; return; } [self beginBackupsFileFun]; } - (void)beginBackupsFileFun { NSInteger index = _curPhotosBackupsTaskMod.didBackupsCount + _curPhotosBackupsTaskMod.failCount; if(index >= _curPhotosBackupsTaskMod.LocalIdentifierArr.count){ _curPhotosBackupsTaskMod.curBackupsState = backupsStateDone; [self RefreshDatabaseFun]; return; } NSString *curLocalIdentifier = _curPhotosBackupsTaskMod.LocalIdentifierArr[index]; if(!curLocalIdentifier || curLocalIdentifier.length == 0) { [self getDataWrongToChangeFailFun]; return; } PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[curLocalIdentifier] options:nil]; PHAsset *asset = fetchResult.firstObject; _curPhotosBackupsTaskMod.filename = [asset valueForKey:@"filename"]; KWeakSelf if(asset.mediaType == PHAssetMediaTypeImage){ _curPhotosBackupsTaskMod.curUploadFileType = uploadFileTypeImage; [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) { // 直接得到最终的 NSData 数据 if (imageData) { [weakSelf afterGetImageDataFun:imageData]; } else{ [weakSelf getDataWrongToChangeFailFun]; } }]; } else{ _curPhotosBackupsTaskMod.curUploadFileType = uploadFileTypeVideo; } } - (void)getDataWrongToChangeFailFun { _curPhotosBackupsTaskMod.failCount += 1; [self RefreshDatabaseFun]; [self beginBackupsFileFun]; } - (void)RefreshDatabaseFun { HLog(@"3 bg_id:%@",_curPhotosBackupsTaskMod.bg_id); [_curPhotosBackupsTaskMod bg_saveOrUpdateAsync:^(BOOL isSuccess) { if(isSuccess){ } }]; } - (void)afterGetImageDataFun:(NSData*)imageData { _curPhotosBackupsTaskMod.imageData = imageData; _curPhotosBackupsTaskMod.totalBytes = [imageData length]; [[NSNotificationCenter defaultCenter] postNotificationName:backupsFileBeginNotification object:_curPhotosBackupsTaskMod]; } - (void)backupsFileDoneFun { _curPhotosBackupsTaskMod.didBackupsCount +=1; [self beginBackupsFileFun]; // long totalSizeByte = _curUploadFileDataModel.totalBytes; // // [self changeUploadFileState:uploadStateDone withDidUploadBytes:totalSizeByte withModel:_curUploadFileDataModel complete:^(BOOL isSuccess) { // [self->_fileModelDataArr removeObject:self->_curUploadFileDataModel]; // // self->_isUploadIngType = NO; // if(self->_fileModelDataArr.count > 0){ // [self beginUploadFileFun]; // } // }]; } @end