#2860 Display trackers for all selected torrents in the inspector

This commit is contained in:
Mitchell Livingston 2010-02-05 02:51:42 +00:00
parent 7519f51fe9
commit 94517feeeb
5 changed files with 38 additions and 38 deletions

View File

@ -36,7 +36,7 @@
- (id) initWithLib: (tr_session *) lib forWindow: (NSWindow *) window
{
if ((self = ([super initWithContentRect: NSZeroRect styleMask: NSBorderlessWindowMask
if ((self = ([super initWithContentRect: [window frame] styleMask: NSBorderlessWindowMask
backing: NSBackingStoreBuffered defer: NO])))
{
fLib = lib;
@ -66,7 +66,6 @@
[fFadeOutAnimation setAnimationBlockingMode: NSAnimationNonblockingThreaded];
[window addChildWindow: self ordered: NSWindowAbove];
[self setFrame: [window frame] display: NO];
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(resizeWindow)
name: NSWindowDidResizeNotification object: window];

View File

@ -675,14 +675,7 @@ typedef enum
return [webSeed objectForKey: @"Address"];
}
else if (tableView == fTrackerTable)
{
id item = [fTrackers objectAtIndex: row];
if ([item isKindOfClass: [NSNumber class]])
return [NSString stringWithFormat: NSLocalizedString(@"Tier %d", "Inspector -> tracker table"), [item integerValue]];
else
return item;
}
return [fTrackers objectAtIndex: row];
return nil;
}
@ -701,7 +694,7 @@ typedef enum
{
if (tableView == fTrackerTable)
{
if ([[fTrackers objectAtIndex: row] isKindOfClass: [NSNumber class]])
if (![[fTrackers objectAtIndex: row] isKindOfClass: [TrackerNode class]] && [tableView editedRow] != row)
return TRACKER_GROUP_SEPARATOR_HEIGHT;
}
@ -756,16 +749,14 @@ typedef enum
- (void) tableViewSelectionDidChange: (NSNotification *) notification
{
if ([notification object] == fTrackerTable)
{
NSInteger numSelected = [fTrackerTable numberOfSelectedRows];
[fTrackerAddRemoveControl setEnabled: numSelected > 0 forSegment: TRACKER_REMOVE_TAG];
}
[fTrackerAddRemoveControl setEnabled: [fTorrents count] == 1 && [fTrackerTable numberOfSelectedRows] > 0
forSegment: TRACKER_REMOVE_TAG];
}
- (BOOL) tableView: (NSTableView *) tableView isGroupRow: (NSInteger) row
{
if (tableView == fTrackerTable)
return [[fTrackers objectAtIndex: row] isKindOfClass: [NSNumber class]];
return ![[fTrackers objectAtIndex: row] isKindOfClass: [TrackerNode class]] && [tableView editedRow] != row;
return NO;
}
@ -857,7 +848,7 @@ typedef enum
else if (tableView == fTrackerTable)
{
id node = [fTrackers objectAtIndex: row];
if (![node isKindOfClass: [NSNumber class]])
if ([node isKindOfClass: [TrackerNode class]])
return [(TrackerNode *)node fullAnnounceAddress];
}
@ -882,7 +873,7 @@ typedef enum
//reset table with either new or old value
[fTrackers release];
fTrackers = [[torrent allTrackerStats] retain];
fTrackers = [[torrent allTrackerStatsWithTransferName: NO] retain];
[fTrackerTable setTrackers: fTrackers];
[fTrackerTable reloadData];
@ -1485,28 +1476,33 @@ typedef enum
- (void) updateInfoTracker
{
if ([fTorrents count] != 1)
if ([fTorrents count] == 0)
return;
Torrent * torrent = [fTorrents objectAtIndex: 0];
//get updated tracker stats
if ([fTrackerTable editedRow] == -1)
{
const BOOL multiple = [fTorrents count] != 1;
[fTrackers release];
fTrackers = [[torrent allTrackerStats] retain];
fTrackers = [[NSMutableArray alloc] init];
for (Torrent * torrent in fTorrents)
[fTrackers addObjectsFromArray: [torrent allTrackerStatsWithTransferName: multiple]];
[fTrackerTable setTrackers: fTrackers];
[fTrackerTable reloadData];
}
else
{
NSAssert1([fTorrents count] == 1, @"Attempting to add tracker with %d transfers selected", [fTorrents count]);
if ([NSApp isOnSnowLeopardOrBetter])
{
NSIndexSet * addedIndexes = [NSIndexSet indexSetWithIndexesInRange: NSMakeRange([fTrackers count]-2, 2)];
NSArray * tierAndTrackerBeingAdded = [fTrackers objectsAtIndexes: addedIndexes];
[fTrackers release];
fTrackers = [[torrent allTrackerStats] retain];
fTrackers = [[[fTorrents objectAtIndex: 0] allTrackerStatsWithTransferName: NO] retain];
[fTrackers addObjectsFromArray: tierAndTrackerBeingAdded];
[fTrackerTable setTrackers: fTrackers];
@ -1717,7 +1713,7 @@ typedef enum
{
[[self window] makeKeyWindow];
[fTrackers addObject: [NSNumber numberWithInt: [(TrackerNode *)[fTrackers lastObject] tier]+1]];
[fTrackers addObject: NSLocalizedString(@"New Tier", "inspector -> add tracker")];
[fTrackers addObject: @""];
[fTrackerTable setTrackers: fTrackers];
@ -1735,17 +1731,17 @@ typedef enum
for (NSUInteger i = 0; i < [fTrackers count]; ++i)
{
id object = [fTrackers objectAtIndex: i];
if ([object isKindOfClass: [NSNumber class]])
if ([object isKindOfClass: [TrackerNode class]])
{
if (groupSelected || [selectedIndexes containsIndex: i])
[removeIdentifiers addIndex: [(TrackerNode *)object identifier]];
}
else
{
groupSelected = [selectedIndexes containsIndex: i];
if (!groupSelected && i > [selectedIndexes lastIndex])
break;
}
else
{
if (groupSelected || [selectedIndexes containsIndex: i])
[removeIdentifiers addIndex: [(TrackerNode *)object identifier]];
}
}
NSAssert([removeIdentifiers count] > 0, @"Trying to remove no trackers.");
@ -1787,7 +1783,7 @@ typedef enum
//reset table with either new or old value
[fTrackers release];
fTrackers = [[torrent allTrackerStats] retain];
fTrackers = [[torrent allTrackerStatsWithTransferName: NO] retain];
[fTrackerTable setTrackers: fTrackers];
[fTrackerTable reloadData];

View File

@ -128,7 +128,7 @@
- (uint64_t) size;
- (uint64_t) sizeLeft;
- (NSMutableArray *) allTrackerStats;
- (NSMutableArray *) allTrackerStatsWithTransferName: (BOOL) includeTransferName;
- (NSArray *) allTrackersFlat; //used by GroupRules
- (BOOL) addTrackerToNewTier: (NSString *) tracker;
- (void) removeTrackersWithIdentifiers: (NSIndexSet *) removeIdentifiers;

View File

@ -583,7 +583,7 @@ int trashDataFile(const char * filename)
return fStat->leftUntilDone;
}
- (NSMutableArray *) allTrackerStats
- (NSMutableArray *) allTrackerStatsWithTransferName: (BOOL) includeTransferName
{
int count;
tr_tracker_stat * stats = tr_torrentTrackers(fHandle, &count);
@ -595,7 +595,12 @@ int trashDataFile(const char * filename)
{
if (stats[i].tier != prevTier)
{
[trackers addObject: [NSNumber numberWithInteger: stats[i].tier]];
NSString * tierString = [NSString stringWithFormat: NSLocalizedString(@"Tier %d", "Inspector -> tracker table"),
stats[i].tier];
if (includeTransferName)
tierString = [tierString stringByAppendingFormat: @" - %@", [self name]];
[trackers addObject: tierString];
prevTier = stats[i].tier;
}

View File

@ -52,9 +52,9 @@
for (NSUInteger i = [indexes firstIndex]; i != NSNotFound; i = [indexes indexGreaterThanIndex: i])
{
id item = [fTrackers objectAtIndex: i];
if ([item isKindOfClass: [NSNumber class]])
if (![item isKindOfClass: [TrackerNode class]])
{
for (++i; i < [fTrackers count] && ![[fTrackers objectAtIndex: i] isKindOfClass: [NSNumber class]]; ++i)
for (++i; i < [fTrackers count] && [[fTrackers objectAtIndex: i] isKindOfClass: [TrackerNode class]]; ++i)
[addresses addObject: [(TrackerNode *)[fTrackers objectAtIndex: i] fullAnnounceAddress]];
--i;
}
@ -141,11 +141,11 @@
if (rows.length > 0)
{
//determine what the first row color should be
if (![[fTrackers objectAtIndex: rows.location] isKindOfClass: [NSNumber class]])
if ([[fTrackers objectAtIndex: rows.location] isKindOfClass: [TrackerNode class]] || [self editedRow] == rows.location)
{
for (NSInteger i = rows.location-1; i>=0; i--)
{
if ([[fTrackers objectAtIndex: i] isKindOfClass: [NSNumber class]])
if (![[fTrackers objectAtIndex: i] isKindOfClass: [TrackerNode class]])
break;
start = !start;
}
@ -159,7 +159,7 @@
NSInteger i;
for (i = rows.location; i < NSMaxRange(rows); i++)
{
if ([[fTrackers objectAtIndex: i] isKindOfClass: [NSNumber class]])
if (![[fTrackers objectAtIndex: i] isKindOfClass: [TrackerNode class]] && [self editedRow] != i)
{
start = YES;
continue;