forked from iridia/IRWebAPIKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIRWebAPIEngine+LocalCaching.m
More file actions
97 lines (57 loc) · 2.44 KB
/
IRWebAPIEngine+LocalCaching.m
File metadata and controls
97 lines (57 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//
// IRWebAPIEngine+LocalCaching.m
// IRWebAPIKit
//
// Created by Evadne Wu on 1/23/11.
// Copyright 2011 Iridia Productions. All rights reserved.
//
#import <objc/runtime.h>
#import "IRWebAPIEngine+LocalCaching.h"
#import "IRWebAPIHelpers.h"
static NSString * const kCacheFileURLS = @"-[IRWebAPIRequestContext(LocalCaching) cacheFileURLs]";
@implementation IRWebAPIRequestContext (LocalCaching)
- (NSArray *) cacheFileURLs {
return [objc_getAssociatedObject(self, &kCacheFileURLS) copy];
}
- (void) removeAllCacheFileURLValues {
[self willChangeValueForKey:@"cacheFileURLs"];
objc_setAssociatedObject(self, &kCacheFileURLS, nil, OBJC_ASSOCIATION_ASSIGN);
[self didChangeValueForKey:@"cacheFileURLs"];
}
- (void) addCacheFileURL:(NSURL *)obj {
NSMutableArray *cacheFileURLs = objc_getAssociatedObject(self, &kCacheFileURLS);
if (!cacheFileURLs) {
cacheFileURLs = [NSMutableArray array];
objc_setAssociatedObject(self, &cacheFileURLs, cacheFileURLs, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
[self willChangeValueForKey:@"cacheFileURLs"];
if (obj) {
[cacheFileURLs addObject:obj];
} else {
[cacheFileURLs removeObject:obj];
}
[self didChangeValueForKey:@"cacheFileURLs"];
}
@end
@implementation IRWebAPIEngine (LocalCaching)
+ (NSURL *) newTemporaryFileURL {
NSString *applicationCacheDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *preferredCacheDirectoryPath = [applicationCacheDirectory stringByAppendingPathComponent:NSStringFromClass([self class])];
if ([[NSFileManager defaultManager] createDirectoryAtPath:preferredCacheDirectoryPath withIntermediateDirectories:YES attributes:nil error:nil])
return [NSURL fileURLWithPath:[preferredCacheDirectoryPath stringByAppendingPathComponent:IRWebAPIKitNonce()]];
return nil;
}
+ (BOOL) cleanUpTemporaryFileAtURL:(NSURL *)inTemporaryFileURL {
return [[NSFileManager defaultManager] removeItemAtURL:inTemporaryFileURL error:nil];
}
+ (IRWebAPIResponseContextTransformer) defaultCleanUpTemporaryFilesResponseTransformer {
return [(^ (NSDictionary *inParsedResponse, IRWebAPIRequestContext *inResponseContext) {
NSArray *cachedFileURLs = inResponseContext.cacheFileURLs;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^ {
for (NSURL *aFileURL in cachedFileURLs)
[self cleanUpTemporaryFileAtURL:aFileURL];
});
return inParsedResponse;
}) copy];
}
@end