QNUploadFileInfoPartV2.m 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. //
  2. // QNUploadFileInfoPartV2.m
  3. // QiniuSDK
  4. //
  5. // Created by yangsen on 2020/11/30.
  6. // Copyright © 2020 Qiniu. All rights reserved.
  7. //
  8. #import "QNUploadFileInfoPartV2.h"
  9. @interface QNUploadFileInfoPartV2()
  10. @property(nonatomic, assign)long long size;
  11. @property(nonatomic, assign)NSInteger modifyTime;
  12. @property(nonatomic, strong)NSArray <QNUploadData *> *uploadDataList;
  13. @end
  14. @implementation QNUploadFileInfoPartV2
  15. @synthesize size = _size;
  16. @synthesize modifyTime = _modifyTime;
  17. @synthesize uploadDataList = _uploadDataList;
  18. + (instancetype)infoFromDictionary:(NSDictionary *)dictionary{
  19. if (![dictionary isKindOfClass:[NSDictionary class]]) {
  20. return nil;
  21. }
  22. QNUploadFileInfoPartV2 *fileInfo = [[QNUploadFileInfoPartV2 alloc] init];
  23. fileInfo.size = [dictionary[@"size"] longLongValue];
  24. fileInfo.modifyTime = [dictionary[@"modifyTime"] integerValue];
  25. fileInfo.expireAt = dictionary[@"expireAt"];
  26. fileInfo.uploadId = dictionary[@"uploadId"];
  27. NSArray *uploadDataList = dictionary[@"uploadDataList"];
  28. if ([uploadDataList isKindOfClass:[NSArray class]]) {
  29. NSMutableArray *uploadDataObjectList = [NSMutableArray array];
  30. for (NSDictionary *uploadDataInfo in uploadDataList) {
  31. QNUploadData *data = [QNUploadData dataFromDictionary:uploadDataInfo];
  32. if (data) {
  33. [uploadDataObjectList addObject:data];
  34. }
  35. }
  36. fileInfo.uploadDataList = [uploadDataObjectList copy];
  37. }
  38. return fileInfo;
  39. }
  40. - (instancetype)initWithFileSize:(long long)fileSize
  41. dataSize:(long long)dataSize
  42. modifyTime:(NSInteger)modifyTime{
  43. if (self = [super init]) {
  44. _size = fileSize;
  45. _modifyTime = modifyTime;
  46. [self createDataList:dataSize];
  47. }
  48. return self;
  49. }
  50. - (void)createDataList:(long long)dataSize{
  51. long long offSize = 0;
  52. NSInteger dataIndex = 1;
  53. NSMutableArray *datas = [NSMutableArray array];
  54. while (offSize < self.size) {
  55. long long lastSize = self.size - offSize;
  56. long long dataSizeP = MIN(lastSize, dataSize);
  57. QNUploadData *data = [[QNUploadData alloc] initWithOffset:offSize
  58. dataSize:dataSizeP
  59. index:dataIndex];
  60. [datas addObject:data];
  61. offSize += dataSizeP;
  62. dataIndex += 1;
  63. }
  64. self.uploadDataList = [datas copy];
  65. }
  66. //- (void)resetDataSize:(long long)dataSize{
  67. // if (!self.uploadDataList || self.uploadDataList.count == 0) {
  68. // [self createDataSize:dataSize];
  69. // return;
  70. // }
  71. //
  72. // for (QNUploadData *data in self.uploadDataList) {
  73. // if (!data.isCompleted && !data.isUploading) {
  74. // data.size = dataSize;
  75. // }
  76. // }
  77. //}
  78. - (QNUploadData *)nextUploadData{
  79. if (!self.uploadDataList || self.uploadDataList.count == 0) {
  80. return nil;
  81. }
  82. QNUploadData *data = nil;
  83. for (QNUploadData *dataP in self.uploadDataList) {
  84. if (!dataP.isCompleted && !dataP.isUploading) {
  85. data = dataP;
  86. break;
  87. }
  88. }
  89. return data;
  90. }
  91. - (void)clearUploadState{
  92. for (QNUploadData *data in self.uploadDataList) {
  93. [data clearUploadState];
  94. }
  95. self.uploadId = nil;
  96. self.expireAt = nil;
  97. }
  98. - (BOOL)isAllUploaded{
  99. BOOL isCompleted = YES;
  100. for (QNUploadData *data in self.uploadDataList) {
  101. if (data.isCompleted == NO) {
  102. isCompleted = NO;
  103. break;
  104. }
  105. }
  106. return isCompleted;
  107. }
  108. - (float)progress{
  109. float progress = 0;
  110. for (QNUploadData *data in self.uploadDataList) {
  111. progress += data.progress * ((float)data.size / (float)self.size);
  112. }
  113. return progress;
  114. }
  115. - (BOOL)isEmpty{
  116. return !self.uploadDataList || self.uploadDataList.count == 0;
  117. }
  118. - (BOOL)isValid{
  119. return ![self isEmpty] && self.uploadId && (self.expireAt.integerValue - [[NSDate date] timeIntervalSince1970]) > 3600*24;
  120. }
  121. - (NSArray <NSDictionary *> *)getPartInfoArray{
  122. if (!self.uploadId || self.uploadId.length == 0) {
  123. return nil;
  124. }
  125. NSMutableArray *infoArray = [NSMutableArray array];
  126. for (QNUploadData *data in self.uploadDataList) {
  127. if (data.etag) {
  128. [infoArray addObject:@{@"etag" : data.etag, @"partNumber" : @(data.index)}];
  129. } else {
  130. infoArray = nil;
  131. break;
  132. }
  133. }
  134. return [infoArray copy];
  135. }
  136. - (NSDictionary *)toDictionary{
  137. if (!self.expireAt || !self.uploadId) {
  138. return nil;
  139. }
  140. NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
  141. dictionary[@"size"] = @(self.size);
  142. dictionary[@"modifyTime"] = @(self.modifyTime);
  143. dictionary[@"expireAt"] = self.expireAt;
  144. dictionary[@"uploadId"] = self.uploadId;
  145. if (self.uploadDataList) {
  146. NSMutableArray *uploadDataInfos = [NSMutableArray array];
  147. for (QNUploadData *data in self.uploadDataList) {
  148. NSDictionary *uploadDataInfo = [data toDictionary];
  149. if (uploadDataInfo) {
  150. [uploadDataInfos addObject:uploadDataInfo];
  151. }
  152. }
  153. dictionary[@"uploadDataList"] = [uploadDataInfos copy];
  154. }
  155. return [dictionary copy];
  156. }
  157. @end