// // boxSaveFileManager.m // Private-X // // Created by xd h on 2024/5/23. // #import "boxSaveFileManager.h" @implementation boxSaveFileManager static boxSaveFileManager * cur_boxSaveFileShareInstance = nil; +(boxSaveFileManager *)shareInstance; { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ cur_boxSaveFileShareInstance = [[boxSaveFileManager alloc] init]; }); return cur_boxSaveFileShareInstance; } - (id)init { self = [super init]; if (self) { //[self initManager]; } return self; } //添加保存记录 - (void)addBoxSaveRecordFunBy:(NSArray*)arr complete:(custom_complete_B)complete{ if(arr && arr.count >0 ){ NSString * boxSaveDefaultPath = [HWDataManager getStringWithKey:stringKeyAddSn(Const_box_save_default_path)]; if(!boxSaveDefaultPath || boxSaveDefaultPath.length == 0){ boxSaveDefaultPath = Const_default_save_path; } for (ShareFileDataModel*model in arr) { model.bg_tableName = share_box_save_tableName; model.boxSavePath = boxSaveDefaultPath; } //[ShareFileDataModel bg_saveOrUpdateArray:arr]; [ShareFileDataModel bg_saveOrUpdateArrayAsync:arr complete:^(BOOL isSuccess) { complete(isSuccess); }]; } } #pragma mark 读取数据库数据 - (void)getDataInDatabaseFun:(BOOL)isReGet complete:(custom_complete_Arr)complete { if(_databaseArr && _databaseArr.count == 3 && !isReGet){ complete(_databaseArr); return; } if(!_databaseArr) { _databaseArr = [NSMutableArray new]; } //KWeakSelf //dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{ // NSLock *lock = [NSLock new]; // [lock lock]; [ShareFileDataModel bg_findAsync:share_box_save_tableName limit:0 orderBy:nil desc:YES complete:^(NSArray * _Nullable array) { NSMutableArray *failArr = [NSMutableArray new]; NSMutableArray *doneArr = [NSMutableArray new]; NSMutableArray *otherArr = [NSMutableArray new]; if(array && array.count >0){ for (ShareFileDataModel * curModel in array) { if(curModel.saveboxStateType == saveBoxStateFail){ [failArr addObject:curModel]; } else if(curModel.saveboxStateType == saveBoxStateDone){ [doneArr addObject:curModel]; } else{ [otherArr addObject:curModel]; } } } NSLock *lock = [NSLock new]; [lock lock]; NSMutableArray *newArr = [NSMutableArray new]; [newArr addObject:otherArr]; [newArr addObject:doneArr]; [newArr addObject:failArr]; self->_databaseArr = newArr; [lock unlock]; complete(self->_databaseArr); }]; // [lock unlock]; //}); } - (void)handleDatabaseArrByDelete:(ShareFileDataModel*)delModel { if(_databaseArr && _databaseArr.count == 3 ){ if(delModel.saveboxStateType == saveBoxStateDone) { NSMutableArray *arr = _databaseArr[1]; [self deteleModel:delModel inArr:arr]; } else if(delModel.saveboxStateType == saveBoxStateFail){ NSMutableArray *arr = _databaseArr[2]; [self deteleModel:delModel inArr:arr]; } else{ NSMutableArray *arr = _databaseArr[0]; [self deteleModel:delModel inArr:arr]; } } } #pragma mark 处理删除内存数据 - (void)deteleModel:(ShareFileDataModel*)delModel inArr:(NSMutableArray*)delArr{ for (ShareFileDataModel *dataModel in delArr) { if(delModel.bg_id.integerValue == dataModel.bg_id.integerValue){ [delArr removeObject:dataModel]; break;; } } } #pragma mark 删除本地数据库记录 - (void)deleteBoxSaveFileRecordBy:(NSMutableArray *)delArr{ NSMutableArray *curDelArr = [NSMutableArray arrayWithArray:delArr]; for (ShareFileDataModel *dataModel in curDelArr) { //1.内存数据删除 [self handleDatabaseArrByDelete:dataModel]; //2.删除数据量 NSMutableString* where = [[NSMutableString alloc] initWithString:@"where "]; NSString *curStr = [NSString stringWithFormat:@"%@=%@ ",bg_sqlKey(@"bg_id"),bg_sqlValue(dataModel.bg_id)]; [where appendString:curStr]; [ShareFileDataModel bg_deleteAsync:share_box_save_tableName where:where complete:^(BOOL isSuccess) { if(isSuccess){ } }]; } } #pragma mark 更新本地数据库记录 - (void)updataBoxSaveDataBy:(downStatusModel*)downStatusMod { //1.修改数据库 NSMutableArray *firstArr = [NSMutableArray arrayWithArray:_databaseArr[0]]; NSMutableArray *needUpdatArr = [NSMutableArray new]; for (downStatusDataModel*updataModel in downStatusMod.data) { for (ShareFileDataModel* model in firstArr) { //HLog(@"%@\n%@",updataModel.url,model.fileUrl); //去掉空格判断 //model.fileUrl = [model.fileUrl stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([updataModel.url isEqualToString:model.fileUrl]) { if (updataModel.curStatus == 0 || updataModel.curStatus == 3) { //msg = download complied; msg = progress=0.48; NSString *ProgressMsg = updataModel.msg; if([ProgressMsg containsString:@"msg = progress="]){ ProgressMsg = [ProgressMsg stringByReplacingOccurrencesOfString:@"msg = progress=" withString:@""]; model.saveProgress = ProgressMsg.floatValue; } } else if (updataModel.curStatus == 1) { [self handleDatabaseArrByDelete:model]; //成功 model.saveboxStateType = saveBoxStateDone; [needUpdatArr addObject:model]; NSMutableArray *doneArr = _databaseArr[1]; [doneArr addObject:model]; } else{ [self handleDatabaseArrByDelete:model]; //失败 model.saveboxStateType = saveBoxStateFail; [needUpdatArr addObject:model]; NSMutableArray *failArr = _databaseArr[2]; [failArr addObject:model]; } break; } } } if(needUpdatArr.count > 0){ [ShareFileDataModel bg_saveOrUpdateArrayAsync:needUpdatArr complete:^(BOOL isSuccess) { if (isSuccess) { } }]; } } #pragma mark 更新本地数据库记录 - (void)updataBoxSaveDataByFail:(ShareFileDataModel*)updataModel { //1.修改数据库 NSMutableArray *firstArr = [NSMutableArray arrayWithArray:_databaseArr[0]]; NSMutableArray *needUpdatArr = [NSMutableArray new]; for (ShareFileDataModel* model in firstArr) { //HLog(@"%@\n%@",updataModel.url,model.fileUrl); //去掉空格判断 //model.fileUrl = [model.fileUrl stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([updataModel.fileUrl isEqualToString:model.fileUrl]) { [self handleDatabaseArrByDelete:model]; //失败 model.saveboxStateType = saveBoxStateFail; [needUpdatArr addObject:model]; NSMutableArray *failArr = _databaseArr[2]; [failArr addObject:model]; break; } } if(needUpdatArr.count > 0){ [ShareFileDataModel bg_saveOrUpdateArrayAsync:needUpdatArr complete:^(BOOL isSuccess) { if (isSuccess) { } }]; } } @end