CSFileDownUpCell.m 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. //
  2. // CSFilewDownUpCell.m
  3. // zhuxun
  4. //
  5. // Created by winsoft on 17/6/22.
  6. //
  7. //
  8. #import "CSFileDownUpCell.h"
  9. #import "CSFileDownLoadControllerView.h"
  10. #import "CloudStorageUploadCenter.h"
  11. #import "CloudStorageDownloadCenter.h"
  12. ///=============================================================================
  13. /// @name CSFileDownUpCell
  14. ///=============================================================================
  15. @interface CSFileDownUpCell()
  16. @property (nonatomic , weak) UIImageView *headerIconImageView;
  17. @property (nonatomic , weak) UILabel *fileNameLabel;
  18. @property (nonatomic , weak) UILabel *fileCreateTimeLabel;
  19. @property (nonatomic , weak) UILabel *fileProcessSizeLabel;
  20. @property (nonatomic , weak) UILabel *fileSizeLabel;
  21. @property (nonatomic , weak) UILabel *speedLabel;
  22. @property (nonatomic , weak) UIButton *fileExtensionSwitchImageView;
  23. @property (nonatomic , weak) CSFileDownLoadControllerView *csFileDownLoadControllerView;
  24. @property (nonatomic , weak) CSFileExtensionViewForCell *fileExtensionView;
  25. /**
  26. * 记录上一次已经进行的长度
  27. */
  28. @property (nonatomic , assign) NSInteger lastProcessedDataLength;
  29. @property (nonatomic , copy) NSDate *lastRecordTime;
  30. @end
  31. @implementation CSFileDownUpCell
  32. + (CSFileDownUpCell *)fileDownUpCellWithCSFileDownUpFrameModel:(CSFileDownUpFrameModel*)csFileDownUpFrameModel tableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath identifier:(NSString *)identifier opItems:(NSArray *)opItems
  33. {
  34. CSFileDownUpCell *csFileDownUpCell = [tableView dequeueReusableCellWithIdentifier:identifier];
  35. if (!csFileDownUpCell) {
  36. csFileDownUpCell = [[CSFileDownUpCell alloc]initFileCellWithTableView:tableView indexPath:indexPath identifier:identifier opItems:opItems];
  37. }
  38. //csFileCell.indexPath = indexPath
  39. return csFileDownUpCell;
  40. }
  41. - (instancetype)initFileCellWithTableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath identifier:(NSString *)identifier opItems:(NSArray *)opItems
  42. {
  43. if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]) {
  44. self.tableView = tableView;
  45. UIImageView *headerIconImageView = [[UIImageView alloc]init];
  46. [headerIconImageView setImage:[UIImage imageNamed:@"file_unknown_icon"]];
  47. [self.contentView addSubview:headerIconImageView];
  48. self.headerIconImageView = headerIconImageView;
  49. UILabel *fileNameLabel = [[UILabel alloc]init];
  50. fileNameLabel.numberOfLines = 0;
  51. fileNameLabel.font = FileNameFont;
  52. [self.contentView addSubview:fileNameLabel];
  53. self.fileNameLabel = fileNameLabel;
  54. UILabel *fileCreateTimeLabel = [[UILabel alloc]init];
  55. fileCreateTimeLabel.textColor = LineForSubLineViewColor;
  56. fileCreateTimeLabel.font = FileCreateTimeFont;
  57. [self.contentView addSubview:fileCreateTimeLabel];
  58. self.fileCreateTimeLabel = fileCreateTimeLabel;
  59. UILabel *fileProcessSizeLabel = [[UILabel alloc]init];
  60. fileProcessSizeLabel.textColor = LineForSubLineViewColor;
  61. fileProcessSizeLabel.font = FileCreateTimeFont;
  62. [self.contentView addSubview:fileProcessSizeLabel];
  63. self.fileProcessSizeLabel = fileProcessSizeLabel;
  64. UILabel *fileSizeLabel = [[UILabel alloc]init];
  65. fileSizeLabel.textAlignment = NSTextAlignmentRight;
  66. fileSizeLabel.textColor = LineForSubLineViewColor;
  67. fileSizeLabel.font = FileCreateTimeFont;
  68. [self.contentView addSubview:fileSizeLabel];
  69. self.fileSizeLabel = fileSizeLabel;
  70. UILabel *speedLabel = [[UILabel alloc]init];
  71. speedLabel.textAlignment = NSTextAlignmentRight;
  72. speedLabel.textColor = LineForSubLineViewColor;
  73. speedLabel.font = FileCreateTimeFont;
  74. [self.contentView addSubview:speedLabel];
  75. self.speedLabel = speedLabel;
  76. UIButton *fileExtensionSwitchImageView = [[UIButton alloc]init];
  77. [fileExtensionSwitchImageView addTarget:self action:@selector(extensionSwithOnOff) forControlEvents:UIControlEventTouchUpInside];
  78. [fileExtensionSwitchImageView setImage:[UIImage imageNamed:@"list_Group_Arrow_Down"] forState:UIControlStateNormal];
  79. [self.contentView addSubview:fileExtensionSwitchImageView];
  80. self.fileExtensionSwitchImageView = fileExtensionSwitchImageView;
  81. CSFileDownLoadControllerView *csFileDownLoadControllerView = [[CSFileDownLoadControllerView alloc]init];
  82. [self.contentView addSubview:csFileDownLoadControllerView];
  83. self.csFileDownLoadControllerView = csFileDownLoadControllerView;;
  84. CSFileExtensionViewForCell *fileExtensionView = [[CSFileExtensionViewForCell alloc]initWithItmes: opItems];
  85. __weak typeof(self)weakSelf = self;
  86. fileExtensionView.extensionOpBlock = ^(ExtensionOP extensionOP, CSFileDownUpFrameModel *csFileDownUpFrameModel){
  87. if (weakSelf.extensionOpBlock) {
  88. weakSelf.extensionOpBlock(extensionOP, weakSelf.csFileDownUpFrameModel);
  89. }
  90. };
  91. csFileDownLoadControllerView.downUpStatusChangeBlock = ^(DownUpStatus downUpStatus){
  92. if (weakSelf.downUpStatusBlock) {
  93. weakSelf.downUpStatusBlock(weakSelf.csFileDownUpFrameModel, downUpStatus);
  94. }
  95. };
  96. [self.contentView addSubview:fileExtensionView];
  97. self.fileExtensionView = fileExtensionView;
  98. }
  99. return self;
  100. }
  101. - (void)initDownUpBlockWithDownUpModel:(DownUpModel)downUpModel
  102. {
  103. if (!self.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
  104. self.csFileDownUpFrameModel.csFileDownUpModel.uploadProgressBlock = nil;
  105. self.csFileDownUpFrameModel.csFileDownUpModel.uploadSuccessBlock = nil;
  106. self.csFileDownUpFrameModel.csFileDownUpModel.uploadFailedBlock = nil;
  107. self.csFileDownUpFrameModel.csFileDownUpModel.downloadProgressBlock = nil;
  108. self.csFileDownUpFrameModel.csFileDownUpModel.downloadSuccessBlock = nil;
  109. self.csFileDownUpFrameModel.csFileDownUpModel.downloadFailedBlock = nil;
  110. }else{
  111. for (CSFileDownUpModel *csFileDownUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
  112. csFileDownUpModel.uploadProgressBlock = nil;
  113. csFileDownUpModel.uploadSuccessBlock = nil;
  114. csFileDownUpModel.uploadFailedBlock = nil;
  115. csFileDownUpModel.downloadProgressBlock = nil;
  116. csFileDownUpModel.downloadSuccessBlock = nil;
  117. csFileDownUpModel.downloadFailedBlock = nil;
  118. }
  119. }
  120. if (downUpModel == DownUpModelDown) {
  121. [self initDownCallBlock];
  122. }else [self initUpCallBlock];
  123. }
  124. - (void)initDownCallBlock
  125. {
  126. __weak typeof(self)weakSelf = self;
  127. __weak typeof(self.csFileDownLoadControllerView)weakDowunLoadControllerView = self.csFileDownLoadControllerView;
  128. __weak typeof(self.fileProcessSizeLabel)weakProcessSizeLabel = self.fileProcessSizeLabel;
  129. __weak typeof(self.fileSizeLabel)weakFileSizeLabel = self.fileSizeLabel;
  130. __weak typeof(self.speedLabel)weakSpeedLabel = self.speedLabel;
  131. if (!self.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
  132. self.csFileDownUpFrameModel.csFileDownUpModel.downloadProgressBlock = ^(NSInteger receivedSize, NSInteger expectedSize, CGFloat progress, NSString *router, CSFileDownUpModel *csfileDownUpModel,NSString *uuid) {
  133. if ([uuid isEqualToString:weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpUUID]) {
  134. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpSize = receivedSize;
  135. NSDate *now = [NSDate date];
  136. if (!weakSelf.lastRecordTime || [now timeIntervalSinceDate:weakSelf.lastRecordTime] >= 1) {
  137. NSInteger speed = receivedSize - weakSelf.lastProcessedDataLength;
  138. weakSelf.lastProcessedDataLength = receivedSize;
  139. weakSelf.lastRecordTime = now;
  140. dispatch_async(dispatch_get_main_queue(), ^{
  141. weakSpeedLabel.text = [NSString stringWithFormat:@"%@/s",[weakSelf bitToKb_MbWithBit:speed]];
  142. weakDowunLoadControllerView.percent = progress;
  143. weakProcessSizeLabel.text = [NSString stringWithFormat:@"%@/%@",[weakSelf bitToKb_MbWithBit:receivedSize],weakFileSizeLabel.text];
  144. });
  145. }
  146. }
  147. };
  148. self.csFileDownUpFrameModel.csFileDownUpModel.downloadSuccessBlock = ^(NSInteger receivedSize, NSString *localFullFileRouter, CSFileDownUpModel *csfileDownUpModel,NSString *uuid) {
  149. //operation 将完整的key传出.
  150. if ([uuid isEqualToString:weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpUUID]) {
  151. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus = DownUpStatusSuccess;
  152. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpSize = receivedSize;
  153. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.localRootPath = localFullFileRouter;
  154. dispatch_async(dispatch_get_main_queue(), ^{
  155. [weakSelf initData];
  156. if (weakSelf.fileDownUpSuccessBlock) {
  157. weakSelf.fileDownUpSuccessBlock(weakSelf.csFileDownUpFrameModel);
  158. }
  159. });
  160. }
  161. };
  162. self.csFileDownUpFrameModel.csFileDownUpModel.downloadFailedBlock = ^(NSString *errMessage, CSFileDownUpModel *csfileDownUpModel,NSString *uuid) {
  163. if ([uuid isEqualToString:weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpUUID]){
  164. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus = DownUpStatusFailure;
  165. dispatch_async(dispatch_get_main_queue(), ^{
  166. weakProcessSizeLabel.text = weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown?@"下载失败":@"上传失败";
  167. weakDowunLoadControllerView.downUpStatus = DownUpStatusFailure;
  168. });
  169. }
  170. };
  171. }else{
  172. //文件夹
  173. for (CSFileDownUpModel *csFileDownUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
  174. csFileDownUpModel.downloadProgressBlock = ^(NSInteger receivedSize, NSInteger expectedSize, CGFloat progress, NSString *router, CSFileDownUpModel *callBackFileDownUpModel,NSString *uuid) {
  175. //if subs contail.待新增(待修改外层隔一秒判断一次.)
  176. NSArray *targetFileModelArray = [weakSelf.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"downUpUUID = %@",uuid]];
  177. if (targetFileModelArray.count) {
  178. CSFileDownUpModel *subCSFileDownUpModel = targetFileModelArray[0];
  179. subCSFileDownUpModel.downUpSize = receivedSize;
  180. NSDate *now = [NSDate date];
  181. //
  182. if (!weakSelf.lastRecordTime || [now timeIntervalSinceDate:weakSelf.lastRecordTime] >= 1) {
  183. weakSelf.lastRecordTime = now;
  184. [weakSelf getFolderSizeAndPorcessSizeWithResultBlock:^(NSInteger progressSize, NSInteger totalSize) {
  185. NSInteger speed = progressSize - weakSelf.lastProcessedDataLength;
  186. weakSelf.lastProcessedDataLength = progressSize;
  187. dispatch_async(dispatch_get_main_queue(), ^{
  188. weakSpeedLabel.text = [NSString stringWithFormat:@"%@/s",[weakSelf bitToKb_MbWithBit:speed]];
  189. weakDowunLoadControllerView.percent = progressSize*1.0f/totalSize*1.0f;
  190. weakProcessSizeLabel.text = [NSString stringWithFormat:@"%@/%@",[weakSelf bitToKb_MbWithBit:progressSize],[weakSelf bitToKb_MbWithBit:totalSize]];
  191. });
  192. }];
  193. }
  194. }
  195. };
  196. csFileDownUpModel.downloadSuccessBlock = ^(NSInteger receivedSize, NSString *localFullFileRouter, CSFileDownUpModel *callBackFileDownUpModel,NSString *uuid) {
  197. //operation 将完整的key传出.
  198. NSArray *targetFileModelArray = [weakSelf.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"downUpUUID = %@",uuid]];
  199. if (targetFileModelArray.count) {
  200. CSFileDownUpModel *subCSFileDownUpModel = targetFileModelArray[0];
  201. subCSFileDownUpModel.downUpSize = receivedSize;
  202. subCSFileDownUpModel.downUpStatus = DownUpStatusSuccess;
  203. [weakSelf getFolderSizeAndPorcessSizeWithResultBlock:^(NSInteger progressSize, NSInteger totalSize) {
  204. if (progressSize == totalSize) {
  205. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus = DownUpStatusSuccess;
  206. dispatch_async(dispatch_get_main_queue(), ^{
  207. [weakSelf initData];
  208. if (weakSelf.fileDownUpSuccessBlock) {
  209. weakSelf.fileDownUpSuccessBlock(weakSelf.csFileDownUpFrameModel);
  210. }
  211. });
  212. }
  213. }];
  214. }
  215. };
  216. csFileDownUpModel.downloadFailedBlock = ^(NSString *errMessage, CSFileDownUpModel *callBackFileDownUpModel,NSString *uuid) {
  217. NSArray *targetFileModelArray = [weakSelf.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"downUpUUID = %@",uuid]];
  218. if (targetFileModelArray.count){
  219. CSFileDownUpModel *subCSFileDownUpModel = targetFileModelArray[0];
  220. //都失败的话才赋值文件夹状态为error.待新增
  221. }
  222. };
  223. }
  224. }
  225. //down
  226. }
  227. - (void)initUpCallBlock
  228. {
  229. __weak typeof(self)weakSelf = self;
  230. __weak typeof(self.csFileDownLoadControllerView)weakDowunLoadControllerView = self.csFileDownLoadControllerView;
  231. __weak typeof(self.fileProcessSizeLabel)weakProcessSizeLabel = self.fileProcessSizeLabel;
  232. __weak typeof(self.fileSizeLabel)weakFileSizeLabel = self.fileSizeLabel;
  233. __weak typeof(self.speedLabel)weakSpeedLabel = self.speedLabel;
  234. //up
  235. if (!weakSelf.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
  236. self.csFileDownUpFrameModel.csFileDownUpModel.uploadProgressBlock = ^(double progress, NSInteger sendedSize, CSFileDownUpModel *csFileDownUpModel,NSString *uuid) {
  237. #warning 2017-07-03 速度计算方式: 当前时间与上次记录时间差>=1s时,上次的downpSize 与 sendedSize之差就是网速.
  238. if ([uuid isEqualToString:weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpUUID]){
  239. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpSize = sendedSize;
  240. NSDate *now = [NSDate date];
  241. //每秒刷新一次
  242. if (!weakSelf.lastRecordTime || [now timeIntervalSinceDate:weakSelf.lastRecordTime] >= 1) {
  243. NSInteger speed = sendedSize - weakSelf.lastProcessedDataLength;
  244. weakSelf.lastProcessedDataLength = sendedSize;
  245. weakSelf.lastRecordTime = now;
  246. dispatch_async(dispatch_get_main_queue(), ^{
  247. weakSpeedLabel.text = [NSString stringWithFormat:@"%@/s",[weakSelf bitToKb_MbWithBit:speed]];
  248. weakDowunLoadControllerView.percent = progress;
  249. weakProcessSizeLabel.text = [NSString stringWithFormat:@"%@/%@",[weakSelf bitToKb_MbWithBit:sendedSize],weakFileSizeLabel.text];
  250. });
  251. }
  252. }
  253. };
  254. self.csFileDownUpFrameModel.csFileDownUpModel.uploadSuccessBlock = ^(NSString *url, long long fileSize, CSFileDownUpModel *csFileDownUpModel,NSString *uuid) {
  255. if ([uuid isEqualToString:weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpUUID]){
  256. //通知上层需要移动位置
  257. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpSize = fileSize;
  258. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus = DownUpStatusSuccess;
  259. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.sid = csFileDownUpModel.sid;
  260. dispatch_async(dispatch_get_main_queue(), ^{
  261. [weakSelf initData];
  262. if (weakSelf.fileDownUpSuccessBlock) {
  263. weakSelf.fileDownUpSuccessBlock(weakSelf.csFileDownUpFrameModel);
  264. }
  265. });
  266. }
  267. };
  268. self.csFileDownUpFrameModel.csFileDownUpModel.uploadFailedBlock = ^(NSString *errMessage, CSFileDownUpModel *csFileDownUpModel,NSString *uuid) {
  269. if ([uuid isEqualToString:weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpUUID]) {
  270. weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus = DownUpStatusFailure;
  271. dispatch_async(dispatch_get_main_queue(), ^{
  272. weakProcessSizeLabel.text = weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown?@"下载失败":@"上传失败";
  273. weakDowunLoadControllerView.downUpStatus = DownUpStatusFailure;
  274. });
  275. }
  276. };
  277. }else{
  278. //上传文件夹暂不处理.
  279. }
  280. }
  281. - (void)extensionSwithOnOff
  282. {
  283. if (self.extensionSwitchBlock) {
  284. self.extensionSwitchBlock(self.csFileDownUpFrameModel);
  285. }
  286. }
  287. - (void)setCsFileDownUpFrameModel:(CSFileDownUpFrameModel *)csFileDownUpFrameModel
  288. {
  289. _csFileDownUpFrameModel = csFileDownUpFrameModel;
  290. [self initData];
  291. [self initDownUpBlockWithDownUpModel:csFileDownUpFrameModel.csFileDownUpModel.downUpType];
  292. [self registerDownUpBlock];
  293. }
  294. - (void)initData
  295. {
  296. self.fileNameLabel.text = self.csFileDownUpFrameModel.csFileDownUpModel.name;
  297. self.fileCreateTimeLabel.text = self.csFileDownUpFrameModel.strServerTime;
  298. self.fileSizeLabel.text = self.csFileDownUpFrameModel.fileSizeStr;
  299. //base process/status
  300. if (self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus == DownUpStatusSuccess) {
  301. self.fileProcessSizeLabel.hidden = YES;
  302. self.csFileDownLoadControllerView.hidden = YES;
  303. self.speedLabel.hidden = YES;
  304. self.fileCreateTimeLabel.hidden = NO;
  305. self.fileSizeLabel.hidden = NO;
  306. self.fileExtensionSwitchImageView.hidden = NO;
  307. }else{
  308. self.fileCreateTimeLabel.hidden = YES;
  309. self.fileSizeLabel.hidden = YES;
  310. self.fileExtensionSwitchImageView.hidden = YES;
  311. self.speedLabel.hidden = NO;
  312. self.fileProcessSizeLabel.hidden = NO;
  313. self.csFileDownLoadControllerView.hidden = NO;
  314. self.csFileDownLoadControllerView.downUpStatus = self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus;
  315. }
  316. //header iamge
  317. if (self.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
  318. [self.headerIconImageView setImage:[UIImage imageNamed:@"file_folder_icon"]];
  319. // self.fileSizeLabel.hidden = YES;
  320. }else{
  321. [self.headerIconImageView setImage:[UIImage imageNamed:@"file_unknown_icon"]];
  322. // self.fileSizeLabel.hidden = NO;
  323. }
  324. //animation?
  325. if (self.csFileDownUpFrameModel.isFileExtensionOP) {
  326. self.fileExtensionView.hidden = NO;
  327. [self.fileExtensionSwitchImageView setImage:[UIImage imageNamed:@"list_Group_Arrow_Normal"] forState:UIControlStateNormal];
  328. }else {
  329. self.fileExtensionView.hidden = YES;
  330. [self.fileExtensionSwitchImageView setImage:[UIImage imageNamed:@"list_Group_Arrow_Down"] forState:UIControlStateNormal];
  331. }
  332. self.cellSelected = self.csFileDownUpFrameModel.isSelected;
  333. if (!self.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
  334. self.lastProcessedDataLength = self.csFileDownUpFrameModel.csFileDownUpModel.downUpSize;
  335. self.lastRecordTime = [NSDate date];
  336. //部分计算可以移到frammodel.
  337. if (self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus == DownUpStatusWait) {
  338. self.fileProcessSizeLabel.text = @"排队等待中...";
  339. }else if(self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus == DownUpStatusDoing || self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus == DownUpStatusPause){
  340. self.fileProcessSizeLabel.text = [NSString stringWithFormat:@"%@/%@",[self bitToKb_MbWithBit:self.csFileDownUpFrameModel.csFileDownUpModel.downUpSize],self.fileSizeLabel.text];
  341. }else if (self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus == DownUpStatusFailure)
  342. {
  343. self.fileProcessSizeLabel.text = self.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown?@"下载失败":@"上传失败";
  344. }
  345. self.csFileDownLoadControllerView.percent = self.csFileDownUpFrameModel.csFileDownUpModel.downUpSize * 1.0f/self.csFileDownUpFrameModel.csFileDownUpModel.size * 1.0f;
  346. self.speedLabel.text = nil;
  347. }else{
  348. #warning 2017-07-06 当文件夹下的一个文件下载好时,获取父节点文件夹,再获取所有文件,如果文件都下载完成,则修改文件夹状态为成功,。
  349. self.lastRecordTime = [NSDate date];
  350. self.fileSizeLabel.hidden = YES;
  351. //TEXT 重新计算
  352. __weak typeof(self.fileProcessSizeLabel)weakProcessSizeLabel = self.fileProcessSizeLabel;
  353. __weak typeof(self.csFileDownLoadControllerView)weakControllerView = self.csFileDownLoadControllerView;
  354. __weak typeof(self)weakself = self;
  355. [self getFolderSizeAndPorcessSizeWithResultBlock:^(NSInteger progressSize, NSInteger totalSize) {
  356. weakProcessSizeLabel.text = [NSString stringWithFormat:@"%@/%@",[self bitToKb_MbWithBit:progressSize],[self bitToKb_MbWithBit:totalSize]];
  357. weakControllerView.percent = progressSize * 1.0f/totalSize * 1.0f;
  358. weakself.lastProcessedDataLength = progressSize;
  359. }];
  360. self.speedLabel.text = nil;
  361. }
  362. }
  363. - (void)registerDownUpBlock
  364. {
  365. __weak typeof(self)weakself = self;
  366. if (!self.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
  367. if (self.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelUp && self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus != DownUpStatusSuccess) {
  368. [[CloudStorageUploadCenter sharedInstance]registeUploadForUIWithcsFileDownUpModel:self.csFileDownUpFrameModel.csFileDownUpModel ProcessBlock:self.csFileDownUpFrameModel.csFileDownUpModel.uploadProgressBlock successBlock:self.csFileDownUpFrameModel.csFileDownUpModel.uploadSuccessBlock failBlock:self.csFileDownUpFrameModel.csFileDownUpModel.uploadFailedBlock];
  369. //需要initDownUpCallBlock.并且区分..down和up模式
  370. }else if(self.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown && self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus != DownUpStatusSuccess)
  371. {
  372. [[CloudStorageDownloadCenter sharedInstance]registeDownloadBlockForUIWithcsFileDownUpModel:self.csFileDownUpFrameModel.csFileDownUpModel ProcessBlock:self.csFileDownUpFrameModel.csFileDownUpModel.downloadProgressBlock successBlock:self.csFileDownUpFrameModel.csFileDownUpModel.downloadSuccessBlock failBlock:self.csFileDownUpFrameModel.csFileDownUpModel.downloadFailedBlock];
  373. }
  374. }else{
  375. NSMutableArray *processModelArray = [NSMutableArray array];
  376. //应该获取所有子文件
  377. for (CSFileDownUpModel *downUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
  378. if (downUpModel.downUpStatus != DownUpStatusSuccess && downUpModel.downUpSize != downUpModel.size) {
  379. [processModelArray addObject:downUpModel];
  380. }
  381. }
  382. if (weakself.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelUp && weakself.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus != DownUpStatusSuccess) {
  383. if (processModelArray.count)
  384. {
  385. for (CSFileDownUpModel *downUpModel in processModelArray) {
  386. [[CloudStorageUploadCenter sharedInstance]registeUploadForUIWithcsFileDownUpModel:downUpModel ProcessBlock:downUpModel.uploadProgressBlock successBlock:downUpModel.uploadSuccessBlock failBlock:downUpModel.uploadFailedBlock];
  387. }
  388. }
  389. //需要initDownUpCallBlock.并且区分..down和up模式
  390. }else if(weakself.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown && weakself.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus != DownUpStatusSuccess)
  391. {
  392. if (processModelArray.count){
  393. for (CSFileDownUpModel *downUpModel in processModelArray) {
  394. [[CloudStorageDownloadCenter sharedInstance]registeDownloadBlockForUIWithcsFileDownUpModel:downUpModel ProcessBlock:downUpModel.downloadProgressBlock successBlock:downUpModel.downloadSuccessBlock failBlock:downUpModel.downloadFailedBlock];
  395. }
  396. }
  397. }
  398. }
  399. }
  400. - (void)getFolderSizeAndPorcessSizeWithResultBlock:(void(^)(NSInteger progressSize, NSInteger totalSize))resultBlock
  401. {
  402. NSInteger totalSize = 0;
  403. NSInteger progressSize = 0;
  404. for (CSFileDownUpModel *downUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
  405. totalSize += downUpModel.size;
  406. progressSize += downUpModel.downUpSize;
  407. }
  408. if (resultBlock) {
  409. resultBlock(progressSize,totalSize);
  410. }
  411. }
  412. - (NSString *)bitToKb_MbWithBit:(NSInteger)bit
  413. {
  414. #warning show = mb,,,true = kb
  415. double downLoadedSize = bit * 1.00f/1024 * 1.00f;
  416. NSString *downloadSizeStr = nil;
  417. if (downLoadedSize>1024 * 1024) {
  418. CGFloat dSize = downLoadedSize / (1024 * 1024 * 1.0f);
  419. downloadSizeStr = [NSString stringWithFormat:@"%.2lf Gb",floor(dSize*100) / 100 ];
  420. }else if (downLoadedSize>1024) {
  421. CGFloat dSize = downLoadedSize / 1024 * 1.0f;
  422. downloadSizeStr = [NSString stringWithFormat:@"%.2lf Mb",floor(dSize*100) / 100 ];
  423. }else
  424. {
  425. downloadSizeStr = [NSString stringWithFormat:@"%.2lf Kb",floor(downLoadedSize*100) / 100];
  426. }
  427. return downloadSizeStr;
  428. }
  429. - (void)layoutSubviews
  430. {
  431. [super layoutSubviews];
  432. _headerIconImageView.frame = self.csFileDownUpFrameModel.headerIconImageViewFrame;
  433. _fileNameLabel.frame = self.csFileDownUpFrameModel.fileNameLabelFrame;
  434. _fileCreateTimeLabel.frame = self.csFileDownUpFrameModel.fileCreateTimeLabelFrame;
  435. _fileProcessSizeLabel.frame = self.csFileDownUpFrameModel.fileProcessSizeLabelFrame;
  436. _fileExtensionSwitchImageView.frame = self.csFileDownUpFrameModel.fileExtensionSwithImageViewFrame;
  437. _csFileDownLoadControllerView.frame = self.csFileDownUpFrameModel.fileProcessControllerViewFrame;
  438. _fileSizeLabel.frame = self.csFileDownUpFrameModel.fileSizeLabelFrame;
  439. _speedLabel.frame = self.csFileDownUpFrameModel.fileDownUpSpeedLabelFrame;
  440. //animation?
  441. __weak typeof(self)weakself = self;
  442. [UIView animateWithDuration:0.5 animations:^{
  443. weakself.fileExtensionView.frame = weakself.csFileDownUpFrameModel.fileExtensionViewFrame;
  444. }];
  445. }
  446. - (void)dealloc
  447. {
  448. if (!self.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
  449. self.csFileDownUpFrameModel.csFileDownUpModel.uploadProgressBlock = nil;
  450. self.csFileDownUpFrameModel.csFileDownUpModel.uploadSuccessBlock = nil;
  451. self.csFileDownUpFrameModel.csFileDownUpModel.uploadFailedBlock = nil;
  452. self.csFileDownUpFrameModel.csFileDownUpModel.downloadProgressBlock = nil;
  453. self.csFileDownUpFrameModel.csFileDownUpModel.downloadSuccessBlock = nil;
  454. self.csFileDownUpFrameModel.csFileDownUpModel.downloadFailedBlock = nil;
  455. }else{
  456. for (CSFileDownUpModel *csFileDownUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
  457. csFileDownUpModel.uploadProgressBlock = nil;
  458. csFileDownUpModel.uploadSuccessBlock = nil;
  459. csFileDownUpModel.uploadFailedBlock = nil;
  460. csFileDownUpModel.downloadProgressBlock = nil;
  461. csFileDownUpModel.downloadSuccessBlock = nil;
  462. csFileDownUpModel.downloadFailedBlock = nil;
  463. }
  464. }
  465. }
  466. @end