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:
parent
10dbe92780
commit
f041f229bf
1 changed files with 38 additions and 36 deletions
|
@ -195,11 +195,8 @@ NSMutableSet * fTrackerIconLoading;
|
||||||
baseAddress = [NSString stringWithFormat: @"http://%@", host];
|
baseAddress = [NSString stringWithFormat: @"http://%@", host];
|
||||||
|
|
||||||
icon = [fTrackerIconCache objectForKey: baseAddress];
|
icon = [fTrackerIconCache objectForKey: baseAddress];
|
||||||
if (!icon && ![fTrackerIconLoading containsObject: baseAddress])
|
if (!icon)
|
||||||
{
|
[self loadTrackerIcon: baseAddress];
|
||||||
[fTrackerIconLoading addObject: baseAddress];
|
|
||||||
[NSThread detachNewThreadSelector: @selector(loadTrackerIcon:) toTarget: self withObject: baseAddress];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (icon && icon != [NSNull null]) ? icon : [NSImage imageNamed: @"FavIcon"];
|
return (icon && icon != [NSNull null]) ? icon : [NSImage imageNamed: @"FavIcon"];
|
||||||
|
@ -208,38 +205,43 @@ NSMutableSet * fTrackerIconLoading;
|
||||||
#warning better favicon detection
|
#warning better favicon detection
|
||||||
- (void) loadTrackerIcon: (NSString *) baseAddress
|
- (void) loadTrackerIcon: (NSString *) baseAddress
|
||||||
{
|
{
|
||||||
@autoreleasepool
|
if ([fTrackerIconLoading containsObject: baseAddress]) {
|
||||||
{
|
return;
|
||||||
//try favicon.png
|
|
||||||
NSURL * favIconUrl = [NSURL URLWithString: [baseAddress stringByAppendingPathComponent: @"favicon.png"]];
|
|
||||||
|
|
||||||
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];
|
|
||||||
icon = [[NSImage alloc] initWithData: iconData];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (icon)
|
|
||||||
{
|
|
||||||
[fTrackerIconCache setObject: icon forKey: baseAddress];
|
|
||||||
|
|
||||||
[[self controlView] setNeedsDisplay: YES];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
[fTrackerIconCache setObject: [NSNull null] forKey: baseAddress];
|
|
||||||
|
|
||||||
[fTrackerIconLoading removeObject: baseAddress];
|
|
||||||
}
|
}
|
||||||
|
[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];
|
||||||
|
if (iconData) {
|
||||||
|
icon = [[NSImage alloc] initWithData: iconData];
|
||||||
|
if (icon) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
if (icon)
|
||||||
|
{
|
||||||
|
[fTrackerIconCache setObject: icon forKey: baseAddress];
|
||||||
|
|
||||||
|
[[self controlView] setNeedsDisplay: YES];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
[fTrackerIconCache setObject: [NSNull null] forKey: baseAddress];
|
||||||
|
|
||||||
|
[fTrackerIconLoading removeObject: baseAddress];
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSRect) imageRectForBounds: (NSRect) bounds
|
- (NSRect) imageRectForBounds: (NSRect) bounds
|
||||||
|
|
Loading…
Reference in a new issue