-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Expand file tree
/
Copy pathFFFastImagePreloaderManager.m
More file actions
79 lines (66 loc) · 2.66 KB
/
FFFastImagePreloaderManager.m
File metadata and controls
79 lines (66 loc) · 2.66 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
#import "FFFastImagePreloaderManager.h"
#import "FFFastImagePreloader.h"
#import "FFFastImageSource.h"
#import "SDWebImageDownloader.h"
@implementation FFFastImagePreloaderManager
{
bool _hasListeners;
NSMutableDictionary* _preloaders;
}
RCT_EXPORT_MODULE(FastImagePreloaderManager);
- (dispatch_queue_t)methodQueue
{
return dispatch_queue_create("com.dylanvann.fastimage.FastImagePreloaderManager", DISPATCH_QUEUE_SERIAL);
}
+ (BOOL)requiresMainQueueSetup
{
return YES;
}
-(instancetype) init {
if (self = [super init]) {
_preloaders = [[NSMutableDictionary alloc] init];
}
return self;
}
- (NSArray<NSString *> *)supportedEvents
{
return @[@"fffastimage-progress", @"fffastimage-complete"];
}
- (void) imagePrefetcher:(nonnull SDWebImagePrefetcher *)imagePrefetcher
didFinishWithTotalCount:(NSUInteger)totalCount
skippedCount:(NSUInteger)skippedCount
{
NSNumber* id = ((FFFastImagePreloader*) imagePrefetcher).id;
[_preloaders removeObjectForKey:id];
[self sendEventWithName:@"fffastimage-complete"
body:@{ @"id": id, @"finished": [NSNumber numberWithLong:totalCount], @"skipped": [NSNumber numberWithLong:skippedCount]}
];
}
- (void) imagePrefetcher:(nonnull SDWebImagePrefetcher *)imagePrefetcher
didPrefetchURL:(nullable NSURL *)imageURL
finishedCount:(NSUInteger)finishedCount
totalCount:(NSUInteger)totalCount
{
NSNumber* id = ((FFFastImagePreloader*) imagePrefetcher).id;
[self sendEventWithName:@"fffastimage-progress"
body:@{ @"id": id, @"finished": [NSNumber numberWithLong:finishedCount], @"total": [NSNumber numberWithLong:totalCount] }
];
}
RCT_EXPORT_METHOD(createPreloader:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
FFFastImagePreloader* preloader = [[FFFastImagePreloader alloc] init];
preloader.delegate = self;
_preloaders[preloader.id] = preloader;
resolve(preloader.id);
}
RCT_EXPORT_METHOD(preload:(nonnull NSNumber*)preloaderId sources:(nonnull NSArray<FFFastImageSource *> *)sources) {
NSMutableArray *urls = [NSMutableArray arrayWithCapacity:sources.count];
[sources enumerateObjectsUsingBlock:^(FFFastImageSource * _Nonnull source, NSUInteger idx, BOOL * _Nonnull stop) {
[source.headers enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString* header, BOOL *stop) {
[[SDWebImageDownloader sharedDownloader] setValue:header forHTTPHeaderField:key];
}];
[urls setObject:source.url atIndexedSubscript:idx];
}];
FFFastImagePreloader* preloader = _preloaders[preloaderId];
[preloader prefetchURLs:urls];
}
@end