retain/release arrays instead of using mutable arrays, and file table only shows files when a single torrent is selected
This commit is contained in:
parent
bd318306e9
commit
348f35f505
|
@ -599,7 +599,7 @@ tr_peer_stat_t * tr_torrentPeers( tr_torrent_t * tor, int * peerCount )
|
||||||
{
|
{
|
||||||
tr_peer_t * peer;
|
tr_peer_t * peer;
|
||||||
struct in_addr * addr;
|
struct in_addr * addr;
|
||||||
int i = 0;
|
int i;
|
||||||
for( i = 0; i < tor->peerCount; i++ )
|
for( i = 0; i < tor->peerCount; i++ )
|
||||||
{
|
{
|
||||||
peer = tor->peers[i];
|
peer = tor->peers[i];
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
@interface InfoWindowController : NSWindowController
|
@interface InfoWindowController : NSWindowController
|
||||||
{
|
{
|
||||||
NSArray * fTorrents;
|
NSArray * fTorrents;
|
||||||
NSMutableArray * fPeers, * fFiles;
|
NSArray * fPeers, * fFiles;
|
||||||
NSImage * fAppIcon, * fDotGreen, * fDotRed;
|
NSImage * fAppIcon, * fDotGreen, * fDotRed;
|
||||||
|
|
||||||
IBOutlet NSTabView * fTabView;
|
IBOutlet NSTabView * fTabView;
|
||||||
|
|
|
@ -70,8 +70,6 @@
|
||||||
|
|
||||||
- (void) awakeFromNib
|
- (void) awakeFromNib
|
||||||
{
|
{
|
||||||
fPeers = [[NSMutableArray alloc] initWithCapacity: 75];
|
|
||||||
fFiles = [[NSMutableArray alloc] initWithCapacity: 15];
|
|
||||||
[fFileTable setDoubleAction: @selector(revealFile:)];
|
[fFileTable setDoubleAction: @selector(revealFile:)];
|
||||||
|
|
||||||
//window location and size
|
//window location and size
|
||||||
|
@ -101,7 +99,9 @@
|
||||||
- (void) dealloc
|
- (void) dealloc
|
||||||
{
|
{
|
||||||
[fTorrents release];
|
[fTorrents release];
|
||||||
|
if (fPeers)
|
||||||
[fPeers release];
|
[fPeers release];
|
||||||
|
if (fFiles)
|
||||||
[fFiles release];
|
[fFiles release];
|
||||||
|
|
||||||
[fAppIcon release];
|
[fAppIcon release];
|
||||||
|
@ -187,10 +187,21 @@
|
||||||
[fErrorMessageView setString: @""];
|
[fErrorMessageView setString: @""];
|
||||||
[fErrorMessageView setSelectable: NO];
|
[fErrorMessageView setSelectable: NO];
|
||||||
|
|
||||||
[fPeers removeAllObjects];
|
|
||||||
[fPeerTable reloadData];
|
|
||||||
|
|
||||||
[fPiecesView setTorrent: nil];
|
[fPiecesView setTorrent: nil];
|
||||||
|
|
||||||
|
if (fPeers)
|
||||||
|
{
|
||||||
|
[fPeers release];
|
||||||
|
fPeers = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fFiles)
|
||||||
|
{
|
||||||
|
[fFiles release];
|
||||||
|
fFiles = nil;
|
||||||
|
}
|
||||||
|
[fFileTableStatusField setStringValue: NSLocalizedString(@"info not available",
|
||||||
|
"Inspector -> Files tab -> bottom text (number of files)")];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -241,21 +252,12 @@
|
||||||
[fDataLocationField setSelectable: YES];
|
[fDataLocationField setSelectable: YES];
|
||||||
|
|
||||||
[fPiecesView setTorrent: torrent];
|
[fPiecesView setTorrent: torrent];
|
||||||
}
|
|
||||||
|
|
||||||
//update stats and settings
|
|
||||||
[self updateInfoStats];
|
|
||||||
[self updateInfoSettings];
|
|
||||||
|
|
||||||
//set file table
|
//set file table
|
||||||
[fFiles removeAllObjects];
|
[fFileTable deselectAll: nil];
|
||||||
|
if (fFiles)
|
||||||
if (numberSelected > 0)
|
[fFiles release];
|
||||||
{
|
fFiles = [[torrent fileList] retain];
|
||||||
Torrent * torrent;
|
|
||||||
NSEnumerator * enumerator = [fTorrents objectEnumerator];
|
|
||||||
while ((torrent = [enumerator nextObject]))
|
|
||||||
[fFiles addObjectsFromArray: [torrent fileList]];
|
|
||||||
|
|
||||||
if ([fFiles count] > 1)
|
if ([fFiles count] > 1)
|
||||||
[fFileTableStatusField setStringValue: [NSString stringWithFormat: NSLocalizedString(@"%d files",
|
[fFileTableStatusField setStringValue: [NSString stringWithFormat: NSLocalizedString(@"%d files",
|
||||||
|
@ -264,11 +266,12 @@
|
||||||
[fFileTableStatusField setStringValue: [NSString stringWithFormat: NSLocalizedString(@"%d file",
|
[fFileTableStatusField setStringValue: [NSString stringWithFormat: NSLocalizedString(@"%d file",
|
||||||
"Inspector -> Files tab -> bottom text (number of files)"), [fFiles count]]];
|
"Inspector -> Files tab -> bottom text (number of files)"), [fFiles count]]];
|
||||||
}
|
}
|
||||||
else
|
|
||||||
[fFileTableStatusField setStringValue: NSLocalizedString(@"info not available",
|
|
||||||
"Inspector -> Files tab -> bottom text (number of files)")];
|
|
||||||
|
|
||||||
[fFileTable deselectAll: nil];
|
//update stats and settings
|
||||||
|
[self updateInfoStats];
|
||||||
|
[self updateInfoSettings];
|
||||||
|
|
||||||
|
[fPeerTable reloadData];
|
||||||
[fFileTable reloadData];
|
[fFileTable reloadData];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,8 +365,9 @@
|
||||||
[fDownloadingFromField setStringValue: active ? [NSString stringWithInt: [torrent peersUploading]] : @""];
|
[fDownloadingFromField setStringValue: active ? [NSString stringWithInt: [torrent peersUploading]] : @""];
|
||||||
[fUploadingToField setStringValue: active ? [NSString stringWithInt: [torrent peersDownloading]] : @""];
|
[fUploadingToField setStringValue: active ? [NSString stringWithInt: [torrent peersDownloading]] : @""];
|
||||||
|
|
||||||
[fPeers setArray: [torrent peers]];
|
if (fPeers)
|
||||||
[fPeers sortUsingDescriptors: [self peerSortDescriptors]];
|
[fPeers release];
|
||||||
|
fPeers = [[[torrent peers] sortedArrayUsingDescriptors: [self peerSortDescriptors]] retain];
|
||||||
|
|
||||||
[fPeerTable reloadData];
|
[fPeerTable reloadData];
|
||||||
}
|
}
|
||||||
|
@ -580,9 +584,9 @@
|
||||||
- (int) numberOfRowsInTableView: (NSTableView *) tableView
|
- (int) numberOfRowsInTableView: (NSTableView *) tableView
|
||||||
{
|
{
|
||||||
if (tableView == fPeerTable)
|
if (tableView == fPeerTable)
|
||||||
return [fPeers count];
|
return fPeers ? [fPeers count] : 0;
|
||||||
else
|
else
|
||||||
return [fFiles count];
|
return fFiles ? [fFiles count] : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) column row: (int) row
|
- (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) column row: (int) row
|
||||||
|
@ -615,7 +619,7 @@
|
||||||
else if ([ident isEqualToString: @"Size"])
|
else if ([ident isEqualToString: @"Size"])
|
||||||
return [NSString stringForFileSize: [[file objectForKey: @"Size"] unsignedLongLongValue]];
|
return [NSString stringForFileSize: [[file objectForKey: @"Size"] unsignedLongLongValue]];
|
||||||
else
|
else
|
||||||
return [[file objectForKey: @"Name"] lastPathComponent];
|
return [file objectForKey: @"Name"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -623,10 +627,15 @@
|
||||||
{
|
{
|
||||||
if (tableView == fPeerTable)
|
if (tableView == fPeerTable)
|
||||||
{
|
{
|
||||||
[fPeers sortUsingDescriptors: [self peerSortDescriptors]];
|
if (fPeers)
|
||||||
|
{
|
||||||
|
NSArray * oldPeers = fPeers;
|
||||||
|
fPeers = [[fPeers sortedArrayUsingDescriptors: [self peerSortDescriptors]] retain];
|
||||||
|
[oldPeers release];
|
||||||
[tableView reloadData];
|
[tableView reloadData];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL) tableView: (NSTableView *) tableView shouldSelectRow:(int) row
|
- (BOOL) tableView: (NSTableView *) tableView shouldSelectRow:(int) row
|
||||||
{
|
{
|
||||||
|
@ -689,11 +698,12 @@
|
||||||
|
|
||||||
- (void) revealFile: (id) sender
|
- (void) revealFile: (id) sender
|
||||||
{
|
{
|
||||||
NSIndexSet * indexSet = [fFileTable selectedRowIndexes];
|
Torrent * torrent = [fTorrents objectAtIndex: 0];
|
||||||
unsigned int i;
|
NSEnumerator * enumerator = [[fFiles objectsAtIndexes: [fFileTable selectedRowIndexes]] objectEnumerator];
|
||||||
for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i])
|
NSDictionary * file;
|
||||||
[[NSWorkspace sharedWorkspace] selectFile: [[fFiles objectAtIndex: i] objectForKey: @"Name"]
|
while ((file = [enumerator nextObject]))
|
||||||
inFileViewerRootedAtPath: nil];
|
[[NSWorkspace sharedWorkspace] selectFile: [[torrent downloadFolder]
|
||||||
|
stringByAppendingPathComponent: [file objectForKey: @"Name"]] inFileViewerRootedAtPath: nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLimitCustom: (id) sender
|
- (void) setLimitCustom: (id) sender
|
||||||
|
|
|
@ -1074,7 +1074,7 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
|
||||||
{
|
{
|
||||||
file = fInfo->files[i];
|
file = fInfo->files[i];
|
||||||
[files addObject: [NSDictionary dictionaryWithObjectsAndKeys:
|
[files addObject: [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
[[self downloadFolder] stringByAppendingPathComponent: [NSString stringWithUTF8String: file.name]], @"Name",
|
[NSString stringWithUTF8String: file.name], @"Name",
|
||||||
[NSNumber numberWithUnsignedLongLong: file.length], @"Size", nil]];
|
[NSNumber numberWithUnsignedLongLong: file.length], @"Size", nil]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue