Source/NSCachedURLResponse+TNLAdditions.m (39 lines of code) (raw):
//
// NSCachedURLResponse+TNLAdditions.m
// TwitterNetworkLayer
//
// Created on 11/22/15.
// Copyright © 2020 Twitter. All rights reserved.
//
#import "NSCachedURLResponse+TNLAdditions.h"
NS_ASSUME_NONNULL_BEGIN
static NSString * const kTNLLocalCacheHeaderFieldName = @"x-tnl-local-cache";
static NSString * const kTNLLocalCacheHeaderFieldHitValue = @"hit";
@implementation NSCachedURLResponse (TNLCacheAdditions)
- (NSCachedURLResponse *)tnl_flaggedCachedResponse
{
NSCachedURLResponse *response = self;
NSURLResponse *URLResponse = response.response;
if ([URLResponse isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *HTTPResponse = (id)URLResponse;
if (![HTTPResponse.allHeaderFields[kTNLLocalCacheHeaderFieldName] isEqualToString:kTNLLocalCacheHeaderFieldHitValue]) {
NSMutableDictionary *allHeaderFields = [HTTPResponse.allHeaderFields mutableCopy];
allHeaderFields[kTNLLocalCacheHeaderFieldName] = kTNLLocalCacheHeaderFieldHitValue;
HTTPResponse = [[NSHTTPURLResponse alloc] initWithURL:HTTPResponse.URL
statusCode:HTTPResponse.statusCode
HTTPVersion:@"1.1"
headerFields:allHeaderFields];
response = [[NSCachedURLResponse alloc] initWithResponse:HTTPResponse
data:response.data
userInfo:response.userInfo
storagePolicy:response.storagePolicy];
}
}
return response;
}
@end
@implementation NSURLResponse (TNLCacheAdditions)
- (BOOL)tnl_wasCachedResponse
{
if ([self isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *HTTPResponse = (id)self;
NSString *localCacheValue = HTTPResponse.allHeaderFields[kTNLLocalCacheHeaderFieldName];
return [localCacheValue isEqualToString:kTNLLocalCacheHeaderFieldHitValue];
}
return NO;
}
@end
NS_ASSUME_NONNULL_END