-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathIRWebAPIEngine+LocalCaching.m
More file actions
84 lines (47 loc) · 2.29 KB
/
IRWebAPIEngine+LocalCaching.m
File metadata and controls
84 lines (47 loc) · 2.29 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
//
// 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"
NSString * const kIRWebAPIEngineRequestContextLocalCachingTemporaryFileURLsKey = @"kIRWebAPIEngineRequestContextLocalCachingTemporaryFileURLsKey";
NSString * const kIRWebAPIEngineLocallocalCacheDirectoryPath = @"kIRWebAPIEngineLocalCachingBasePath";
@implementation IRWebAPIEngine (LocalCaching)
+ (NSURL *) newTemporaryFileURL {
NSString *applicationCacheDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *preferredCacheDirectoryPath = [applicationCacheDirectory stringByAppendingPathComponent:NSStringFromClass([self class])];
NSError *error;
if (![[NSFileManager defaultManager] createDirectoryAtPath:preferredCacheDirectoryPath withIntermediateDirectories:YES attributes:nil error:&error]) {
NSLog(@"Erorr occurred while assuring cache directory existence: %@", error);
return nil;
};
NSURL *fileURL = [[NSURL fileURLWithPath:[preferredCacheDirectoryPath stringByAppendingPathComponent:IRWebAPIKitNonce()]] retain];
return fileURL;
}
+ (BOOL) cleanUpTemporaryFileAtURL:(NSURL *)inTemporaryFileURL {
NSError *error;
if (![[NSFileManager defaultManager] removeItemAtURL:inTemporaryFileURL error:&error]) {
NSLog(@"Error removing file at URL %@: %@", inTemporaryFileURL, error);
return NO;
} else {
NSLog(@"Removed %@", inTemporaryFileURL);
}
return YES;
}
+ (IRWebAPIResponseContextTransformer) defaultCleanUpTemporaryFilesResponseTransformer {
return [[(^ (NSDictionary *inParsedResponse, NSDictionary *inResponseContext) {
NSArray *cachedFileURLs = [[inResponseContext objectForKey:kIRWebAPIEngineResponseContextOriginalRequestContext] objectForKey:kIRWebAPIEngineRequestContextLocalCachingTemporaryFileURLsKey];
// DISPATCH_QUEUE_PRIORITY_BACKGROUND is unrecognized by LLVM 2.0 so we’re using the number it uses
dispatch_async(dispatch_get_global_queue(-2, 0), ^ {
if (cachedFileURLs)
for (NSURL *aFileURL in cachedFileURLs)
[self cleanUpTemporaryFileAtURL:aFileURL];
});
return inParsedResponse;
}) copy] autorelease];
}
@end