boxSaveFileManager.m 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. //
  2. // boxSaveFileManager.m
  3. // 双子星云手机
  4. //
  5. // Created by xd h on 2024/5/23.
  6. //
  7. #import "boxSaveFileManager.h"
  8. @implementation boxSaveFileManager
  9. static boxSaveFileManager * cur_boxSaveFileShareInstance = nil;
  10. +(boxSaveFileManager *)shareInstance;
  11. {
  12. static dispatch_once_t onceToken;
  13. dispatch_once(&onceToken, ^{
  14. cur_boxSaveFileShareInstance = [[boxSaveFileManager alloc] init];
  15. });
  16. return cur_boxSaveFileShareInstance;
  17. }
  18. - (id)init
  19. {
  20. self = [super init];
  21. if (self) {
  22. //[self initManager];
  23. }
  24. return self;
  25. }
  26. //添加保存记录
  27. - (void)addBoxSaveRecordFunBy:(NSArray*)arr complete:(custom_complete_B)complete{
  28. if(arr && arr.count >0 ){
  29. NSString * boxSaveDefaultPath = [HWDataManager getStringWithKey:stringKeyAddSn(Const_box_save_default_path)];
  30. if(!boxSaveDefaultPath || boxSaveDefaultPath.length == 0){
  31. boxSaveDefaultPath = Const_default_save_path;
  32. }
  33. for (ShareFileDataModel*model in arr) {
  34. model.bg_tableName = share_box_save_tableName;
  35. model.boxSavePath = boxSaveDefaultPath;
  36. }
  37. //[ShareFileDataModel bg_saveOrUpdateArray:arr];
  38. [ShareFileDataModel bg_saveOrUpdateArrayAsync:arr complete:^(BOOL isSuccess) {
  39. complete(isSuccess);
  40. }];
  41. }
  42. }
  43. #pragma mark 读取数据库数据
  44. - (void)getDataInDatabaseFun:(BOOL)isReGet complete:(custom_complete_Arr)complete
  45. {
  46. if(_databaseArr && _databaseArr.count == 3 && !isReGet){
  47. complete(_databaseArr);
  48. return;
  49. }
  50. if(!_databaseArr)
  51. {
  52. _databaseArr = [NSMutableArray new];
  53. }
  54. //KWeakSelf
  55. //dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
  56. // NSLock *lock = [NSLock new];
  57. // [lock lock];
  58. [ShareFileDataModel bg_findAsync:share_box_save_tableName limit:0 orderBy:nil desc:YES complete:^(NSArray * _Nullable array) {
  59. NSMutableArray *failArr = [NSMutableArray new];
  60. NSMutableArray *doneArr = [NSMutableArray new];
  61. NSMutableArray *otherArr = [NSMutableArray new];
  62. if(array && array.count >0){
  63. for (ShareFileDataModel * curModel in array) {
  64. if(curModel.saveboxStateType == saveBoxStateFail){
  65. [failArr addObject:curModel];
  66. }
  67. else if(curModel.saveboxStateType == saveBoxStateDone){
  68. [doneArr addObject:curModel];
  69. }
  70. else{
  71. [otherArr addObject:curModel];
  72. }
  73. }
  74. }
  75. NSLock *lock = [NSLock new];
  76. [lock lock];
  77. NSMutableArray *newArr = [NSMutableArray new];
  78. [newArr addObject:otherArr];
  79. [newArr addObject:doneArr];
  80. [newArr addObject:failArr];
  81. self->_databaseArr = newArr;
  82. [lock unlock];
  83. complete(self->_databaseArr);
  84. }];
  85. // [lock unlock];
  86. //});
  87. }
  88. - (void)handleDatabaseArrByDelete:(ShareFileDataModel*)delModel
  89. {
  90. if(_databaseArr && _databaseArr.count == 3 ){
  91. if(delModel.saveboxStateType == saveBoxStateDone)
  92. {
  93. NSMutableArray *arr = _databaseArr[1];
  94. [self deteleModel:delModel inArr:arr];
  95. }
  96. else if(delModel.saveboxStateType == saveBoxStateFail){
  97. NSMutableArray *arr = _databaseArr[2];
  98. [self deteleModel:delModel inArr:arr];
  99. }
  100. else{
  101. NSMutableArray *arr = _databaseArr[0];
  102. [self deteleModel:delModel inArr:arr];
  103. }
  104. }
  105. }
  106. #pragma mark 处理删除内存数据
  107. - (void)deteleModel:(ShareFileDataModel*)delModel inArr:(NSMutableArray*)delArr{
  108. for (ShareFileDataModel *dataModel in delArr) {
  109. if(delModel.bg_id.integerValue == dataModel.bg_id.integerValue){
  110. [delArr removeObject:dataModel];
  111. break;;
  112. }
  113. }
  114. }
  115. #pragma mark 删除本地数据库记录
  116. - (void)deleteBoxSaveFileRecordBy:(NSMutableArray *)delArr{
  117. NSMutableArray *curDelArr = [NSMutableArray arrayWithArray:delArr];
  118. for (ShareFileDataModel *dataModel in curDelArr) {
  119. //1.内存数据删除
  120. [self handleDatabaseArrByDelete:dataModel];
  121. //2.删除数据量
  122. NSMutableString* where = [[NSMutableString alloc] initWithString:@"where "];
  123. NSString *curStr = [NSString stringWithFormat:@"%@=%@ ",bg_sqlKey(@"bg_id"),bg_sqlValue(dataModel.bg_id)];
  124. [where appendString:curStr];
  125. [ShareFileDataModel bg_deleteAsync:share_box_save_tableName where:where complete:^(BOOL isSuccess) {
  126. if(isSuccess){
  127. }
  128. }];
  129. }
  130. }
  131. #pragma mark 更新本地数据库记录
  132. - (void)updataBoxSaveDataBy:(downStatusModel*)downStatusMod
  133. {
  134. //1.修改数据库
  135. NSMutableArray *firstArr = [NSMutableArray arrayWithArray:_databaseArr[0]];
  136. NSMutableArray *needUpdatArr = [NSMutableArray new];
  137. for (downStatusDataModel*updataModel in downStatusMod.data) {
  138. for (ShareFileDataModel* model in firstArr) {
  139. //HLog(@"%@\n%@",updataModel.url,model.fileUrl);
  140. //去掉空格判断
  141. //model.fileUrl = [model.fileUrl stringByReplacingOccurrencesOfString:@" " withString:@""];
  142. if ([updataModel.url isEqualToString:model.fileUrl]) {
  143. if (updataModel.curStatus == 0
  144. || updataModel.curStatus == 3) {
  145. //msg = download complied; msg = progress=0.48;
  146. NSString *ProgressMsg = updataModel.msg;
  147. if([ProgressMsg containsString:@"msg = progress="]){
  148. ProgressMsg = [ProgressMsg stringByReplacingOccurrencesOfString:@"msg = progress=" withString:@""];
  149. model.saveProgress = ProgressMsg.floatValue;
  150. }
  151. }
  152. else if (updataModel.curStatus == 1) {
  153. [self handleDatabaseArrByDelete:model];
  154. //成功
  155. model.saveboxStateType = saveBoxStateDone;
  156. [needUpdatArr addObject:model];
  157. NSMutableArray *doneArr = _databaseArr[1];
  158. [doneArr addObject:model];
  159. }
  160. else{
  161. [self handleDatabaseArrByDelete:model];
  162. //失败
  163. model.saveboxStateType = saveBoxStateFail;
  164. [needUpdatArr addObject:model];
  165. NSMutableArray *failArr = _databaseArr[2];
  166. [failArr addObject:model];
  167. }
  168. break;
  169. }
  170. }
  171. }
  172. if(needUpdatArr.count > 0){
  173. [ShareFileDataModel bg_saveOrUpdateArrayAsync:needUpdatArr complete:^(BOOL isSuccess) {
  174. if (isSuccess) {
  175. }
  176. }];
  177. }
  178. }
  179. #pragma mark 更新本地数据库记录
  180. - (void)updataBoxSaveDataByFail:(ShareFileDataModel*)updataModel
  181. {
  182. //1.修改数据库
  183. NSMutableArray *firstArr = [NSMutableArray arrayWithArray:_databaseArr[0]];
  184. NSMutableArray *needUpdatArr = [NSMutableArray new];
  185. for (ShareFileDataModel* model in firstArr) {
  186. //HLog(@"%@\n%@",updataModel.url,model.fileUrl);
  187. //去掉空格判断
  188. //model.fileUrl = [model.fileUrl stringByReplacingOccurrencesOfString:@" " withString:@""];
  189. if ([updataModel.fileUrl isEqualToString:model.fileUrl]) {
  190. [self handleDatabaseArrByDelete:model];
  191. //失败
  192. model.saveboxStateType = saveBoxStateFail;
  193. [needUpdatArr addObject:model];
  194. NSMutableArray *failArr = _databaseArr[2];
  195. [failArr addObject:model];
  196. break;
  197. }
  198. }
  199. if(needUpdatArr.count > 0){
  200. [ShareFileDataModel bg_saveOrUpdateArrayAsync:needUpdatArr complete:^(BOOL isSuccess) {
  201. if (isSuccess) {
  202. }
  203. }];
  204. }
  205. }
  206. @end