123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- //
- // QNUploadFileInfoPartV2.m
- // QiniuSDK
- //
- // Created by yangsen on 2020/11/30.
- // Copyright © 2020 Qiniu. All rights reserved.
- //
- #import "QNUploadFileInfoPartV2.h"
- @interface QNUploadFileInfoPartV2()
- @property(nonatomic, assign)long long size;
- @property(nonatomic, assign)NSInteger modifyTime;
- @property(nonatomic, strong)NSArray <QNUploadData *> *uploadDataList;
- @end
- @implementation QNUploadFileInfoPartV2
- @synthesize size = _size;
- @synthesize modifyTime = _modifyTime;
- @synthesize uploadDataList = _uploadDataList;
- + (instancetype)infoFromDictionary:(NSDictionary *)dictionary{
- if (![dictionary isKindOfClass:[NSDictionary class]]) {
- return nil;
- }
-
- QNUploadFileInfoPartV2 *fileInfo = [[QNUploadFileInfoPartV2 alloc] init];
- fileInfo.size = [dictionary[@"size"] longLongValue];
- fileInfo.modifyTime = [dictionary[@"modifyTime"] integerValue];
- fileInfo.expireAt = dictionary[@"expireAt"];
- fileInfo.uploadId = dictionary[@"uploadId"];
-
- NSArray *uploadDataList = dictionary[@"uploadDataList"];
- if ([uploadDataList isKindOfClass:[NSArray class]]) {
-
- NSMutableArray *uploadDataObjectList = [NSMutableArray array];
- for (NSDictionary *uploadDataInfo in uploadDataList) {
-
- QNUploadData *data = [QNUploadData dataFromDictionary:uploadDataInfo];
- if (data) {
- [uploadDataObjectList addObject:data];
- }
- }
- fileInfo.uploadDataList = [uploadDataObjectList copy];
- }
- return fileInfo;
- }
- - (instancetype)initWithFileSize:(long long)fileSize
- dataSize:(long long)dataSize
- modifyTime:(NSInteger)modifyTime{
- if (self = [super init]) {
- _size = fileSize;
- _modifyTime = modifyTime;
- [self createDataList:dataSize];
- }
- return self;
- }
- - (void)createDataList:(long long)dataSize{
-
- long long offSize = 0;
- NSInteger dataIndex = 1;
- NSMutableArray *datas = [NSMutableArray array];
- while (offSize < self.size) {
- long long lastSize = self.size - offSize;
- long long dataSizeP = MIN(lastSize, dataSize);
- QNUploadData *data = [[QNUploadData alloc] initWithOffset:offSize
- dataSize:dataSizeP
- index:dataIndex];
- [datas addObject:data];
- offSize += dataSizeP;
- dataIndex += 1;
- }
- self.uploadDataList = [datas copy];
- }
- //- (void)resetDataSize:(long long)dataSize{
- // if (!self.uploadDataList || self.uploadDataList.count == 0) {
- // [self createDataSize:dataSize];
- // return;
- // }
- //
- // for (QNUploadData *data in self.uploadDataList) {
- // if (!data.isCompleted && !data.isUploading) {
- // data.size = dataSize;
- // }
- // }
- //}
- - (QNUploadData *)nextUploadData{
- if (!self.uploadDataList || self.uploadDataList.count == 0) {
- return nil;
- }
-
- QNUploadData *data = nil;
- for (QNUploadData *dataP in self.uploadDataList) {
- if (!dataP.isCompleted && !dataP.isUploading) {
- data = dataP;
- break;
- }
- }
- return data;
- }
- - (void)clearUploadState{
- for (QNUploadData *data in self.uploadDataList) {
- [data clearUploadState];
- }
- self.uploadId = nil;
- self.expireAt = nil;
- }
- - (BOOL)isAllUploaded{
- BOOL isCompleted = YES;
- for (QNUploadData *data in self.uploadDataList) {
- if (data.isCompleted == NO) {
- isCompleted = NO;
- break;
- }
- }
- return isCompleted;
- }
- - (float)progress{
- float progress = 0;
- for (QNUploadData *data in self.uploadDataList) {
- progress += data.progress * ((float)data.size / (float)self.size);
- }
- return progress;
- }
- - (BOOL)isEmpty{
- return !self.uploadDataList || self.uploadDataList.count == 0;
- }
- - (BOOL)isValid{
- return ![self isEmpty] && self.uploadId && (self.expireAt.integerValue - [[NSDate date] timeIntervalSince1970]) > 3600*24;
- }
- - (NSArray <NSDictionary *> *)getPartInfoArray{
- if (!self.uploadId || self.uploadId.length == 0) {
- return nil;
- }
- NSMutableArray *infoArray = [NSMutableArray array];
- for (QNUploadData *data in self.uploadDataList) {
- if (data.etag) {
- [infoArray addObject:@{@"etag" : data.etag, @"partNumber" : @(data.index)}];
- } else {
- infoArray = nil;
- break;
- }
- }
- return [infoArray copy];
- }
- - (NSDictionary *)toDictionary{
- if (!self.expireAt || !self.uploadId) {
- return nil;
- }
-
- NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
- dictionary[@"size"] = @(self.size);
- dictionary[@"modifyTime"] = @(self.modifyTime);
- dictionary[@"expireAt"] = self.expireAt;
- dictionary[@"uploadId"] = self.uploadId;
- if (self.uploadDataList) {
-
- NSMutableArray *uploadDataInfos = [NSMutableArray array];
- for (QNUploadData *data in self.uploadDataList) {
-
- NSDictionary *uploadDataInfo = [data toDictionary];
- if (uploadDataInfo) {
- [uploadDataInfos addObject:uploadDataInfo];
- }
- }
- dictionary[@"uploadDataList"] = [uploadDataInfos copy];
- }
-
- return [dictionary copy];
- }
- @end
|