add the ability to set per-torrent number of connections to the inspector

This commit is contained in:
Mitchell Livingston 2007-12-22 05:21:25 +00:00
parent 4400406ba0
commit b39e5e3bfd
5 changed files with 4831 additions and 4492 deletions

File diff suppressed because it is too large Load Diff

View File

@ -61,7 +61,7 @@
* fFilePriorityNormal, * fFilePriorityHigh, * fFilePriorityLow;
IBOutlet NSPopUpButton * fRatioPopUp, * fUploadLimitPopUp, * fDownloadLimitPopUp;
IBOutlet NSTextField * fUploadLimitField, * fDownloadLimitField, * fRatioLimitField,
IBOutlet NSTextField * fUploadLimitField, * fDownloadLimitField, * fRatioLimitField, * fPeersConnectField,
* fUploadLimitLabel, * fDownloadLimitLabel;
IBOutlet NSButton * fPexCheck;
}
@ -94,4 +94,6 @@
- (void) setPex: (id) sender;
- (void) setPeersConnectLimit: (id) sender;
@end

View File

@ -243,6 +243,9 @@ typedef enum
[fPexCheck setEnabled: NO];
[fPexCheck setState: NSOffState];
[fPexCheck setToolTip: nil];
[fPeersConnectField setEnabled: NO];
[fPexCheck setStringValue: @""];
}
[fFileOutline setTorrent: nil];
@ -539,6 +542,25 @@ typedef enum
[fRatioLimitField setFloatValue: ratioLimit];
else
[fRatioLimitField setStringValue: @""];
//get peer info
enumerator = [fTorrents objectEnumerator];
torrent = [enumerator nextObject]; //first torrent
int maxPeers = [torrent maxPeerConnect];
while ((torrent = [enumerator nextObject]) && maxPeers != INVALID)
{
if (/*maxPeers != INVALID &&*/ maxPeers != [torrent maxPeerConnect])
maxPeers = INVALID;
}
//set peer view
[fPeersConnectField setEnabled: YES];
if (maxPeers != INVALID)
[fPeersConnectField setIntValue: maxPeers];
else
[fPeersConnectField setStringValue: @""];
}
- (BOOL) validateMenuItem: (NSMenuItem *) menuItem
@ -1219,7 +1241,7 @@ typedef enum
if (![[sender stringValue] isEqualToString: [NSString stringWithFormat: @"%.2f", ratioLimit]] || ratioLimit < 0)
{
NSBeep();
float ratioLimit = [[enumerator nextObject] ratioLimit]; //use first torrent
ratioLimit = [[enumerator nextObject] ratioLimit]; //use first torrent
while ((torrent = [enumerator nextObject]))
if (ratioLimit != [torrent ratioLimit])
{
@ -1234,8 +1256,6 @@ typedef enum
while ((torrent = [enumerator nextObject]))
[torrent setRatioLimit: ratioLimit];
}
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateUI" object: nil];
}
- (void) setPex: (id) sender
@ -1254,6 +1274,35 @@ typedef enum
[torrent setPex: state == NSOnState];
}
#warning not saving between launches
- (void) setPeersConnectLimit: (id) sender
{
Torrent * torrent;
NSEnumerator * enumerator = [fTorrents objectEnumerator];
int limit = [sender intValue];
if (![[sender stringValue] isEqualToString: [NSString stringWithFormat: @"%i", limit]] || limit <= 0)
{
NSBeep();
limit = [[enumerator nextObject] maxPeerConnect]; //use first torrent
while ((torrent = [enumerator nextObject]))
if (limit != [torrent maxPeerConnect])
{
[sender setStringValue: @""];
return;
}
[sender setIntValue: limit];
}
else
{
while ((torrent = [enumerator nextObject]))
[torrent setMaxPeerConnect: limit];
}
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateUI" object: nil];
}
@end
@implementation InfoWindowController (Private)

View File

@ -112,6 +112,9 @@ typedef enum
- (int) speedLimit: (BOOL) upload;
- (void) setSpeedLimit: (int) limit upload: (BOOL) upload;
- (void) setMaxPeerConnect: (uint16_t) count;
- (uint16_t) maxPeerConnect;
- (void) setWaitToStart: (BOOL) wait;
- (BOOL) waitingToStart;

View File

@ -374,6 +374,17 @@ void completenessChangeCallback(tr_torrent * torrent, cp_status_t status, void *
tr_torrentSetSpeedLimit(fHandle, upload ? TR_UP : TR_DOWN, limit);
}
- (void) setMaxPeerConnect: (uint16_t) count
{
if (count > 0)
tr_torrentSetMaxConnectedPeers(fHandle, count);
}
- (uint16_t) maxPeerConnect
{
return tr_torrentGetMaxConnectedPeers(fHandle);
}
- (void) setWaitToStart: (BOOL) wait
{
fWaitToStart = wait;