diff --git a/macosx/Defaults.plist b/macosx/Defaults.plist index a8d7df4ba..d1516edf9 100644 --- a/macosx/Defaults.plist +++ b/macosx/Defaults.plist @@ -18,6 +18,8 @@ 9090 CheckDownload + CheckDownloadTorrent + CheckQuit CheckQuitDownloading @@ -28,6 +30,8 @@ CheckUpload + CheckUploadTorrent + DeleteOriginalTorrent DownloadChoice @@ -36,6 +40,8 @@ ~/Desktop DownloadLimit 100 + DownloadLimitTorrent + 50 DownloadSound Glass Filter @@ -102,6 +108,8 @@ Daily UploadLimit 20 + UploadLimitTorrent + 20 UseAdvancedBar UseIncompleteDownloadFolder diff --git a/macosx/English.lproj/InfoWindow.nib/classes.nib b/macosx/English.lproj/InfoWindow.nib/classes.nib index 9399d8d0c..047d71e9e 100644 --- a/macosx/English.lproj/InfoWindow.nib/classes.nib +++ b/macosx/English.lproj/InfoWindow.nib/classes.nib @@ -13,8 +13,10 @@ revealFile = id; revealTorrentFile = id; setLimitCheck = id; - setRatioCheck = id; + setLimitCustom = id; + setRatioCustom = id; setRatioLimit = id; + setRatioSetting = id; setSpeedLimit = id; }; CLASS = InfoWindowController; @@ -38,13 +40,15 @@ fHashField = NSTextField; fImageView = NSImageView; fLeechersField = NSTextField; + fLimitCustomCheck = NSButton; fNameField = NSTextField; fPeerTable = NSTableView; fPiecesField = NSTextField; fPiecesView = PiecesView; + fRatioCustomCheck = NSButton; fRatioField = NSTextField; fRatioLimitField = NSTextField; - fRatioMatrix = NSMatrix; + fRatioStopCheck = NSButton; fRevealDataButton = NSButton; fRevealTorrentButton = NSButton; fSecureField = NSTextField; diff --git a/macosx/English.lproj/InfoWindow.nib/info.nib b/macosx/English.lproj/InfoWindow.nib/info.nib index 75fb3ace8..a8813fce4 100644 --- a/macosx/English.lproj/InfoWindow.nib/info.nib +++ b/macosx/English.lproj/InfoWindow.nib/info.nib @@ -3,7 +3,7 @@ IBDocumentLocation - 69 61 356 240 0 0 1152 842 + 34 67 356 240 0 0 1152 842 IBEditorPositions 549 diff --git a/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib b/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib index e16bbed2d..0a27964d2 100644 Binary files a/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib and b/macosx/English.lproj/InfoWindow.nib/keyedobjects.nib differ diff --git a/macosx/English.lproj/PrefsWindow.nib/classes.nib b/macosx/English.lproj/PrefsWindow.nib/classes.nib index de479a5a4..e9fd23f3c 100644 --- a/macosx/English.lproj/PrefsWindow.nib/classes.nib +++ b/macosx/English.lproj/PrefsWindow.nib/classes.nib @@ -6,6 +6,7 @@ { ACTIONS = { applySpeedSettings = id; + applyTorrentSpeedSetting = id; folderSheetShow = id; helpForNetwork = id; importFolderSheetShow = id; diff --git a/macosx/English.lproj/PrefsWindow.nib/info.nib b/macosx/English.lproj/PrefsWindow.nib/info.nib index 6406ab26b..92276f0ee 100644 --- a/macosx/English.lproj/PrefsWindow.nib/info.nib +++ b/macosx/English.lproj/PrefsWindow.nib/info.nib @@ -3,17 +3,17 @@ IBDocumentLocation - 19 87 356 240 0 0 1152 842 + 19 79 356 240 0 0 1152 842 IBEditorPositions 153 - 235 384 563 267 0 0 1152 842 + 180 392 571 335 0 0 1152 842 28 - 294 434 563 290 0 0 1152 842 + 99 386 571 290 0 0 1152 842 41 - 161 288 563 305 0 0 1152 842 + 290 426 571 305 0 0 1152 842 66 - 294 507 563 144 0 0 1152 842 + 139 501 571 144 0 0 1152 842 IBFramework Version 446.1 @@ -24,7 +24,6 @@ IBOpenObjects 153 - 41 IBSystem Version 8L127 diff --git a/macosx/English.lproj/PrefsWindow.nib/keyedobjects.nib b/macosx/English.lproj/PrefsWindow.nib/keyedobjects.nib index ca4348f0d..9dd7884a3 100644 Binary files a/macosx/English.lproj/PrefsWindow.nib/keyedobjects.nib and b/macosx/English.lproj/PrefsWindow.nib/keyedobjects.nib differ diff --git a/macosx/InfoWindowController.h b/macosx/InfoWindowController.h index 6d5b8eff3..63120c582 100644 --- a/macosx/InfoWindowController.h +++ b/macosx/InfoWindowController.h @@ -56,8 +56,8 @@ IBOutlet NSTableView * fFileTable; IBOutlet NSTextField * fFileTableStatusField; - IBOutlet NSButton * fUploadLimitCheck, * fDownloadLimitCheck; - IBOutlet NSMatrix * fRatioMatrix; + IBOutlet NSButton * fRatioCustomCheck, * fRatioStopCheck, + * fLimitCustomCheck, * fUploadLimitCheck, * fDownloadLimitCheck; IBOutlet NSTextField * fUploadLimitField, * fDownloadLimitField, * fRatioLimitField; } @@ -71,10 +71,12 @@ - (void) revealDataFile: (id) sender; - (void) revealFile: (id) sender; +- (void) setLimitCustom: (id) sender; - (void) setLimitCheck: (id) sender; - (void) setSpeedLimit: (id) sender; -- (void) setRatioCheck: (id) sender; +- (void) setRatioCustom: (id) sender; +- (void) setRatioSetting: (id) sender; - (void) setRatioLimit: (id) sender; @end diff --git a/macosx/InfoWindowController.m b/macosx/InfoWindowController.m index ebf371cb6..7f46d509c 100644 --- a/macosx/InfoWindowController.m +++ b/macosx/InfoWindowController.m @@ -25,10 +25,6 @@ #import "InfoWindowController.h" #import "StringAdditions.h" -#define RATIO_GLOBAL_TAG 0 -#define RATIO_NO_CHECK_TAG 1 -#define RATIO_CHECK_TAG 2 - #define MIN_WINDOW_WIDTH 300 #define MAX_WINDOW_WIDTH 5000 @@ -43,7 +39,7 @@ #define TAB_ACTIVITY_HEIGHT 170.0 #define TAB_PEERS_HEIGHT 268.0 #define TAB_FILES_HEIGHT 268.0 -#define TAB_OPTIONS_HEIGHT 147.0 +#define TAB_OPTIONS_HEIGHT 157.0 #define INVALID -99 @@ -384,15 +380,20 @@ NSEnumerator * enumerator = [fTorrents objectEnumerator]; torrent = [enumerator nextObject]; //first torrent - int checkUpload = [torrent checkUpload] ? 1 : 0, + int limitCustom = [torrent customLimitSetting] ? 1 : 0, + checkUpload = [torrent checkUpload] ? 1 : 0, checkDownload = [torrent checkDownload] ? 1 : 0, uploadLimit = [torrent uploadLimit], downloadLimit = [torrent downloadLimit]; - while ((checkUpload != INVALID || uploadLimit != INVALID + while ((limitCustom != INVALID + || checkUpload != INVALID || uploadLimit != INVALID || checkDownload != INVALID || downloadLimit != INVALID) && (torrent = [enumerator nextObject])) { + if (limitCustom != INVALID && limitCustom != ([torrent customLimitSetting] ? 1 : 0)) + limitCustom = INVALID; + if (checkUpload != INVALID && checkUpload != ([torrent checkUpload] ? 1 : 0)) checkUpload = INVALID; @@ -406,23 +407,25 @@ downloadLimit = INVALID; } - [fUploadLimitCheck setEnabled: YES]; - [fDownloadLimitCheck setEnabled: YES]; - - [fUploadLimitField setEnabled: checkUpload != 0]; - [fDownloadLimitField setEnabled: checkDownload != 0]; + [fLimitCustomCheck setEnabled: YES]; + [fLimitCustomCheck setState: limitCustom == INVALID ? NSMixedState + : (limitCustom == 1 ? NSOnState : NSOffState)]; + [fUploadLimitCheck setEnabled: limitCustom == 1]; [fUploadLimitCheck setState: checkUpload == INVALID ? NSMixedState : (checkUpload == 1 ? NSOnState : NSOffState)]; + [fDownloadLimitCheck setEnabled: limitCustom == 1]; + [fDownloadLimitCheck setState: checkDownload == INVALID ? NSMixedState + : (checkDownload == 1 ? NSOnState : NSOffState)]; + + [fUploadLimitField setEnabled: limitCustom == 1 && checkUpload == 1]; if (uploadLimit != INVALID) [fUploadLimitField setIntValue: uploadLimit]; else [fUploadLimitField setStringValue: @""]; - - [fDownloadLimitCheck setState: checkDownload == INVALID ? NSMixedState - : (checkDownload == 1 ? NSOnState : NSOffState)]; - + + [fDownloadLimitField setEnabled: limitCustom == 1 && checkDownload == 1]; if (downloadLimit != INVALID) [fDownloadLimitField setIntValue: downloadLimit]; else @@ -432,38 +435,32 @@ enumerator = [fTorrents objectEnumerator]; torrent = [enumerator nextObject]; //first torrent - int ratioSetting = [torrent stopRatioSetting]; + int ratioCustom = [torrent customRatioSetting] ? 1 : 0, + ratioStop = [torrent shouldStopAtRatio]; float ratioLimit = [torrent ratioLimit]; - while ((ratioSetting != INVALID || ratioLimit != INVALID) + while ((ratioCustom != INVALID || ratioStop != INVALID || ratioLimit != INVALID) && (torrent = [enumerator nextObject])) { - if (ratioSetting != INVALID && ratioSetting != [torrent stopRatioSetting]) - ratioSetting = INVALID; + if (ratioCustom != INVALID && ratioCustom != ([torrent customRatioSetting] ? 1 : 0)) + ratioCustom = INVALID; + + if (ratioStop != INVALID && ratioStop != ([torrent shouldStopAtRatio] ? 1 : 0)) + ratioStop = INVALID; if (ratioLimit != INVALID && ratioLimit != [torrent ratioLimit]) ratioLimit = INVALID; } - [fRatioMatrix setEnabled: YES]; + [fRatioCustomCheck setEnabled: YES]; + [fRatioCustomCheck setState: ratioCustom == INVALID ? NSMixedState + : (ratioCustom == 1 ? NSOnState : NSOffState)]; - if (ratioSetting == RATIO_CHECK) - { - [fRatioMatrix selectCellWithTag: RATIO_CHECK_TAG]; - [fRatioLimitField setEnabled: YES]; - } - else - { - if (ratioSetting == RATIO_NO_CHECK) - [fRatioMatrix selectCellWithTag: RATIO_NO_CHECK_TAG]; - else if (ratioSetting == RATIO_GLOBAL) - [fRatioMatrix selectCellWithTag: RATIO_GLOBAL_TAG]; - else - [fRatioMatrix deselectAllCells]; - - [fRatioLimitField setEnabled: NO]; - } + [fRatioStopCheck setEnabled: ratioCustom == 1]; + [fRatioStopCheck setState: ratioStop == INVALID ? NSMixedState + : (ratioStop == 1 ? NSOnState : NSOffState)]; + [fRatioLimitField setEnabled: ratioCustom == 1 && ratioStop == 1]; if (ratioLimit != INVALID) [fRatioLimitField setFloatValue: ratioLimit]; else @@ -471,21 +468,25 @@ } else { - [fRatioMatrix deselectAllCells]; - [fRatioMatrix setEnabled: NO]; + [fLimitCustomCheck setEnabled: NO]; + [fLimitCustomCheck setState: NSOffState]; - [fRatioLimitField setEnabled: NO]; - [fRatioLimitField setStringValue: @""]; - - [fUploadLimitCheck setState: NSOffState]; [fUploadLimitCheck setEnabled: NO]; + [fUploadLimitCheck setState: NSOffState]; [fUploadLimitField setEnabled: NO]; [fUploadLimitField setStringValue: @""]; - [fDownloadLimitCheck setState: NSOffState]; [fDownloadLimitCheck setEnabled: NO]; + [fDownloadLimitCheck setState: NSOffState]; [fDownloadLimitField setEnabled: NO]; [fDownloadLimitField setStringValue: @""]; + + [fRatioCustomCheck setEnabled: NO]; + [fRatioCustomCheck setState: NSOffState]; + [fRatioStopCheck setEnabled: NO]; + [fRatioStopCheck setState: NSOffState]; + [fRatioLimitField setEnabled: NO]; + [fRatioLimitField setStringValue: @""]; } [self updateInfoStats]; @@ -691,6 +692,24 @@ inFileViewerRootedAtPath: nil]; } +- (void) setLimitCustom: (id) sender +{ + BOOL custom = [sender state] != NSOffState; + if (custom) + [sender setState: NSOnState]; + + Torrent * torrent; + NSEnumerator * enumerator = [fTorrents objectEnumerator]; + while ((torrent = [enumerator nextObject])) + [torrent setCustomLimitSetting: custom]; + + [fUploadLimitCheck setEnabled: custom]; + [fUploadLimitField setEnabled: custom && [fUploadLimitCheck state] == NSOnState]; + + [fDownloadLimitCheck setEnabled: custom]; + [fDownloadLimitField setEnabled: custom && [fDownloadLimitCheck state] == NSOnState]; +} + - (void) setLimitCheck: (id) sender { BOOL upload = sender == fUploadLimitCheck, @@ -706,9 +725,6 @@ NSTextField * field = upload ? fUploadLimitField : fDownloadLimitField; - if (![[field stringValue] isEqualToString: @""]) - [self setSpeedLimit: field]; - [field setEnabled: limit]; } @@ -743,23 +759,33 @@ } } -- (void) setRatioCheck: (id) sender +- (void) setRatioCustom: (id) sender { - int ratioSetting, tag = [[fRatioMatrix selectedCell] tag]; - if (tag == RATIO_CHECK_TAG) - ratioSetting = RATIO_CHECK; - else if (tag == RATIO_NO_CHECK_TAG) - ratioSetting = RATIO_NO_CHECK; - else - ratioSetting = RATIO_GLOBAL; + BOOL custom = [sender state] != NSOffState; + if (custom) + [sender setState: NSOnState]; Torrent * torrent; NSEnumerator * enumerator = [fTorrents objectEnumerator]; while ((torrent = [enumerator nextObject])) - [torrent setStopRatioSetting: ratioSetting]; + [torrent setCustomRatioSetting: custom]; - [self setRatioLimit: fRatioLimitField]; - [fRatioLimitField setEnabled: tag == RATIO_CHECK_TAG]; + [fRatioStopCheck setEnabled: custom]; + [fRatioLimitField setEnabled: custom && [fRatioStopCheck state] == NSOnState]; +} + +- (void) setRatioSetting: (id) sender +{ + BOOL enabled = [sender state] != NSOffState; + if (enabled) + [sender setState: NSOnState]; + + Torrent * torrent; + NSEnumerator * enumerator = [fTorrents objectEnumerator]; + while ((torrent = [enumerator nextObject])) + [torrent setShouldStopAtRatio: enabled]; + + [fRatioLimitField setEnabled: enabled && [fRatioCustomCheck state] == NSOnState]; } - (void) setRatioLimit: (id) sender diff --git a/macosx/PrefsController.h b/macosx/PrefsController.h index a878e713a..32ab2bffd 100644 --- a/macosx/PrefsController.h +++ b/macosx/PrefsController.h @@ -79,6 +79,7 @@ - (void) setAutoSpeedLimit: (id) sender; - (void) applySpeedSettings: (id) sender; +- (void) applyTorrentSpeedSetting: (id) sender; - (void) setAutoImport: (id) sender; - (void) importFolderSheetShow: (id) sender; diff --git a/macosx/PrefsController.m b/macosx/PrefsController.m index a3d6ccd0e..f6dce2edd 100644 --- a/macosx/PrefsController.m +++ b/macosx/PrefsController.m @@ -313,6 +313,11 @@ } } +- (void) applyTorrentSpeedSetting: (id) sender +{ + [[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateSpeedSetting" object: self]; +} + - (void) setAutoSpeedLimit: (id) sender { [[NSNotificationCenter defaultCenter] postNotificationName: @"AutoSpeedLimitChange" object: self]; diff --git a/macosx/Torrent.h b/macosx/Torrent.h index c86651a06..4dc240e98 100644 --- a/macosx/Torrent.h +++ b/macosx/Torrent.h @@ -25,10 +25,6 @@ #import #import -#define RATIO_CHECK 1 -#define RATIO_GLOBAL -1 -#define RATIO_NO_CHECK 0 - @interface Torrent : NSObject { tr_handle_t * fLib; @@ -51,9 +47,11 @@ NSMutableString * fNameString, * fProgressString, * fStatusString, * fShortStatusString, * fRemainingTimeString; - int fUploadLimit, fDownloadLimit, fStopRatioSetting; + int fUploadLimit, fDownloadLimit; float fRatioLimit; - BOOL fCheckUpload, fCheckDownload, fFinishedSeeding, fWaitToStart, fError; + BOOL fLimitCustom, fCheckUpload, fCheckDownload, + fRatioCustom, fShouldStopAtRatio, + fFinishedSeeding, fWaitToStart, fError; int fOrderValue; @@ -85,19 +83,25 @@ - (NSDate *) announceDate; - (float) ratio; -- (int) stopRatioSetting; -- (void) setStopRatioSetting: (int) setting; +- (BOOL) customRatioSetting; +- (void) setCustomRatioSetting: (BOOL) setting; +- (BOOL) shouldStopAtRatio; +- (void) setShouldStopAtRatio: (BOOL) setting; - (float) ratioLimit; - (void) setRatioLimit: (float) limit; -- (void) setLimitUpload: (BOOL) limit; -- (void) setUploadLimit: (int) limit; -- (void) setLimitDownload: (BOOL) limit; -- (void) setDownloadLimit: (int) limit; -- (BOOL) checkUpload; -- (int) uploadLimit; -- (BOOL) checkDownload; -- (int) downloadLimit; +- (BOOL) checkUpload; +- (void) setLimitUpload: (BOOL) limit; +- (int) uploadLimit; +- (void) setUploadLimit: (int) limit; +- (BOOL) checkDownload; +- (void) setLimitDownload: (BOOL) limit; +- (int) downloadLimit; +- (void) setDownloadLimit: (int) limit; + +- (BOOL) customLimitSetting; +- (void) setCustomLimitSetting: (BOOL) setting; +- (void) updateSpeedSetting: (NSNotification *) notification; - (void) setWaitToStart: (BOOL) wait; - (BOOL) waitingToStart; diff --git a/macosx/Torrent.m b/macosx/Torrent.m index 09b28240b..d7d1e63c8 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -34,8 +34,11 @@ - (id) initWithHash: (NSString *) hashString path: (NSString *) path lib: (tr_handle_t *) lib publicTorrent: (NSNumber *) publicTorrent - date: (NSDate *) date stopRatioSetting: (NSNumber *) stopRatioSetting + date: (NSDate *) date + stopRatioCustom: (NSNumber *) ratioCustom + shouldStopAtRatio: (NSNumber *) shouldStopAtRatio ratioLimit: (NSNumber *) ratioLimit + limitSpeedCustom: (NSNumber *) limitCustom checkUpload: (NSNumber *) checkUpload uploadLimit: (NSNumber *) uploadLimit checkDownload: (NSNumber *) checkDownload downloadLimit: (NSNumber *) downloadLimit waitToStart: (NSNumber *) waitToStart orderValue: (NSNumber *) orderValue; @@ -64,7 +67,9 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 { self = [self initWithHash: nil path: path lib: lib publicTorrent: delete ? [NSNumber numberWithBool: NO] : nil - date: nil stopRatioSetting: nil ratioLimit: nil + date: nil + stopRatioCustom: nil shouldStopAtRatio: nil ratioLimit: nil + limitSpeedCustom: nil checkUpload: nil uploadLimit: nil checkDownload: nil downloadLimit: nil waitToStart: nil orderValue: nil]; @@ -86,8 +91,10 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 path: [history objectForKey: @"TorrentPath"] lib: lib publicTorrent: [history objectForKey: @"PublicCopy"] date: [history objectForKey: @"Date"] - stopRatioSetting: [history objectForKey: @"StopRatioSetting"] + stopRatioCustom: [history objectForKey: @"StopRatioCustom"] + shouldStopAtRatio: [history objectForKey: @"ShouldStopAtRatio"] ratioLimit: [history objectForKey: @"RatioLimit"] + limitSpeedCustom: [history objectForKey: @"LimitSpeedCustom"] checkUpload: [history objectForKey: @"CheckUpload"] uploadLimit: [history objectForKey: @"UploadLimit"] checkDownload: [history objectForKey: @"CheckDownload"] @@ -139,8 +146,10 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 [NSNumber numberWithBool: fUseIncompleteFolder], @"UseIncompleteFolder", [self isActive] ? @"NO" : @"YES", @"Paused", [self date], @"Date", - [NSNumber numberWithInt: fStopRatioSetting], @"StopRatioSetting", + [NSNumber numberWithBool: fRatioCustom], @"StopRatioCustom", + [NSNumber numberWithBool: fShouldStopAtRatio], @"ShouldStopAtRatio", [NSNumber numberWithFloat: fRatioLimit], @"RatioLimit", + [NSNumber numberWithBool: fLimitCustom], @"LimitSpeedCustom", [NSNumber numberWithBool: fCheckUpload], @"CheckUpload", [NSNumber numberWithInt: fUploadLimit], @"UploadLimit", [NSNumber numberWithBool: fCheckDownload], @"CheckDownload", @@ -163,6 +172,8 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 { tr_torrentClose(fLib, fHandle); + [[NSNotificationCenter defaultCenter] removeObserver: self]; + if (fDownloadFolder) [fDownloadFolder release]; if (fIncompleteFolder) @@ -253,12 +264,12 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 } //check to stop for ratio - if ([self isSeeding] && ((fStopRatioSetting == RATIO_CHECK && [self ratio] >= fRatioLimit) - || (fStopRatioSetting == RATIO_GLOBAL && [fDefaults boolForKey: @"RatioCheck"] - && [self ratio] >= [fDefaults floatForKey: @"RatioLimit"]))) + if ([self isSeeding] && ((fRatioCustom && fShouldStopAtRatio && [self ratio] >= fRatioLimit) + || (!fRatioCustom && [fDefaults boolForKey: @"RatioCheck"] + && [self ratio] >= [fDefaults floatForKey: @"RatioLimit"]))) { [self stopTransfer]; - [self setStopRatioSetting: RATIO_NO_CHECK]; + fFinishedSeeding = YES; fStat = tr_torrentStat(fHandle); @@ -498,14 +509,24 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 return downloaded > 0 ? (float)[self uploadedTotal] / downloaded : -1; } -- (int) stopRatioSetting +- (BOOL) customRatioSetting { - return fStopRatioSetting; + return fRatioCustom; } -- (void) setStopRatioSetting: (int) setting +- (void) setCustomRatioSetting: (BOOL) setting { - fStopRatioSetting = setting; + fRatioCustom = setting; +} + +- (BOOL) shouldStopAtRatio +{ + return fShouldStopAtRatio; +} + +- (void) setShouldStopAtRatio: (BOOL) setting +{ + fShouldStopAtRatio = setting; } - (float) ratioLimit @@ -519,50 +540,77 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 fRatioLimit = limit; } -- (void) setLimitUpload: (BOOL) limit -{ - fCheckUpload = limit; - tr_setUploadLimit(fHandle, fCheckUpload ? fUploadLimit : -1); -} - -- (void) setUploadLimit: (int) limit -{ - fUploadLimit = limit; - tr_setUploadLimit(fHandle, fCheckUpload ? fUploadLimit : -1); -} - -- (void) setLimitDownload: (BOOL) limit -{ - fCheckDownload = limit; - tr_setDownloadLimit(fHandle, fCheckDownload ? fDownloadLimit : -1); -} - -- (void) setDownloadLimit: (int) limit -{ - fDownloadLimit = limit; - tr_setDownloadLimit(fHandle, fCheckDownload ? fDownloadLimit : -1); -} - - (BOOL) checkUpload { return fCheckUpload; } +- (void) setLimitUpload: (BOOL) limit +{ + fCheckUpload = limit; + [self updateSpeedSetting: nil]; +} + - (int) uploadLimit { return fUploadLimit; } +- (void) setUploadLimit: (int) limit +{ + fUploadLimit = limit; + [self updateSpeedSetting: nil]; +} + - (BOOL) checkDownload { return fCheckDownload; } +- (void) setLimitDownload: (BOOL) limit +{ + fCheckDownload = limit; + [self updateSpeedSetting: nil]; +} + - (int) downloadLimit { return fDownloadLimit; } +- (void) setDownloadLimit: (int) limit +{ + fDownloadLimit = limit; + [self updateSpeedSetting: nil]; +} + +- (BOOL) customLimitSetting +{ + return fLimitCustom; +} + +- (void) setCustomLimitSetting: (BOOL) setting +{ + fLimitCustom = setting; + [self updateSpeedSetting: nil]; +} + +- (void) updateSpeedSetting: (NSNotification *) notification +{ + if (fLimitCustom) + { + tr_setUploadLimit(fHandle, fCheckUpload ? fUploadLimit : -1); + tr_setDownloadLimit(fHandle, fCheckDownload ? fDownloadLimit : -1); + } + else + { + tr_setUploadLimit(fHandle, [fDefaults boolForKey: @"CheckUploadTorrent"] + ? [fDefaults integerForKey: @"UploadLimitTorrent"] : -1); + tr_setDownloadLimit(fHandle, [fDefaults boolForKey: @"CheckDownloadTorrent"] + ? [fDefaults integerForKey: @"DownloadLimitTorrent"] : -1); + } +} + - (void) setWaitToStart: (BOOL) wait { fWaitToStart = wait; @@ -1093,8 +1141,11 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 //if a hash is given, attempt to load that; otherwise, attempt to open file at path - (id) initWithHash: (NSString *) hashString path: (NSString *) path lib: (tr_handle_t *) lib publicTorrent: (NSNumber *) publicTorrent - date: (NSDate *) date stopRatioSetting: (NSNumber *) stopRatioSetting + date: (NSDate *) date + stopRatioCustom: (NSNumber *) ratioCustom + shouldStopAtRatio: (NSNumber *) shouldStopAtRatio ratioLimit: (NSNumber *) ratioLimit + limitSpeedCustom: (NSNumber *) limitCustom checkUpload: (NSNumber *) checkUpload uploadLimit: (NSNumber *) uploadLimit checkDownload: (NSNumber *) checkDownload downloadLimit: (NSNumber *) downloadLimit waitToStart: (NSNumber *) waitToStart orderValue: (NSNumber *) orderValue @@ -1122,21 +1173,25 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80 return nil; } + NSNotificationCenter * nc = [NSNotificationCenter defaultCenter]; + [nc addObserver: self selector: @selector(updateSpeedSetting:) + name: @"UpdateSpeedSetting" object: nil]; + fInfo = tr_torrentInfo( fHandle ); fDate = date ? [date retain] : [[NSDate alloc] init]; - fStopRatioSetting = stopRatioSetting ? [stopRatioSetting intValue] : -1; + fRatioCustom = ratioCustom ? [ratioCustom boolValue] : NO; + fShouldStopAtRatio = shouldStopAtRatio ? [shouldStopAtRatio boolValue] : [fDefaults boolForKey: @"RatioCheck"]; fRatioLimit = ratioLimit ? [ratioLimit floatValue] : [fDefaults floatForKey: @"RatioLimit"]; fFinishedSeeding = NO; - fCheckUpload = checkUpload && [checkUpload boolValue]; - fUploadLimit = uploadLimit ? [uploadLimit intValue] : 10; - tr_setUploadLimit(fHandle, fCheckUpload ? fUploadLimit : -1); - - fCheckDownload = checkDownload && [checkDownload boolValue]; - fDownloadLimit = downloadLimit ? [downloadLimit intValue] : 10; - tr_setDownloadLimit(fHandle, fCheckDownload ? fDownloadLimit : -1); + fLimitCustom = limitCustom ? [limitCustom boolValue] : NO; + fCheckUpload = checkUpload ? [checkUpload boolValue] : [fDefaults boolForKey: @"CheckUploadTorrent"]; + fUploadLimit = uploadLimit ? [uploadLimit intValue] : [fDefaults integerForKey: @"UploadLimitTorrent"]; + fCheckDownload = checkDownload ? [checkDownload boolValue] : [fDefaults boolForKey: @"CheckDownloadTorrent"]; + fDownloadLimit = downloadLimit ? [downloadLimit intValue] : [fDefaults integerForKey: @"DownloadLimitTorrent"]; + [self updateSpeedSetting: nil]; fWaitToStart = waitToStart ? [waitToStart boolValue] : [fDefaults boolForKey: @"AutoStartDownload"]; fOrderValue = orderValue ? [orderValue intValue] : tr_torrentCount(fLib) - 1;