diff --git a/macosx/English.lproj/InfoWindow.xib b/macosx/English.lproj/InfoWindow.xib index ac99185db..16d4898bc 100644 --- a/macosx/English.lproj/InfoWindow.xib +++ b/macosx/English.lproj/InfoWindow.xib @@ -8,7 +8,7 @@ 352.00 YES - + YES @@ -2141,6 +2141,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA {{1, 1}, {360, 143}} + 2 @@ -2169,6 +2170,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA {{10, 202}, {362, 145}} + 530 @@ -3939,14 +3941,14 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW -2147483392 - {{-22, 0}, {12, 17}} + {{328, 0}, {12, 17}} YES Address - 3.350000e+02 + 2.940000e+02 1.000000e+01 1.000000e+04 @@ -3966,9 +3968,45 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW - 1 + 3 YES + + Address + YES + caseInsensitiveCompare: + + + + DL From + 3.800000e+01 + 1.800000e+01 + 6.000000e+01 + + 75628032 + 0 + DL + + + + + + 337772096 + 2048 + Text Cell + + + + + + 2 + YES + + + DL From Rate + YES + compare: + 3.000000e+00 @@ -3976,8 +4014,9 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW 1.400000e+01 - -759169024 - 4 + -742359040 + InspectorTableWebSeeds + 1 15 0 NO @@ -3993,22 +4032,22 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW -2147483392 - {{328, 17}, {11, 96}} + {{328, 17}, {11, 37}} 256 _doScroller: - 8.658537e-01 + 7.708333e-01 -2147483392 - {{1, 113}, {327, 11}} + {{1, 54}, {327, 11}} 257 _doScroller: - 8.387097e-01 + 8.918206e-01 @@ -8143,6 +8182,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW YES + @@ -8160,6 +8200,20 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW + + 1786 + + + YES + + + + + + 1787 + + + @@ -8981,7 +9035,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW - 1785 + 1787 diff --git a/macosx/InfoWindowController.m b/macosx/InfoWindowController.m index 512186035..f068b4d1b 100644 --- a/macosx/InfoWindowController.m +++ b/macosx/InfoWindowController.m @@ -154,6 +154,11 @@ typedef enum [fPeerTable setSortDescriptors: [NSArray arrayWithObject: [[fPeerTable tableColumnWithIdentifier: @"IP"] sortDescriptorPrototype]]]; + //initially sort webseed table by address + if ([[fWebSeedTable sortDescriptors] count] == 0) + [fWebSeedTable setSortDescriptors: [NSArray arrayWithObject: [[fWebSeedTable tableColumnWithIdentifier: @"Address"] + sortDescriptorPrototype]]]; + //set table header tool tips if ([NSApp isOnLeopardOrBetter]) { @@ -165,6 +170,10 @@ typedef enum "inspector -> peer table -> header tool tip")]; [[fPeerTable tableColumnWithIdentifier: @"DL From"] setHeaderToolTip: NSLocalizedString(@"Downloading From Peer", "inspector -> peer table -> header tool tip")]; + + #warning add tooltip for webseeds? + [[fWebSeedTable tableColumnWithIdentifier: @"DL From"] setHeaderToolTip: NSLocalizedString(@"Downloading From Web Seeder", + "inspector -> peer table -> header tool tip")]; } else { @@ -215,6 +224,8 @@ typedef enum [fWebSeeds release]; [fTrackers release]; + [fWebSeedTableAnimation release]; + [super dealloc]; } @@ -364,9 +375,11 @@ typedef enum [fPeers release]; fPeers = nil; + [fPeerTable reloadData]; [fWebSeeds release]; fWebSeeds = nil; + [fWebSeedTable reloadData]; [self setWebSeederTableHidden: YES animate: YES]; [fTrackers release]; @@ -471,12 +484,9 @@ typedef enum [self updateInfoStats]; [self updateOptions]; + //reload tables that won't change every update [fTrackerTable setTrackers: fTrackers]; [fTrackerTable reloadData]; - - [fWebSeedTable reloadData]; - #warning check if should just be reloaded when not 1 torrent - [fPeerTable reloadData]; } - (void) updateInfoStats @@ -852,7 +862,16 @@ typedef enum } else if (tableView == fWebSeedTable) { - return [fWebSeeds objectAtIndex: row]; + NSString * ident = [column identifier]; + NSDictionary * webSeed = [fWebSeeds objectAtIndex: row]; + + if ([ident isEqualToString: @"DL From"]) + { + NSNumber * rate; + return (rate = [webSeed objectForKey: @"DL From Rate"]) ? [NSString stringForSpeedAbbrev: [rate floatValue]] : @""; + } + else + return [webSeed objectForKey: @"Address"]; } else if (tableView == fTrackerTable) { @@ -883,6 +902,17 @@ typedef enum [tableView reloadData]; } } + else if (tableView == fWebSeedTable) + { + if (fWebSeeds) + { + NSArray * oldWebSeeds = fWebSeeds; + fWebSeeds = [[fWebSeeds sortedArrayUsingDescriptors: [fWebSeedTable sortDescriptors]] retain]; + [oldWebSeeds release]; + [tableView reloadData]; + } + } + else; } - (BOOL) tableView: (NSTableView *) tableView shouldSelectRow: (int) row @@ -1434,8 +1464,11 @@ typedef enum [fPeers release]; fPeers = [[[torrent peers] sortedArrayUsingDescriptors: [self peerSortDescriptors]] retain]; - [fPeerTable reloadData]; + + [fWebSeeds release]; + fWebSeeds = [[[torrent webSeeders] sortedArrayUsingDescriptors: [fWebSeedTable sortDescriptors]] retain]; + [fWebSeedTable reloadData]; } - (void) updateInfoFiles @@ -1512,7 +1545,7 @@ typedef enum fWebSeedTableAnimation = [[NSViewAnimation alloc] initWithViewAnimations: [NSArray arrayWithObjects: webSeedDict, peerDict, nil]]; - [fWebSeedTableAnimation setDuration: 0.1]; + [fWebSeedTableAnimation setDuration: 0.125]; [fWebSeedTableAnimation setAnimationBlockingMode: NSAnimationNonblocking]; [fWebSeedTableAnimation setDelegate: self]; diff --git a/macosx/Torrent.m b/macosx/Torrent.m index 2c4760443..a8e8253f7 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -1022,7 +1022,16 @@ void completenessChangeCallback(tr_torrent * torrent, cp_status_t status, void * NSMutableArray * webSeeders = [NSMutableArray arrayWithCapacity: webSeedCount]; for (i = 0; i < webSeedCount; i++) - [webSeeders addObject: [NSString stringWithUTF8String: fInfo->webseeds[i]]]; + { + NSMutableDictionary * dict = [NSMutableDictionary dictionaryWithCapacity: 2]; + + [dict setObject: [NSString stringWithUTF8String: fInfo->webseeds[i]] forKey: @"Address"]; + + /*if (webSeeders->isDownloadingFrom) + [dict setObject: [NSNumber numberWithFloat: peer->downloadFromRate] forKey: @"DL From Rate"];*/ + + [webSeeders addObject: dict]; + } return webSeeders; }