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;