diff --git a/libtransmission/transmission.c b/libtransmission/transmission.c index e4a42261a..eadf351ec 100644 --- a/libtransmission/transmission.c +++ b/libtransmission/transmission.c @@ -599,7 +599,7 @@ tr_peer_stat_t * tr_torrentPeers( tr_torrent_t * tor, int * peerCount ) { tr_peer_t * peer; struct in_addr * addr; - int i = 0; + int i; for( i = 0; i < tor->peerCount; i++ ) { peer = tor->peers[i]; diff --git a/macosx/InfoWindowController.h b/macosx/InfoWindowController.h index e10c48e85..5e670f826 100644 --- a/macosx/InfoWindowController.h +++ b/macosx/InfoWindowController.h @@ -30,7 +30,7 @@ @interface InfoWindowController : NSWindowController { NSArray * fTorrents; - NSMutableArray * fPeers, * fFiles; + NSArray * fPeers, * fFiles; NSImage * fAppIcon, * fDotGreen, * fDotRed; IBOutlet NSTabView * fTabView; diff --git a/macosx/InfoWindowController.m b/macosx/InfoWindowController.m index b8cbb3a87..fab699e02 100644 --- a/macosx/InfoWindowController.m +++ b/macosx/InfoWindowController.m @@ -70,8 +70,6 @@ - (void) awakeFromNib { - fPeers = [[NSMutableArray alloc] initWithCapacity: 75]; - fFiles = [[NSMutableArray alloc] initWithCapacity: 15]; [fFileTable setDoubleAction: @selector(revealFile:)]; //window location and size @@ -101,8 +99,10 @@ - (void) dealloc { [fTorrents release]; - [fPeers release]; - [fFiles release]; + if (fPeers) + [fPeers release]; + if (fFiles) + [fFiles release]; [fAppIcon release]; [super dealloc]; @@ -187,10 +187,21 @@ [fErrorMessageView setString: @""]; [fErrorMessageView setSelectable: NO]; - [fPeers removeAllObjects]; - [fPeerTable reloadData]; - [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 { @@ -241,21 +252,12 @@ [fDataLocationField setSelectable: YES]; [fPiecesView setTorrent: torrent]; - } - - //update stats and settings - [self updateInfoStats]; - [self updateInfoSettings]; - - //set file table - [fFiles removeAllObjects]; - - if (numberSelected > 0) - { - Torrent * torrent; - NSEnumerator * enumerator = [fTorrents objectEnumerator]; - while ((torrent = [enumerator nextObject])) - [fFiles addObjectsFromArray: [torrent fileList]]; + + //set file table + [fFileTable deselectAll: nil]; + if (fFiles) + [fFiles release]; + fFiles = [[torrent fileList] retain]; if ([fFiles count] > 1) [fFileTableStatusField setStringValue: [NSString stringWithFormat: NSLocalizedString(@"%d files", @@ -264,11 +266,12 @@ [fFileTableStatusField setStringValue: [NSString stringWithFormat: NSLocalizedString(@"%d file", "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]; } @@ -362,8 +365,9 @@ [fDownloadingFromField setStringValue: active ? [NSString stringWithInt: [torrent peersUploading]] : @""]; [fUploadingToField setStringValue: active ? [NSString stringWithInt: [torrent peersDownloading]] : @""]; - [fPeers setArray: [torrent peers]]; - [fPeers sortUsingDescriptors: [self peerSortDescriptors]]; + if (fPeers) + [fPeers release]; + fPeers = [[[torrent peers] sortedArrayUsingDescriptors: [self peerSortDescriptors]] retain]; [fPeerTable reloadData]; } @@ -580,9 +584,9 @@ - (int) numberOfRowsInTableView: (NSTableView *) tableView { if (tableView == fPeerTable) - return [fPeers count]; + return fPeers ? [fPeers count] : 0; else - return [fFiles count]; + return fFiles ? [fFiles count] : 0; } - (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) column row: (int) row @@ -615,7 +619,7 @@ else if ([ident isEqualToString: @"Size"]) return [NSString stringForFileSize: [[file objectForKey: @"Size"] unsignedLongLongValue]]; else - return [[file objectForKey: @"Name"] lastPathComponent]; + return [file objectForKey: @"Name"]; } } @@ -623,8 +627,13 @@ { if (tableView == fPeerTable) { - [fPeers sortUsingDescriptors: [self peerSortDescriptors]]; - [tableView reloadData]; + if (fPeers) + { + NSArray * oldPeers = fPeers; + fPeers = [[fPeers sortedArrayUsingDescriptors: [self peerSortDescriptors]] retain]; + [oldPeers release]; + [tableView reloadData]; + } } } @@ -689,11 +698,12 @@ - (void) revealFile: (id) sender { - NSIndexSet * indexSet = [fFileTable selectedRowIndexes]; - unsigned int i; - for (i = [indexSet firstIndex]; i != NSNotFound; i = [indexSet indexGreaterThanIndex: i]) - [[NSWorkspace sharedWorkspace] selectFile: [[fFiles objectAtIndex: i] objectForKey: @"Name"] - inFileViewerRootedAtPath: nil]; + Torrent * torrent = [fTorrents objectAtIndex: 0]; + NSEnumerator * enumerator = [[fFiles objectsAtIndexes: [fFileTable selectedRowIndexes]] objectEnumerator]; + NSDictionary * file; + while ((file = [enumerator nextObject])) + [[NSWorkspace sharedWorkspace] selectFile: [[torrent downloadFolder] + stringByAppendingPathComponent: [file objectForKey: @"Name"]] inFileViewerRootedAtPath: nil]; } - (void) setLimitCustom: (id) sender diff --git a/macosx/Torrent.m b/macosx/Torrent.m index 4ee5154b3..9db8aa554 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -1074,7 +1074,7 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 { file = fInfo->files[i]; [files addObject: [NSDictionary dictionaryWithObjectsAndKeys: - [[self downloadFolder] stringByAppendingPathComponent: [NSString stringWithUTF8String: file.name]], @"Name", + [NSString stringWithUTF8String: file.name], @"Name", [NSNumber numberWithUnsignedLongLong: file.length], @"Size", nil]]; }