Merge pull request #3759 from lonepalm/lru-upstream
Fix issue causing disk cache eviction LRU to not function as expected.
This commit is contained in:
commit
0b10fcb544
|
@ -71,13 +71,16 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis
|
||||||
}
|
}
|
||||||
NSData *data = [NSData dataWithContentsOfFile:filePath options:self.config.diskCacheReadingOptions error:nil];
|
NSData *data = [NSData dataWithContentsOfFile:filePath options:self.config.diskCacheReadingOptions error:nil];
|
||||||
if (data) {
|
if (data) {
|
||||||
|
[[NSURL fileURLWithPath:filePath] setResourceValue:[NSDate date] forKey:NSURLContentAccessDateKey error:nil];
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
|
// fallback because of https://github.com/rs/SDWebImage/pull/976 that added the extension to the disk file name
|
||||||
// checking the key with and without the extension
|
// checking the key with and without the extension
|
||||||
data = [NSData dataWithContentsOfFile:filePath.stringByDeletingPathExtension options:self.config.diskCacheReadingOptions error:nil];
|
filePath = filePath.stringByDeletingPathExtension;
|
||||||
|
data = [NSData dataWithContentsOfFile:filePath options:self.config.diskCacheReadingOptions error:nil];
|
||||||
if (data) {
|
if (data) {
|
||||||
|
[[NSURL fileURLWithPath:filePath] setResourceValue:[NSDate date] forKey:NSURLContentAccessDateKey error:nil];
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,11 +152,8 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis
|
||||||
NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
|
NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
|
||||||
|
|
||||||
// Compute content date key to be used for tests
|
// Compute content date key to be used for tests
|
||||||
NSURLResourceKey cacheContentDateKey = NSURLContentModificationDateKey;
|
NSURLResourceKey cacheContentDateKey;
|
||||||
switch (self.config.diskCacheExpireType) {
|
switch (self.config.diskCacheExpireType) {
|
||||||
case SDImageCacheConfigExpireTypeAccessDate:
|
|
||||||
cacheContentDateKey = NSURLContentAccessDateKey;
|
|
||||||
break;
|
|
||||||
case SDImageCacheConfigExpireTypeModificationDate:
|
case SDImageCacheConfigExpireTypeModificationDate:
|
||||||
cacheContentDateKey = NSURLContentModificationDateKey;
|
cacheContentDateKey = NSURLContentModificationDateKey;
|
||||||
break;
|
break;
|
||||||
|
@ -163,7 +163,9 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis
|
||||||
case SDImageCacheConfigExpireTypeChangeDate:
|
case SDImageCacheConfigExpireTypeChangeDate:
|
||||||
cacheContentDateKey = NSURLAttributeModificationDateKey;
|
cacheContentDateKey = NSURLAttributeModificationDateKey;
|
||||||
break;
|
break;
|
||||||
|
case SDImageCacheConfigExpireTypeAccessDate:
|
||||||
default:
|
default:
|
||||||
|
cacheContentDateKey = NSURLContentAccessDateKey;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The attribute which the clear cache will be checked against when clearing the disk cache
|
* The attribute which the clear cache will be checked against when clearing the disk cache
|
||||||
* Default is Modified Date
|
* Default is Access Date
|
||||||
*/
|
*/
|
||||||
@property (assign, nonatomic) SDImageCacheConfigExpireType diskCacheExpireType;
|
@property (assign, nonatomic) SDImageCacheConfigExpireType diskCacheExpireType;
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ static const NSInteger kDefaultCacheMaxDiskAge = 60 * 60 * 24 * 7; // 1 week
|
||||||
_diskCacheWritingOptions = NSDataWritingAtomic;
|
_diskCacheWritingOptions = NSDataWritingAtomic;
|
||||||
_maxDiskAge = kDefaultCacheMaxDiskAge;
|
_maxDiskAge = kDefaultCacheMaxDiskAge;
|
||||||
_maxDiskSize = 0;
|
_maxDiskSize = 0;
|
||||||
_diskCacheExpireType = SDImageCacheConfigExpireTypeModificationDate;
|
_diskCacheExpireType = SDImageCacheConfigExpireTypeAccessDate;
|
||||||
_fileManager = nil;
|
_fileManager = nil;
|
||||||
if (@available(iOS 10.0, tvOS 10.0, macOS 10.12, watchOS 3.0, *)) {
|
if (@available(iOS 10.0, tvOS 10.0, macOS 10.12, watchOS 3.0, *)) {
|
||||||
_ioQueueAttributes = DISPATCH_QUEUE_SERIAL_WITH_AUTORELEASE_POOL; // DISPATCH_AUTORELEASE_FREQUENCY_WORK_ITEM
|
_ioQueueAttributes = DISPATCH_QUEUE_SERIAL_WITH_AUTORELEASE_POOL; // DISPATCH_AUTORELEASE_FREQUENCY_WORK_ITEM
|
||||||
|
|
|
@ -91,7 +91,7 @@ static NSString * const SDWebImageTestDiskCacheExtendedAttributeName = @"com.hac
|
||||||
- (void)removeExpiredData {
|
- (void)removeExpiredData {
|
||||||
NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.config.maxDiskAge];
|
NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-self.config.maxDiskAge];
|
||||||
NSURL *diskCacheURL = [NSURL fileURLWithPath:self.cachePath isDirectory:YES];
|
NSURL *diskCacheURL = [NSURL fileURLWithPath:self.cachePath isDirectory:YES];
|
||||||
NSArray<NSString *> *resourceKeys = @[NSURLIsDirectoryKey, NSURLAttributeModificationDateKey];
|
NSArray<NSString *> *resourceKeys = @[NSURLIsDirectoryKey, NSURLContentAccessDateKey];
|
||||||
NSDirectoryEnumerator<NSURL *> *fileEnumerator = [self.fileManager enumeratorAtURL:diskCacheURL
|
NSDirectoryEnumerator<NSURL *> *fileEnumerator = [self.fileManager enumeratorAtURL:diskCacheURL
|
||||||
includingPropertiesForKeys:resourceKeys
|
includingPropertiesForKeys:resourceKeys
|
||||||
options:NSDirectoryEnumerationSkipsHiddenFiles
|
options:NSDirectoryEnumerationSkipsHiddenFiles
|
||||||
|
@ -108,8 +108,8 @@ static NSString * const SDWebImageTestDiskCacheExtendedAttributeName = @"com.hac
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove files that are older than the expiration date;
|
// Remove files that are older than the expiration date;
|
||||||
NSDate *modifiedDate = resourceValues[NSURLAttributeModificationDateKey];
|
NSDate *accessDate = resourceValues[NSURLContentAccessDateKey];
|
||||||
if (expirationDate && [[modifiedDate laterDate:expirationDate] isEqualToDate:expirationDate]) {
|
if (expirationDate && [[accessDate laterDate:expirationDate] isEqualToDate:expirationDate]) {
|
||||||
[self.fileManager removeItemAtURL:fileURL error:nil];
|
[self.fileManager removeItemAtURL:fileURL error:nil];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue