1 // Copyright 2015-present 650 Industries. All rights reserved.
2 
3 #import <Foundation/Foundation.h>
4 
5 NS_ASSUME_NONNULL_BEGIN
6 
7 /**
8  * This is the versioned protocol for EXCachedResource, this also defines some
9  * of the types used when interacting with EXCachedResource instances. This is
10  * used with the EXCachedResourceManager service to be able to create EXCachedResource
11  * instances in versioned code.
12  *
13  * **Avoid making breaking changes to this and if you do make sure to edit all
14  * versions of this file.**
15  */
16 
17 @interface EXLoadingProgress : NSObject
18 
19 @property (nonatomic, copy) NSString *status;
20 @property (nonatomic, strong) NSNumber *done;
21 @property (nonatomic, strong) NSNumber *total;
22 
23 @end
24 
25 typedef void (^EXCachedResourceSuccessBlock)(NSData *data);
26 typedef void (^EXCachedResourceErrorBlock)(NSError *error);
27 typedef void (^EXCachedResourceProgressBlock)(EXLoadingProgress *progress);
28 
29 typedef enum EXCachedResourceBehavior {
30   // load the resource without using any cache.
31   EXCachedResourceNoCache,
32   // load the resource without reading from the cache, but still write the loaded resource to the cache.
33   EXCachedResourceWriteToCache,
34   // return immediately with cached data if it exists, then try to download the resource and replace the cache in the background.
35   EXCachedResourceUseCacheImmediately,
36   // return immediately with cached data if it exists, and only try to download the resource if cached data is not found.
37   EXCachedResourceFallBackToNetwork,
38   // try to download the resource, but fall back to the cached version if the download fails.
39   EXCachedResourceFallBackToCache,
40   // use a cache if it exists, otherwise fail. (don't download anything)
41   EXCachedResourceOnlyCache,
42 } EXCachedResourceBehavior;
43 
44 typedef enum EXManifestCacheBehavior {
45   // load the manifest without using any cache.
46   EXManifestNoCache,
47   // use a cache if it exists, otherwise fail. (don't download anything)
48   EXManifestOnlyCache,
49   // load the resource without reading from the cache, but still prepare to write the loaded resource to the cache.
50   EXManifestPrepareToCache,
51 } EXManifestCacheBehavior;
52 
53 @protocol EXResourceLoader
54 
55 - (void)loadResourceWithBehavior:(EXCachedResourceBehavior)behavior
56                    progressBlock:(__nullable EXCachedResourceProgressBlock)progressBlock
57                     successBlock:(EXCachedResourceSuccessBlock)successBlock
58                       errorBlock:(EXCachedResourceErrorBlock)errorBlock;
59 
60 @end
61 
62 NS_ASSUME_NONNULL_END
63