JLChen
2021-11-04 1443556e9ccb1a19ed8e6710c16c8adc4d4f4fb3
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
//
//  Copyright © 2020 dahua. All rights reserved.
//
 
#import "UIImageView+LCPicDecrypt.h"
#import <LCOpenSDKDynamic/LCOpenSDK/LCOpenSDK_Utils.h>
#import <SDWebImage/SDImageCache.h>
 
 
@implementation UIImageView (LCPicDecrypt)
 
-(void)lc_setImageWithURL:(NSString *)url placeholderImage:(UIImage *)placeholder DeviceId:(NSString *)deviceId Key:(NSString *)key{
    [self setImage:placeholder];
    if (!url || [url isEqualToString:@""]) {
        return;
    }
    SDImageCache* cache = [SDImageCache sharedImageCache];
    NSString* key_temp = [[url componentsSeparatedByString:@"?"] objectAtIndex:0];
    dispatch_queue_t whole_pic_download = dispatch_queue_create("whole_pic_download", DISPATCH_QUEUE_PRIORITY_DEFAULT);
    dispatch_async(whole_pic_download, ^{
        if ([cache diskImageDataExistsWithKey:key_temp]) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [self setImage:[cache imageFromDiskCacheForKey:key_temp]];
            });
            return;
        }
       
        NSURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5.0];
        dispatch_async(dispatch_get_main_queue(), ^{
            NSHTTPURLResponse* response = nil;
            NSData* picData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:NULL];
            if (response == nil) {
                NSLog(@"download failed");
            }
            else {
                NSData* dataOut = [[NSData alloc] init];
                NSInteger iret = [[LCOpenSDK_Utils new] decryptPic:picData deviceID:deviceId key:key bufOut:&dataOut];
                NSLog(@"decrypt iret[%ld]", (long)iret);
                if (0 == iret) {
                    UIImage* img = [UIImage imageWithData:[NSData dataWithBytes:[dataOut bytes] length:[dataOut length]]];
                    [cache storeImage:img forKey:key_temp toDisk:YES completion:^{
                        
                    }];
                    [self setImage:img];
                }
            }
        });
        
    });
}
 
@end