QNUploadInfo.m 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // QNUploadInfo.m
  3. // QiniuSDK
  4. //
  5. // Created by yangsen on 2021/5/10.
  6. // Copyright © 2021 Qiniu. All rights reserved.
  7. //
  8. #import "QNErrorCode.h"
  9. #import "QNUploadInfo.h"
  10. @interface QNUploadInfo()
  11. @property(nonatomic, copy)NSString *sourceId;
  12. @property(nonatomic, assign)long long sourceSize;
  13. @property(nonatomic, copy)NSString *fileName;
  14. @property(nonatomic, strong)id <QNUploadSource> source;
  15. @end
  16. @implementation QNUploadInfo
  17. + (instancetype)info:(id <QNUploadSource>)source {
  18. QNUploadInfo *info = [[self alloc] init];
  19. info.source = source;
  20. info.sourceSize = [source getSize];
  21. info.fileName = [source getFileName];
  22. return info;
  23. }
  24. - (void)setInfoFromDictionary:(NSDictionary *)dictionary {
  25. self.sourceSize = [dictionary[@"sourceSize"] longValue];
  26. self.sourceId = dictionary[@"sourceId"];
  27. }
  28. - (NSDictionary *)toDictionary {
  29. return @{@"sourceSize" : @([self getSourceSize]),
  30. @"sourceId" : self.sourceId ?: @""};
  31. }
  32. - (BOOL)hasValidResource {
  33. return self.source != nil;
  34. }
  35. - (BOOL)isValid {
  36. return [self hasValidResource];
  37. }
  38. - (BOOL)couldReloadSource {
  39. return [self.source couldReloadSource];
  40. }
  41. - (BOOL)reloadSource {
  42. return [self.source reloadSource];
  43. }
  44. - (NSString *)getSourceId {
  45. return [self.source getId];
  46. }
  47. - (long long)getSourceSize {
  48. return [self.source getSize];
  49. }
  50. - (BOOL)isSameUploadInfo:(QNUploadInfo *)info {
  51. if (info == nil || ((self.sourceId.length > 0 || info.sourceId.length > 0) && ![self.sourceId isEqualToString:info.sourceId])) {
  52. return false;
  53. }
  54. // 检测文件大小,如果能获取到文件大小的话,就进行检测
  55. if (info.sourceSize > kQNUnknownSourceSize &&
  56. self.sourceSize > kQNUnknownSourceSize &&
  57. info.sourceSize != self.sourceSize) {
  58. return false;
  59. }
  60. return true;
  61. }
  62. - (long long)uploadSize {
  63. return 0;
  64. }
  65. - (BOOL)isAllUploaded {
  66. return true;
  67. }
  68. - (void)clearUploadState {
  69. }
  70. - (void)checkInfoStateAndUpdate {
  71. }
  72. - (NSData *)readData:(NSInteger)dataSize dataOffset:(long long)dataOffset error:(NSError **)error {
  73. if (!self.source) {
  74. *error = [NSError errorWithDomain:NSStreamSOCKSErrorDomain code:kQNLocalIOError userInfo:@{NSLocalizedDescriptionKey : @"file is not exist"}];
  75. return nil;
  76. }
  77. NSData *data = nil;
  78. @synchronized (self.source) {
  79. data = [self.source readData:dataSize dataOffset:dataOffset error:error];
  80. }
  81. if (*error == nil && data != nil && (data.length == 0 || data.length != dataSize)) {
  82. self.sourceSize = data.length + dataOffset;
  83. }
  84. return data;
  85. }
  86. - (void)close {
  87. [self.source close];
  88. }
  89. @end