SDWebImageDownloaderResponseModifier.m 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * This file is part of the SDWebImage package.
  3. * (c) Olivier Poitrey <rs@dailymotion.com>
  4. *
  5. * For the full copyright and license information, please view the LICENSE
  6. * file that was distributed with this source code.
  7. */
  8. #import "SDWebImageDownloaderResponseModifier.h"
  9. @interface SDWebImageDownloaderResponseModifier ()
  10. @property (nonatomic, copy, nonnull) SDWebImageDownloaderResponseModifierBlock block;
  11. @end
  12. @implementation SDWebImageDownloaderResponseModifier
  13. - (instancetype)initWithBlock:(SDWebImageDownloaderResponseModifierBlock)block {
  14. self = [super init];
  15. if (self) {
  16. self.block = block;
  17. }
  18. return self;
  19. }
  20. + (instancetype)responseModifierWithBlock:(SDWebImageDownloaderResponseModifierBlock)block {
  21. SDWebImageDownloaderResponseModifier *responseModifier = [[SDWebImageDownloaderResponseModifier alloc] initWithBlock:block];
  22. return responseModifier;
  23. }
  24. - (nullable NSURLResponse *)modifiedResponseWithResponse:(nonnull NSURLResponse *)response {
  25. if (!self.block) {
  26. return nil;
  27. }
  28. return self.block(response);
  29. }
  30. @end
  31. @implementation SDWebImageDownloaderResponseModifier (Conveniences)
  32. - (instancetype)initWithStatusCode:(NSInteger)statusCode {
  33. return [self initWithStatusCode:statusCode version:nil headers:nil];
  34. }
  35. - (instancetype)initWithVersion:(NSString *)version {
  36. return [self initWithStatusCode:200 version:version headers:nil];
  37. }
  38. - (instancetype)initWithHeaders:(NSDictionary<NSString *,NSString *> *)headers {
  39. return [self initWithStatusCode:200 version:nil headers:headers];
  40. }
  41. - (instancetype)initWithStatusCode:(NSInteger)statusCode version:(NSString *)version headers:(NSDictionary<NSString *,NSString *> *)headers {
  42. version = version ? [version copy] : @"HTTP/1.1";
  43. headers = [headers copy];
  44. return [self initWithBlock:^NSURLResponse * _Nullable(NSURLResponse * _Nonnull response) {
  45. if (![response isKindOfClass:NSHTTPURLResponse.class]) {
  46. return response;
  47. }
  48. NSMutableDictionary *mutableHeaders = [((NSHTTPURLResponse *)response).allHeaderFields mutableCopy];
  49. for (NSString *header in headers) {
  50. NSString *value = headers[header];
  51. mutableHeaders[header] = value;
  52. }
  53. NSHTTPURLResponse *httpResponse = [[NSHTTPURLResponse alloc] initWithURL:response.URL statusCode:statusCode HTTPVersion:version headerFields:[mutableHeaders copy]];
  54. return httpResponse;
  55. }];
  56. }
  57. @end