From 2ca6c854d8bce9ba8a27cdb5c95b7560bc37ac78 Mon Sep 17 00:00:00 2001 From: "Pan, Xinlei (Ryan)" Date: Fri, 20 Apr 2018 13:47:21 -0400 Subject: [PATCH] update image cache method --- MVMCore/MVMCore/Constants/MVMCoreConstants.h | 3 +++ MVMCore/MVMCore/Constants/MVMCoreConstants.m | 3 +++ .../LoadHandling/FreeBee/MFFreebeeHandler.h | 1 + .../LoadHandling/FreeBee/MFFreebeeHandler.m | 25 +++++++++++++++++++ MVMCore/MVMCore/OtherHandlers/MVMCoreCache.m | 24 ++++++++---------- 5 files changed, 42 insertions(+), 14 deletions(-) diff --git a/MVMCore/MVMCore/Constants/MVMCoreConstants.h b/MVMCore/MVMCore/Constants/MVMCoreConstants.h index 9774912..cf74414 100644 --- a/MVMCore/MVMCore/Constants/MVMCoreConstants.h +++ b/MVMCore/MVMCore/Constants/MVMCoreConstants.h @@ -43,3 +43,6 @@ extern NSString * const URLComponentKeepAlive; extern NSString * const NotificationResponseLoaded; extern NSString * const MVMCoreNotificationGoingToServer; + +#pragma mark - Image Cache +extern NSTimeInterval const ImageTimeOut; diff --git a/MVMCore/MVMCore/Constants/MVMCoreConstants.m b/MVMCore/MVMCore/Constants/MVMCoreConstants.m index b0b9d17..76fbe3e 100644 --- a/MVMCore/MVMCore/Constants/MVMCoreConstants.m +++ b/MVMCore/MVMCore/Constants/MVMCoreConstants.m @@ -29,3 +29,6 @@ NSString * const URLComponentKeepAlive = @"isAlive.jsp"; NSString * const NotificationResponseLoaded = @"responseLoaded"; NSString * const MVMCoreNotificationGoingToServer = @"MVMCoreGoServer"; + +#pragma mark - Image Cache +NSTimeInterval const ImageTimeOut = 1800; diff --git a/MVMCore/MVMCore/LoadHandling/FreeBee/MFFreebeeHandler.h b/MVMCore/MVMCore/LoadHandling/FreeBee/MFFreebeeHandler.h index dc0daee..9ab7393 100644 --- a/MVMCore/MVMCore/LoadHandling/FreeBee/MFFreebeeHandler.h +++ b/MVMCore/MVMCore/LoadHandling/FreeBee/MFFreebeeHandler.h @@ -45,6 +45,7 @@ typedef void(^FreebeeLoadFinishedHandler)(MVMCoreOperation* _Nullable freebeeOpe - (nullable NSString*)urlForidFromConfigDict:(nonnull NSString*)urlId; - (nullable NSData*)freebee_dataWithContentsOfURL:(NSURL *_Nullable)url; +- (nullable NSCachedURLResponse*)freebee_dataWithImageURL:(NSURL *_Nullable)imageURL; - (void)configureFreeBeeWithDict:(nullable NSDictionary*)configDict withSessionReset:(BOOL)isReset; @end diff --git a/MVMCore/MVMCore/LoadHandling/FreeBee/MFFreebeeHandler.m b/MVMCore/MVMCore/LoadHandling/FreeBee/MFFreebeeHandler.m index 2a8d2cb..698043b 100644 --- a/MVMCore/MVMCore/LoadHandling/FreeBee/MFFreebeeHandler.m +++ b/MVMCore/MVMCore/LoadHandling/FreeBee/MFFreebeeHandler.m @@ -254,6 +254,31 @@ typedef NS_ENUM(NSUInteger, FreeBeeCampaignState) { return data; } +- (nullable NSCachedURLResponse*)freebee_dataWithImageURL:(NSURL *)imageURL { + + NSData* data = nil; + NSDictionary* proxyDict = [self proxyDictionaryforUrl:imageURL]; + + if ([self isFreeBeeEnabled] && + [self isValidCampaign] && proxyDict && + ![self isExpired] && [self isFreeBeeEnabledForCurrentModule]) { + + MVMCoreLog(@"Free Image Data Url, %@", imageURL); + NSURLResponse* response = nil; + NSError* error = nil; + data = [self sendSynchronousRequest:imageURL returningResponse:&response error:&error]; + + if (error) { + data = nil; + } + + MVMCoreLog(@"freebee_dataWithImageURL:Free Image Data, %lu", (unsigned long)data.length); + NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:response data:data]; + return cachedResponse; + } + return nil; +} + #pragma mark - FreeBee Registration - (void)responseJSONUpdated:(nonnull NSNotification *)notification { diff --git a/MVMCore/MVMCore/OtherHandlers/MVMCoreCache.m b/MVMCore/MVMCore/OtherHandlers/MVMCoreCache.m index 426a196..8fee473 100644 --- a/MVMCore/MVMCore/OtherHandlers/MVMCoreCache.m +++ b/MVMCore/MVMCore/OtherHandlers/MVMCoreCache.m @@ -13,6 +13,7 @@ #import "MFFreebeeHandler.h" #import "MVMCoreGetterUtility.h" #import "MVMCoreObject.h" +#import "MVMCoreConstants.h" @interface MVMCoreCache () @@ -532,29 +533,24 @@ static NSString * const STATIC_CACHE_COMPONENT = @"StaticCache.txt"; NSURLSessionConfiguration *configure = [NSURLSessionConfiguration defaultSessionConfiguration]; configure.URLCache = sharedCache; NSURLSession *session = [NSURLSession sessionWithConfiguration:configure]; - NSURLRequest *request = [NSURLRequest requestWithURL:s7URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:1800]; - NSCachedURLResponse *response = [sharedCache cachedResponseForRequest:request]; + NSURLRequest *request = [NSURLRequest requestWithURL:s7URL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:ImageTimeOut]; + + NSCachedURLResponse *cachedResponse = [sharedCache cachedResponseForRequest:request]; + if (!cachedResponse.data) { + cachedResponse = [[MFFreebeeHandler sharedHandler] freebee_dataWithImageURL:s7URL]; + if (cachedResponse) { + [sharedCache storeCachedResponse:cachedResponse forRequest:request]; + } + } NSURLSessionDownloadTask *downloadImageTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSData *data = [NSData dataWithContentsOfURL:location]; NSCachedURLResponse *cachedreponse = [[NSCachedURLResponse alloc] initWithResponse:response data:data]; [sharedCache storeCachedResponse:cachedreponse forRequest:request]; - NSLog(@"HEADDERRRSS %i for %@ %@", ((NSHTTPURLResponse *)response).statusCode,s7URL.absoluteString,((NSHTTPURLResponse *)response).allHeaderFields.description); UIImage *image = [UIImage imageWithData:data scale:[UIScreen mainScreen].scale]; completionHandler(image, nil, isFallBackImage); }]; [downloadImageTask resume]; return; - /* - // Check in memory cache - img = [self getCachedImageWithName:s7URL.absoluteString]; - - if (!img) { - NSData *imageData = [[MFFreebeeHandler sharedHandler] freebee_dataWithContentsOfURL:s7URL]; - img = [[UIImage alloc] initWithData:imageData scale:[UIScreen mainScreen].scale]; - if (img) { - [self addImageToCache:img withName:s7URL.absoluteString]; - } - }*/ } } else {