TIDownloadZipManager.m 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. //
  2. // TIDownloadZipManager.m
  3. // TiSDKDemo
  4. //
  5. // Created by iMacA1002 on 2019/12/10.
  6. // Copyright © 2020 Tillusory Tech. All rights reserved.
  7. //
  8. #import "TIDownloadZipManager.h"
  9. #import "ZipArchive.h"
  10. //#import <ZipArchive/ZipArchive.h>
  11. #import "SSZipArchive.h"
  12. #import "TiSDKInterface.h"
  13. @interface TIDownloadZipManager ()<NSURLSessionDelegate,SSZipArchiveDelegate>
  14. @property(nonatomic,copy)void(^completeBlock)(BOOL successful);
  15. @property(nonatomic, strong) NSURLSession *session;
  16. @end
  17. static TIDownloadZipManager *shareManager = NULL;
  18. static dispatch_once_t token;
  19. @implementation TIDownloadZipManager
  20. // MARK: --单例初始化方法--
  21. + (TIDownloadZipManager *)shareManager {
  22. dispatch_once(&token, ^{
  23. shareManager = [[TIDownloadZipManager alloc] init];
  24. });
  25. return shareManager;
  26. }
  27. +(void)releaseShareManager{
  28. token = 0; // 只有置成0,GCD才会认为它从未执行过.它默认为0.这样才能保证下次再次调用shareInstance的时候,再次创建对象.
  29. // [shareManager release];
  30. shareManager = nil;
  31. }
  32. - (NSURLSession *)session {
  33. if (!_session) {
  34. NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
  35. _session =
  36. [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
  37. }
  38. return _session;
  39. }
  40. - (instancetype)init
  41. {
  42. self = [super init];
  43. if (self) {
  44. }
  45. return self;
  46. }
  47. - (void)downloadSuccessedType:(DownloadedType)type MenuMode:(TIMenuMode *)mode completeBlock:(void(^)(BOOL successful))completeBlock{
  48. NSString *downloadURL = @"";
  49. NSString *cachePaths = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
  50. switch (type) {
  51. case TI_DOWNLOAD_TYPE_Sticker:
  52. downloadURL = [[TiSDK getStickerURL] stringByAppendingFormat:@"%@.zip",mode.name];
  53. cachePaths = [cachePaths stringByAppendingFormat:@"/sticker"];
  54. break;
  55. case TI_DOWNLOAD_STATE_Gift:
  56. downloadURL = [[TiSDK getGiftURL] stringByAppendingFormat:@"%@.zip",mode.name];
  57. cachePaths = [cachePaths stringByAppendingFormat:@"/gift"];
  58. break;
  59. case TI_DOWNLOAD_STATE_Watermark:
  60. downloadURL = [[TiSDK getWatermarkURL] stringByAppendingFormat:@"%@.zip",mode.name];
  61. cachePaths = [cachePaths stringByAppendingFormat:@"/watermark"];
  62. break;
  63. case TI_DOWNLOAD_STATE_Mask:
  64. downloadURL = [[TiSDK getMaskURL] stringByAppendingFormat:@"%@.zip",mode.name];
  65. cachePaths = [cachePaths stringByAppendingFormat:@"/mask"];
  66. break;
  67. case TI_DOWNLOAD_STATE_Lvmu:
  68. downloadURL = [[TiSDK getGreenScreenURL] stringByAppendingFormat:@"%@.zip",mode.name];
  69. cachePaths = [cachePaths stringByAppendingFormat:@"/greenscreen"];
  70. break;
  71. default:
  72. break;
  73. }
  74. [[self.session downloadTaskWithURL:[NSURL URLWithString:downloadURL] completionHandler:^(NSURL *_Nullable location, NSURLResponse *_Nullable response, NSError *_Nullable error) {
  75. if (error) {
  76. NSLog(@"downloadURL %@ -- error %@",downloadURL,error);
  77. dispatch_async(dispatch_get_main_queue(), ^{
  78. // UI更新代码
  79. if (completeBlock) {
  80. completeBlock(NO);
  81. }
  82. });
  83. } else {
  84. [SSZipArchive unzipFileAtPath:location.path toDestination:cachePaths delegate:self];
  85. }
  86. }] resume];
  87. __block NSString *completePath = cachePaths;
  88. [self setCompleteBlock:^(BOOL successful) {
  89. if (successful)
  90. {
  91. completePath = [[completePath componentsSeparatedByString:@"/"] lastObject];
  92. completePath = [completePath stringByAppendingFormat:@"/%@",mode.name];
  93. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  94. [defaults setObject:completePath forKey:[NSString stringWithFormat:@"%@%ld",mode.name,(long)mode.menuTag]];
  95. [defaults synchronize];
  96. dispatch_async(dispatch_get_main_queue(), ^{
  97. // UI更新代码
  98. if (completeBlock) {
  99. completeBlock(YES);
  100. }
  101. });
  102. }
  103. else
  104. {
  105. dispatch_async(dispatch_get_main_queue(), ^{
  106. // UI更新代码
  107. if (completeBlock) {
  108. completeBlock(NO);
  109. }
  110. });
  111. }
  112. }];
  113. }
  114. - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *_Nullable))completionHandler {
  115. NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;
  116. __block NSURLCredential *credential = nil;
  117. if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
  118. credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
  119. if (credential) {
  120. disposition = NSURLSessionAuthChallengeUseCredential;
  121. } else {
  122. disposition = NSURLSessionAuthChallengePerformDefaultHandling;
  123. }
  124. } else {
  125. disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
  126. }
  127. if (completionHandler) {
  128. completionHandler(disposition, credential);
  129. }
  130. }
  131. #pragma mark - Unzip complete callback
  132. - (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPath {
  133. dispatch_async(dispatch_get_main_queue(), ^{
  134. // UI更新代码
  135. if (path&&unzippedPath) {
  136. self.completeBlock(YES);
  137. }else{
  138. self.completeBlock(NO);
  139. }
  140. });
  141. }
  142. @end