redone options tab of inspector...current settings for "stop at ratio" won't carry over

This commit is contained in:
Mitchell Livingston 2006-12-28 00:29:05 +00:00
parent 4465ea7bc8
commit d7f1933087
13 changed files with 236 additions and 131 deletions

View File

@ -18,6 +18,8 @@
<integer>9090</integer> <integer>9090</integer>
<key>CheckDownload</key> <key>CheckDownload</key>
<false/> <false/>
<key>CheckDownloadTorrent</key>
<false/>
<key>CheckQuit</key> <key>CheckQuit</key>
<true/> <true/>
<key>CheckQuitDownloading</key> <key>CheckQuitDownloading</key>
@ -28,6 +30,8 @@
<false/> <false/>
<key>CheckUpload</key> <key>CheckUpload</key>
<true/> <true/>
<key>CheckUploadTorrent</key>
<false/>
<key>DeleteOriginalTorrent</key> <key>DeleteOriginalTorrent</key>
<false/> <false/>
<key>DownloadChoice</key> <key>DownloadChoice</key>
@ -36,6 +40,8 @@
<string>~/Desktop</string> <string>~/Desktop</string>
<key>DownloadLimit</key> <key>DownloadLimit</key>
<integer>100</integer> <integer>100</integer>
<key>DownloadLimitTorrent</key>
<integer>50</integer>
<key>DownloadSound</key> <key>DownloadSound</key>
<string>Glass</string> <string>Glass</string>
<key>Filter</key> <key>Filter</key>
@ -102,6 +108,8 @@
<string>Daily</string> <string>Daily</string>
<key>UploadLimit</key> <key>UploadLimit</key>
<integer>20</integer> <integer>20</integer>
<key>UploadLimitTorrent</key>
<integer>20</integer>
<key>UseAdvancedBar</key> <key>UseAdvancedBar</key>
<false/> <false/>
<key>UseIncompleteDownloadFolder</key> <key>UseIncompleteDownloadFolder</key>

View File

@ -13,8 +13,10 @@
revealFile = id; revealFile = id;
revealTorrentFile = id; revealTorrentFile = id;
setLimitCheck = id; setLimitCheck = id;
setRatioCheck = id; setLimitCustom = id;
setRatioCustom = id;
setRatioLimit = id; setRatioLimit = id;
setRatioSetting = id;
setSpeedLimit = id; setSpeedLimit = id;
}; };
CLASS = InfoWindowController; CLASS = InfoWindowController;
@ -38,13 +40,15 @@
fHashField = NSTextField; fHashField = NSTextField;
fImageView = NSImageView; fImageView = NSImageView;
fLeechersField = NSTextField; fLeechersField = NSTextField;
fLimitCustomCheck = NSButton;
fNameField = NSTextField; fNameField = NSTextField;
fPeerTable = NSTableView; fPeerTable = NSTableView;
fPiecesField = NSTextField; fPiecesField = NSTextField;
fPiecesView = PiecesView; fPiecesView = PiecesView;
fRatioCustomCheck = NSButton;
fRatioField = NSTextField; fRatioField = NSTextField;
fRatioLimitField = NSTextField; fRatioLimitField = NSTextField;
fRatioMatrix = NSMatrix; fRatioStopCheck = NSButton;
fRevealDataButton = NSButton; fRevealDataButton = NSButton;
fRevealTorrentButton = NSButton; fRevealTorrentButton = NSButton;
fSecureField = NSTextField; fSecureField = NSTextField;

View File

@ -3,7 +3,7 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>IBDocumentLocation</key> <key>IBDocumentLocation</key>
<string>69 61 356 240 0 0 1152 842 </string> <string>34 67 356 240 0 0 1152 842 </string>
<key>IBEditorPositions</key> <key>IBEditorPositions</key>
<dict> <dict>
<key>549</key> <key>549</key>

View File

