#2860 Display trackers for all selected torrents in the inspector
This commit is contained in:
parent
7519f51fe9
commit
94517feeeb
|
@ -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];
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue