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:
Mitchell Livingston 2007-01-17 02:43:07 +00:00
parent bd318306e9
commit 348f35f505
4 changed files with 51 additions and 41 deletions

View File

@ -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];

View File

@ -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;

View File

@ -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,8 +99,10 @@
- (void) dealloc - (void) dealloc
{ {
[fTorrents release]; [fTorrents release];
[fPeers release]; if (fPeers)
[fFiles release]; [fPeers release];
if (fFiles)
[fFiles release];
[fAppIcon release]; [fAppIcon release];
[super dealloc]; [super dealloc];
@ -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];
}
//set file table
//update stats and settings [fFileTable deselectAll: nil];
[self updateInfoStats]; if (fFiles)
[self updateInfoSettings]; [fFiles release];
fFiles = [[torrent fileList] retain];
//set file table
[fFiles removeAllObjects];
if (numberSelected > 0)
{
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,8 +627,13 @@
{ {
if (tableView == fPeerTable) if (tableView == fPeerTable)
{ {
[fPeers sortUsingDescriptors: [self peerSortDescriptors]]; if (fPeers)
[tableView reloadData]; {
NSArray * oldPeers = fPeers;
fPeers = [[fPeers sortedArrayUsingDescriptors: [self peerSortDescriptors]] retain];
[oldPeers release];
[tableView reloadData];
}
} }
} }
@ -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

View File

@ -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]];
} }