1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-23 16:24:02 +00:00

Load the tracker icon on the main thread (#1086)

* Load the tracker icon on the main thread

* Call loadTrackerIcon: directly
This commit is contained in:
Mitch Livingston 2020-01-03 00:12:59 -05:00 committed by GitHub
parent 10dbe92780
commit f041f229bf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -195,11 +195,8 @@ NSMutableSet * fTrackerIconLoading;
baseAddress = [NSString stringWithFormat: @"http://%@", host];
icon = [fTrackerIconCache objectForKey: baseAddress];
if (!icon && ![fTrackerIconLoading containsObject: baseAddress])
{
[fTrackerIconLoading addObject: baseAddress];
[NSThread detachNewThreadSelector: @selector(loadTrackerIcon:) toTarget: self withObject: baseAddress];
}
if (!icon)
[self loadTrackerIcon: baseAddress];
}
return (icon && icon != [NSNull null]) ? icon : [NSImage imageNamed: @"FavIcon"];
@ -208,27 +205,31 @@ NSMutableSet * fTrackerIconLoading;
#warning better favicon detection
- (void) loadTrackerIcon: (NSString *) baseAddress
{
@autoreleasepool
{
//try favicon.png
NSURL * favIconUrl = [NSURL URLWithString: [baseAddress stringByAppendingPathComponent: @"favicon.png"]];
if ([fTrackerIconLoading containsObject: baseAddress]) {
return;
}
[fTrackerIconLoading addObject: baseAddress];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSImage *icon = nil;
NSArray<NSString *> *filenamesToTry = @[ @"favicon.png", @"favicon.ico" ];
for (NSString *filename in filenamesToTry) {
NSURL * favIconUrl = [NSURL URLWithString: [baseAddress stringByAppendingPathComponent:filename]];
NSURLRequest * request = [NSURLRequest requestWithURL: favIconUrl cachePolicy: NSURLRequestUseProtocolCachePolicy
timeoutInterval: 30.0];
NSData * iconData = [NSURLConnection sendSynchronousRequest: request returningResponse: NULL error: NULL];
NSImage * icon = [[NSImage alloc] initWithData: iconData];
//try favicon.ico
if (!icon)
{
favIconUrl = [NSURL URLWithString: [baseAddress stringByAppendingPathComponent: @"favicon.ico"]];
request = [NSURLRequest requestWithURL: favIconUrl cachePolicy: NSURLRequestUseProtocolCachePolicy
timeoutInterval: 30.0];
iconData = [NSURLConnection sendSynchronousRequest: request returningResponse: NULL error: NULL];
if (iconData) {
icon = [[NSImage alloc] initWithData: iconData];
if (icon) {
break;
}
}
}
dispatch_async(dispatch_get_main_queue(), ^{
if (icon)
{
[fTrackerIconCache setObject: icon forKey: baseAddress];
@ -239,7 +240,8 @@ NSMutableSet * fTrackerIconLoading;
[fTrackerIconCache setObject: [NSNull null] forKey: baseAddress];
[fTrackerIconLoading removeObject: baseAddress];
}
});
});
}
- (NSRect) imageRectForBounds: (NSRect) bounds