@ -6,6 +6,7 @@
{ {
ACTIONS = { ACTIONS = {
applySpeedSettings = id; applySpeedSettings = id;
applyTorrentSpeedSetting = id;
folderSheetShow = id; folderSheetShow = id;
helpForNetwork = id; helpForNetwork = id;
importFolderSheetShow = id; importFolderSheetShow = id;

View File

@ -3,17 +3,17 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>IBDocumentLocation</key> <key>IBDocumentLocation</key>
<string>19 87 356 240 0 0 1152 842 </string> <string>19 79 356 240 0 0 1152 842 </string>
<key>IBEditorPositions</key> <key>IBEditorPositions</key>
<dict> <dict>
<key>153</key> <key>153</key>
<string>235 384 563 267 0 0 1152 842 </string> <string>180 392 571 335 0 0 1152 842 </string>
<key>28</key> <key>28</key>
<string>294 434 563 290 0 0 1152 842 </string> <string>99 386 571 290 0 0 1152 842 </string>
<key>41</key> <key>41</key>
<string>161 288 563 305 0 0 1152 842 </string> <string>290 426 571 305 0 0 1152 842 </string>
<key>66</key> <key>66</key>
<string>294 507 563 144 0 0 1152 842 </string> <string>139 501 571 144 0 0 1152 842 </string>
</dict> </dict>
<key>IBFramework Version</key> <key>IBFramework Version</key>
<string>446.1</string> <string>446.1</string>
@ -24,7 +24,6 @@
<key>IBOpenObjects</key> <key>IBOpenObjects</key>
<array> <array>
<integer>153</integer> <integer>153</integer>
<integer>41</integer>
</array> </array>
<key>IBSystem Version</key> <key>IBSystem Version</key>
<string>8L127</string> <string>8L127</string>

View File

@ -56,8 +56,8 @@
IBOutlet NSTableView * fFileTable; IBOutlet NSTableView * fFileTable;
IBOutlet NSTextField * fFileTableStatusField; IBOutlet NSTextField * fFileTableStatusField;
IBOutlet NSButton * fUploadLimitCheck, * fDownloadLimitCheck; IBOutlet NSButton * fRatioCustomCheck, * fRatioStopCheck,
IBOutlet NSMatrix * fRatioMatrix; * fLimitCustomCheck, * fUploadLimitCheck, * fDownloadLimitCheck;
IBOutlet NSTextField * fUploadLimitField, * fDownloadLimitField, * fRatioLimitField; IBOutlet NSTextField * fUploadLimitField, * fDownloadLimitField, * fRatioLimitField;
} }
@ -71,10 +71,12 @@
- (void) revealDataFile: (id) sender; - (void) revealDataFile: (id) sender;
- (void) revealFile: (id) sender; - (void) revealFile: (id) sender;
- (void) setLimitCustom: (id) sender;
- (void) setLimitCheck: (id) sender; - (void) setLimitCheck: (id) sender;
- (void) setSpeedLimit: (id) sender; - (void) setSpeedLimit: (id) sender;
- (void) setRatioCheck: (id) sender; - (void) setRatioCustom: (id) sender;
- (void) setRatioSetting: (id) sender;
- (void) setRatioLimit: (id) sender; - (void) setRatioLimit: (id) sender;
@end @end

View File

@ -25,10 +25,6 @@
#import "InfoWindowController.h" #import "InfoWindowController.h"
#import "StringAdditions.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 MIN_WINDOW_WIDTH 300
#define MAX_WINDOW_WIDTH 5000 #define MAX_WINDOW_WIDTH 5000
@ -43,7 +39,7 @@
#define TAB_ACTIVITY_HEIGHT 170.0 #define TAB_ACTIVITY_HEIGHT 170.0
#define TAB_PEERS_HEIGHT 268.0 #define TAB_PEERS_HEIGHT 268.0
#define TAB_FILES_HEIGHT 268.0 #define TAB_FILES_HEIGHT 268.0
#define TAB_OPTIONS_HEIGHT 147.0 #define TAB_OPTIONS_HEIGHT 157.0
#define INVALID -99 #define INVALID -99
@ -384,15 +380,20 @@
NSEnumerator * enumerator = [fTorrents objectEnumerator]; NSEnumerator * enumerator = [fTorrents objectEnumerator];
torrent = [enumerator nextObject]; //first torrent 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, checkDownload = [torrent checkDownload] ? 1 : 0,
uploadLimit = [torrent uploadLimit], uploadLimit = [torrent uploadLimit],
downloadLimit = [torrent downloadLimit]; downloadLimit = [torrent downloadLimit];
while ((checkUpload != INVALID || uploadLimit != INVALID while ((limitCustom != INVALID
|| checkUpload != INVALID || uploadLimit != INVALID
|| checkDownload != INVALID || downloadLimit != INVALID) || checkDownload != INVALID || downloadLimit != INVALID)
&& (torrent = [enumerator nextObject])) && (torrent = [enumerator nextObject]))
{ {
if (limitCustom != INVALID && limitCustom != ([torrent customLimitSetting] ? 1 : 0))
limitCustom = INVALID;
if (checkUpload != INVALID && checkUpload != ([torrent checkUpload] ? 1 : 0)) if (checkUpload != INVALID && checkUpload != ([torrent checkUpload] ? 1 : 0))
checkUpload = INVALID; checkUpload = INVALID;
@ -406,23 +407,25 @@
downloadLimit = INVALID; downloadLimit = INVALID;
} }
[fUploadLimitCheck setEnabled: YES]; [fLimitCustomCheck setEnabled: YES];
[fDownloadLimitCheck setEnabled: YES]; [fLimitCustomCheck setState: limitCustom == INVALID ? NSMixedState
: (limitCustom == 1 ? NSOnState : NSOffState)];
[fUploadLimitField setEnabled: checkUpload != 0];
[fDownloadLimitField setEnabled: checkDownload != 0];
[fUploadLimitCheck setEnabled: limitCustom == 1];
[fUploadLimitCheck setState: checkUpload == INVALID ? NSMixedState [fUploadLimitCheck setState: checkUpload == INVALID ? NSMixedState
: (checkUpload == 1 ? NSOnState : NSOffState)]; : (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) if (uploadLimit != INVALID)
[fUploadLimitField setIntValue: uploadLimit]; [fUploadLimitField setIntValue: uploadLimit];
else else
[fUploadLimitField setStringValue: @""]; [fUploadLimitField setStringValue: @""];
[fDownloadLimitCheck setState: checkDownload == INVALID ? NSMixedState [fDownloadLimitField setEnabled: limitCustom == 1 && checkDownload == 1];
: (checkDownload == 1 ? NSOnState : NSOffState)];
if (downloadLimit != INVALID) if (downloadLimit != INVALID)
[fDownloadLimitField setIntValue: downloadLimit]; [fDownloadLimitField setIntValue: downloadLimit];
else else
@ -432,38 +435,32 @@
enumerator = [fTorrents objectEnumerator]; enumerator = [fTorrents objectEnumerator];
torrent = [enumerator nextObject]; //first torrent torrent = [enumerator nextObject]; //first torrent
int ratioSetting = [torrent stopRatioSetting]; int ratioCustom = [torrent customRatioSetting] ? 1 : 0,
ratioStop = [torrent shouldStopAtRatio];
float ratioLimit = [torrent ratioLimit]; float ratioLimit = [torrent ratioLimit];
while ((ratioSetting != INVALID || ratioLimit != INVALID) while ((ratioCustom != INVALID || ratioStop != INVALID || ratioLimit != INVALID)
&& (torrent = [enumerator nextObject])) && (torrent = [enumerator nextObject]))
{ {
if (ratioSetting != INVALID && ratioSetting != [torrent stopRatioSetting]) if (ratioCustom != INVALID && ratioCustom != ([torrent customRatioSetting] ? 1 : 0))
ratioSetting = INVALID; ratioCustom = INVALID;
if (ratioStop != INVALID && ratioStop != ([torrent shouldStopAtRatio] ? 1 : 0))
ratioStop = INVALID;
if (ratioLimit != INVALID && ratioLimit != [torrent ratioLimit]) if (ratioLimit != INVALID && ratioLimit != [torrent ratioLimit])
ratioLimit = INVALID; ratioLimit = INVALID;
} }
[fRatioMatrix setEnabled: YES]; [fRatioCustomCheck setEnabled: YES];
[fRatioCustomCheck setState: ratioCustom == INVALID ? NSMixedState
: (ratioCustom == 1 ? NSOnState : NSOffState)];
if (ratioSetting == RATIO_CHECK) [fRatioStopCheck setEnabled: ratioCustom == 1];
{ [fRatioStopCheck setState: ratioStop == INVALID ? NSMixedState
[fRatioMatrix selectCellWithTag: RATIO_CHECK_TAG]; : (ratioStop == 1 ? NSOnState : NSOffState)];
[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];
}
[fRatioLimitField setEnabled: ratioCustom == 1 && ratioStop == 1];
if (ratioLimit != INVALID) if (ratioLimit != INVALID)
[fRatioLimitField setFloatValue: ratioLimit]; [fRatioLimitField setFloatValue: ratioLimit];
else else
@ -471,21 +468,25 @@
} }
else else
{ {
[fRatioMatrix deselectAllCells]; [fLimitCustomCheck setEnabled: NO];
[fRatioMatrix setEnabled: NO]; [fLimitCustomCheck setState: NSOffState];
[fRatioLimitField setEnabled: NO];
[fRatioLimitField setStringValue: @""];
[fUploadLimitCheck setState: NSOffState];
[fUploadLimitCheck setEnabled: NO]; [fUploadLimitCheck setEnabled: NO];
[fUploadLimitCheck setState: NSOffState];
[fUploadLimitField setEnabled: NO]; [fUploadLimitField setEnabled: NO];
[fUploadLimitField setStringValue: @""]; [fUploadLimitField setStringValue: @""];
[fDownloadLimitCheck setState: NSOffState];
[fDownloadLimitCheck setEnabled: NO]; [fDownloadLimitCheck setEnabled: NO];
[fDownloadLimitCheck setState: NSOffState];
[fDownloadLimitField setEnabled: NO]; [fDownloadLimitField setEnabled: NO];
[fDownloadLimitField setStringValue: @""]; [fDownloadLimitField setStringValue: @""];
[fRatioCustomCheck setEnabled: NO];
[fRatioCustomCheck setState: NSOffState];
[fRatioStopCheck setEnabled: NO];
[fRatioStopCheck setState: NSOffState];
[fRatioLimitField setEnabled: NO];
[fRatioLimitField setStringValue: @""];
} }
[self updateInfoStats]; [self updateInfoStats];
@ -691,6 +692,24 @@
inFileViewerRootedAtPath: nil]; 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 - (void) setLimitCheck: (id) sender
{ {
BOOL upload = sender == fUploadLimitCheck, BOOL upload = sender == fUploadLimitCheck,
@ -706,9 +725,6 @@
NSTextField * field = upload ? fUploadLimitField : fDownloadLimitField; NSTextField * field = upload ? fUploadLimitField : fDownloadLimitField;
if (![[field stringValue] isEqualToString: @""])
[self setSpeedLimit: field];
[field setEnabled: limit]; [field setEnabled: limit];
} }
@ -743,23 +759,33 @@
} }
} }
- (void) setRatioCheck: (id) sender - (void) setRatioCustom: (id) sender
{ {
int ratioSetting, tag = [[fRatioMatrix selectedCell] tag]; BOOL custom = [sender state] != NSOffState;
if (tag == RATIO_CHECK_TAG) if (custom)
ratioSetting = RATIO_CHECK; [sender setState: NSOnState];
else if (tag == RATIO_NO_CHECK_TAG)
ratioSetting = RATIO_NO_CHECK;
else
ratioSetting = RATIO_GLOBAL;
Torrent * torrent; Torrent * torrent;
NSEnumerator * enumerator = [fTorrents objectEnumerator]; NSEnumerator * enumerator = [fTorrents objectEnumerator];
while ((torrent = [enumerator nextObject])) while ((torrent = [enumerator nextObject]))
[torrent setStopRatioSetting: ratioSetting]; [torrent setCustomRatioSetting: custom];
[self setRatioLimit: fRatioLimitField]; [fRatioStopCheck setEnabled: custom];
[fRatioLimitField setEnabled: tag == RATIO_CHECK_TAG]; [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 - (void) setRatioLimit: (id) sender

View File

@ -79,6 +79,7 @@
- (void) setAutoSpeedLimit: (id) sender; - (void) setAutoSpeedLimit: (id) sender;
- (void) applySpeedSettings: (id) sender; - (void) applySpeedSettings: (id) sender;
- (void) applyTorrentSpeedSetting: (id) sender;
- (void) setAutoImport: (id) sender; - (void) setAutoImport: (id) sender;
- (void) importFolderSheetShow: (id) sender; - (void) importFolderSheetShow: (id) sender;

View File

@ -313,6 +313,11 @@
} }
} }
- (void) applyTorrentSpeedSetting: (id) sender
{
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateSpeedSetting" object: self];
}
- (void) setAutoSpeedLimit: (id) sender - (void) setAutoSpeedLimit: (id) sender
{ {
[[NSNotificationCenter defaultCenter] postNotificationName: @"AutoSpeedLimitChange" object: self]; [[NSNotificationCenter defaultCenter] postNotificationName: @"AutoSpeedLimitChange" object: self];

View File

@ -25,10 +25,6 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import <transmission.h> #import <transmission.h>
#define RATIO_CHECK 1
#define RATIO_GLOBAL -1
#define RATIO_NO_CHECK 0
@interface Torrent : NSObject @interface Torrent : NSObject
{ {
tr_handle_t * fLib; tr_handle_t * fLib;
@ -51,9 +47,11 @@
NSMutableString * fNameString, * fProgressString, * fStatusString, * fShortStatusString, * fRemainingTimeString; NSMutableString * fNameString, * fProgressString, * fStatusString, * fShortStatusString, * fRemainingTimeString;
int fUploadLimit, fDownloadLimit, fStopRatioSetting; int fUploadLimit, fDownloadLimit;
float fRatioLimit; float fRatioLimit;
BOOL fCheckUpload, fCheckDownload, fFinishedSeeding, fWaitToStart, fError; BOOL fLimitCustom, fCheckUpload, fCheckDownload,
fRatioCustom, fShouldStopAtRatio,
fFinishedSeeding, fWaitToStart, fError;
int fOrderValue; int fOrderValue;
@ -85,19 +83,25 @@
- (NSDate *) announceDate; - (NSDate *) announceDate;
- (float) ratio; - (float) ratio;
- (int) stopRatioSetting; - (BOOL) customRatioSetting;
- (void) setStopRatioSetting: (int) setting; - (void) setCustomRatioSetting: (BOOL) setting;
- (BOOL) shouldStopAtRatio;
- (void) setShouldStopAtRatio: (BOOL) setting;
- (float) ratioLimit; - (float) ratioLimit;
- (void) setRatioLimit: (float) limit; - (void) setRatioLimit: (float) limit;
- (void) setLimitUpload: (BOOL) limit;
- (void) setUploadLimit: (int) limit;
- (void) setLimitDownload: (BOOL) limit;
- (void) setDownloadLimit: (int) limit;
- (BOOL) checkUpload; - (BOOL) checkUpload;
- (void) setLimitUpload: (BOOL) limit;
- (int) uploadLimit; - (int) uploadLimit;
- (void) setUploadLimit: (int) limit;
- (BOOL) checkDownload; - (BOOL) checkDownload;
- (void) setLimitDownload: (BOOL) limit;
- (int) downloadLimit; - (int) downloadLimit;
- (void) setDownloadLimit: (int) limit;
- (BOOL) customLimitSetting;
- (void) setCustomLimitSetting: (BOOL) setting;
- (void) updateSpeedSetting: (NSNotification *) notification;
- (void) setWaitToStart: (BOOL) wait; - (void) setWaitToStart: (BOOL) wait;
- (BOOL) waitingToStart; - (BOOL) waitingToStart;

View File

@ -34,8 +34,11 @@
- (id) initWithHash: (NSString *) hashString path: (NSString *) path lib: (tr_handle_t *) lib - (id) initWithHash: (NSString *) hashString path: (NSString *) path lib: (tr_handle_t *) lib
publicTorrent: (NSNumber *) publicTorrent publicTorrent: (NSNumber *) publicTorrent
date: (NSDate *) date stopRatioSetting: (NSNumber *) stopRatioSetting date: (NSDate *) date
stopRatioCustom: (NSNumber *) ratioCustom
shouldStopAtRatio: (NSNumber *) shouldStopAtRatio
ratioLimit: (NSNumber *) ratioLimit ratioLimit: (NSNumber *) ratioLimit
limitSpeedCustom: (NSNumber *) limitCustom
checkUpload: (NSNumber *) checkUpload uploadLimit: (NSNumber *) uploadLimit checkUpload: (NSNumber *) checkUpload uploadLimit: (NSNumber *) uploadLimit
checkDownload: (NSNumber *) checkDownload downloadLimit: (NSNumber *) downloadLimit checkDownload: (NSNumber *) checkDownload downloadLimit: (NSNumber *) downloadLimit
waitToStart: (NSNumber *) waitToStart orderValue: (NSNumber *) orderValue; 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 self = [self initWithHash: nil path: path lib: lib
publicTorrent: delete ? [NSNumber numberWithBool: NO] : nil 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 checkUpload: nil uploadLimit: nil
checkDownload: nil downloadLimit: nil checkDownload: nil downloadLimit: nil
waitToStart: nil orderValue: nil]; waitToStart: nil orderValue: nil];
@ -86,8 +91,10 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
path: [history objectForKey: @"TorrentPath"] lib: lib path: [history objectForKey: @"TorrentPath"] lib: lib
publicTorrent: [history objectForKey: @"PublicCopy"] publicTorrent: [history objectForKey: @"PublicCopy"]
date: [history objectForKey: @"Date"] date: [history objectForKey: @"Date"]
stopRatioSetting: [history objectForKey: @"StopRatioSetting"] stopRatioCustom: [history objectForKey: @"StopRatioCustom"]
shouldStopAtRatio: [history objectForKey: @"ShouldStopAtRatio"]
ratioLimit: [history objectForKey: @"RatioLimit"] ratioLimit: [history objectForKey: @"RatioLimit"]
limitSpeedCustom: [history objectForKey: @"LimitSpeedCustom"]
checkUpload: [history objectForKey: @"CheckUpload"] checkUpload: [history objectForKey: @"CheckUpload"]
uploadLimit: [history objectForKey: @"UploadLimit"] uploadLimit: [history objectForKey: @"UploadLimit"]
checkDownload: [history objectForKey: @"CheckDownload"] checkDownload: [history objectForKey: @"CheckDownload"]
@ -139,8 +146,10 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
[NSNumber numberWithBool: fUseIncompleteFolder], @"UseIncompleteFolder", [NSNumber numberWithBool: fUseIncompleteFolder], @"UseIncompleteFolder",
[self isActive] ? @"NO" : @"YES", @"Paused", [self isActive] ? @"NO" : @"YES", @"Paused",
[self date], @"Date", [self date], @"Date",
[NSNumber numberWithInt: fStopRatioSetting], @"StopRatioSetting", [NSNumber numberWithBool: fRatioCustom], @"StopRatioCustom",
[NSNumber numberWithBool: fShouldStopAtRatio], @"ShouldStopAtRatio",
[NSNumber numberWithFloat: fRatioLimit], @"RatioLimit", [NSNumber numberWithFloat: fRatioLimit], @"RatioLimit",
[NSNumber numberWithBool: fLimitCustom], @"LimitSpeedCustom",
[NSNumber numberWithBool: fCheckUpload], @"CheckUpload", [NSNumber numberWithBool: fCheckUpload], @"CheckUpload",
[NSNumber numberWithInt: fUploadLimit], @"UploadLimit", [NSNumber numberWithInt: fUploadLimit], @"UploadLimit",
[NSNumber numberWithBool: fCheckDownload], @"CheckDownload", [NSNumber numberWithBool: fCheckDownload], @"CheckDownload",
@ -163,6 +172,8 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
{ {
tr_torrentClose(fLib, fHandle); tr_torrentClose(fLib, fHandle);
[[NSNotificationCenter defaultCenter] removeObserver: self];
if (fDownloadFolder) if (fDownloadFolder)
[fDownloadFolder release]; [fDownloadFolder release];
if (fIncompleteFolder) if (fIncompleteFolder)
@ -253,12 +264,12 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
} }
//check to stop for ratio //check to stop for ratio
if ([self isSeeding] && ((fStopRatioSetting == RATIO_CHECK && [self ratio] >= fRatioLimit) if ([self isSeeding] && ((fRatioCustom && fShouldStopAtRatio && [self ratio] >= fRatioLimit)
|| (fStopRatioSetting == RATIO_GLOBAL && [fDefaults boolForKey: @"RatioCheck"] || (!fRatioCustom && [fDefaults boolForKey: @"RatioCheck"]
&& [self ratio] >= [fDefaults floatForKey: @"RatioLimit"]))) && [self ratio] >= [fDefaults floatForKey: @"RatioLimit"])))
{ {
[self stopTransfer]; [self stopTransfer];
[self setStopRatioSetting: RATIO_NO_CHECK];
fFinishedSeeding = YES; fFinishedSeeding = YES;
fStat = tr_torrentStat(fHandle); 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; 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 - (float) ratioLimit
@ -519,50 +540,77 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
fRatioLimit = limit; 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 - (BOOL) checkUpload
{ {
return fCheckUpload; return fCheckUpload;
} }
- (void) setLimitUpload: (BOOL) limit
{
fCheckUpload = limit;
[self updateSpeedSetting: nil];
}
- (int) uploadLimit - (int) uploadLimit
{ {
return fUploadLimit; return fUploadLimit;
} }
- (void) setUploadLimit: (int) limit
{
fUploadLimit = limit;
[self updateSpeedSetting: nil];
}
- (BOOL) checkDownload - (BOOL) checkDownload
{ {
return fCheckDownload; return fCheckDownload;
} }
- (void) setLimitDownload: (BOOL) limit
{
fCheckDownload = limit;
[self updateSpeedSetting: nil];
}
- (int) downloadLimit - (int) downloadLimit
{ {
return fDownloadLimit; 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 - (void) setWaitToStart: (BOOL) wait
{ {
fWaitToStart = 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 //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 - (id) initWithHash: (NSString *) hashString path: (NSString *) path lib: (tr_handle_t *) lib
publicTorrent: (NSNumber *) publicTorrent publicTorrent: (NSNumber *) publicTorrent
date: (NSDate *) date stopRatioSetting: (NSNumber *) stopRatioSetting date: (NSDate *) date
stopRatioCustom: (NSNumber *) ratioCustom
shouldStopAtRatio: (NSNumber *) shouldStopAtRatio
ratioLimit: (NSNumber *) ratioLimit ratioLimit: (NSNumber *) ratioLimit
limitSpeedCustom: (NSNumber *) limitCustom
checkUpload: (NSNumber *) checkUpload uploadLimit: (NSNumber *) uploadLimit checkUpload: (NSNumber *) checkUpload uploadLimit: (NSNumber *) uploadLimit
checkDownload: (NSNumber *) checkDownload downloadLimit: (NSNumber *) downloadLimit checkDownload: (NSNumber *) checkDownload downloadLimit: (NSNumber *) downloadLimit
waitToStart: (NSNumber *) waitToStart orderValue: (NSNumber *) orderValue waitToStart: (NSNumber *) waitToStart orderValue: (NSNumber *) orderValue
@ -1122,21 +1173,25 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
return nil; return nil;
} }
NSNotificationCenter * nc = [NSNotificationCenter defaultCenter];
[nc addObserver: self selector: @selector(updateSpeedSetting:)
name: @"UpdateSpeedSetting" object: nil];
fInfo = tr_torrentInfo( fHandle ); fInfo = tr_torrentInfo( fHandle );
fDate = date ? [date retain] : [[NSDate alloc] init]; 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"]; fRatioLimit = ratioLimit ? [ratioLimit floatValue] : [fDefaults floatForKey: @"RatioLimit"];
fFinishedSeeding = NO; fFinishedSeeding = NO;
fCheckUpload = checkUpload && [checkUpload boolValue]; fLimitCustom = limitCustom ? [limitCustom boolValue] : NO;
fUploadLimit = uploadLimit ? [uploadLimit intValue] : 10; fCheckUpload = checkUpload ? [checkUpload boolValue] : [fDefaults boolForKey: @"CheckUploadTorrent"];
tr_setUploadLimit(fHandle, fCheckUpload ? fUploadLimit : -1); fUploadLimit = uploadLimit ? [uploadLimit intValue] : [fDefaults integerForKey: @"UploadLimitTorrent"];
fCheckDownload = checkDownload ? [checkDownload boolValue] : [fDefaults boolForKey: @"CheckDownloadTorrent"];
fCheckDownload = checkDownload && [checkDownload boolValue]; fDownloadLimit = downloadLimit ? [downloadLimit intValue] : [fDefaults integerForKey: @"DownloadLimitTorrent"];
fDownloadLimit = downloadLimit ? [downloadLimit intValue] : 10; [self updateSpeedSetting: nil];
tr_setDownloadLimit(fHandle, fCheckDownload ? fDownloadLimit : -1);
fWaitToStart = waitToStart ? [waitToStart boolValue] : [fDefaults boolForKey: @"AutoStartDownload"]; fWaitToStart = waitToStart ? [waitToStart boolValue] : [fDefaults boolForKey: @"AutoStartDownload"];
fOrderValue = orderValue ? [orderValue intValue] : tr_torrentCount(fLib) - 1; fOrderValue = orderValue ? [orderValue intValue] : tr_torrentCount(fLib) - 1;