add ability to start next transfer in queue if one becomes stalled

This commit is contained in:
Mitchell Livingston 2007-05-26 06:16:43 +00:00
parent 3d48ed389d
commit 10fb28ad4c
9 changed files with 74 additions and 20 deletions

View File

@ -1343,7 +1343,7 @@ static void sleepCallBack(void * controller, io_service_t y, natural_t messageTy
{ {
enumerator = [fTorrents objectEnumerator]; enumerator = [fTorrents objectEnumerator];
while ((torrent = [enumerator nextObject])) while ((torrent = [enumerator nextObject]))
if ([torrent isActive] && ![torrent isError]) if ([torrent isActive] && ![torrent isStalled] && ![torrent isError])
{ {
if ([torrent allDownloaded]) if ([torrent allDownloaded])
desiredSeedActive--; desiredSeedActive--;

View File

@ -24,6 +24,8 @@
<true/> <true/>
<key>CheckRemoveDownloading</key> <key>CheckRemoveDownloading</key>
<false/> <false/>
<key>CheckStalled</key>
<true/>
<key>CheckUpload</key> <key>CheckUpload</key>
<true/> <true/>
<key>DeleteOriginalTorrent</key> <key>DeleteOriginalTorrent</key>
@ -98,6 +100,8 @@
<integer>10</integer> <integer>10</integer>
<key>SpeedLimitUploadLimit</key> <key>SpeedLimitUploadLimit</key>
<integer>10</integer> <integer>10</integer>
<key>StalledSeconds</key>
<integer>300</integer>
<key>StatusBar</key> <key>StatusBar</key>
<true/> <true/>
<key>UpdateCheck</key> <key>UpdateCheck</key>

View File

@ -25,6 +25,8 @@
setRatioStop = id; setRatioStop = id;
setSound = id; setSound = id;
setSpeedLimit = id; setSpeedLimit = id;
setStalled = id;
setStalledSeconds = id;
setUpdate = id; setUpdate = id;
}; };
CLASS = PrefsController; CLASS = PrefsController;
@ -51,6 +53,7 @@
fSeedingSoundPopUp = NSPopUpButton; fSeedingSoundPopUp = NSPopUpButton;
fSpeedLimitDownloadField = NSTextField; fSpeedLimitDownloadField = NSTextField;
fSpeedLimitUploadField = NSTextField; fSpeedLimitUploadField = NSTextField;
fStalledField = NSTextField;
fTransfersView = NSView; fTransfersView = NSView;
fUpdatePopUp = NSPopUpButton; fUpdatePopUp = NSPopUpButton;
fUploadField = NSTextField; fUploadField = NSTextField;

View File

@ -7,11 +7,11 @@
<key>IBEditorPositions</key> <key>IBEditorPositions</key>
<dict> <dict>
<key>153</key> <key>153</key>
<string>206 273 563 268 0 0 1152 842 </string> <string>294 444 563 268 0 0 1152 842 </string>
<key>28</key> <key>28</key>
<string>294 421 563 313 0 0 1152 842 </string> <string>294 421 563 313 0 0 1152 842 </string>
<key>41</key> <key>41</key>
<string>294 425 563 305 0 0 1152 842 </string> <string>70 441 563 305 0 0 1152 842 </string>
<key>66</key> <key>66</key>
<string>294 506 563 144 0 0 1152 842 </string> <string>294 506 563 144 0 0 1152 842 </string>
</dict> </dict>

View File

@ -39,7 +39,7 @@
IBOutlet NSPopUpButton * fFolderPopUp, * fIncompleteFolderPopUp, * fImportFolderPopUp, IBOutlet NSPopUpButton * fFolderPopUp, * fIncompleteFolderPopUp, * fImportFolderPopUp,
* fDownloadSoundPopUp, * fSeedingSoundPopUp; * fDownloadSoundPopUp, * fSeedingSoundPopUp;
IBOutlet NSTextField * fRatioStopField, * fQueueDownloadField, * fQueueSeedField; IBOutlet NSTextField * fRatioStopField, * fQueueDownloadField, * fQueueSeedField, * fStalledField;
NSArray * fSounds; NSArray * fSounds;
@ -68,6 +68,9 @@
- (void) setQueue: (id) sender; - (void) setQueue: (id) sender;
- (void) setQueueNumber: (id) sender; - (void) setQueueNumber: (id) sender;
- (void) setStalled: (id) sender;
- (void) setStalledSeconds: (id) sender;
- (void) setDownloadLocation: (id) sender; - (void) setDownloadLocation: (id) sender;
- (void) folderSheetShow: (id) sender; - (void) folderSheetShow: (id) sender;
- (void) incompleteFolderSheetShow: (id) sender; - (void) incompleteFolderSheetShow: (id) sender;

View File

@ -155,6 +155,9 @@
[fQueueDownloadField setIntValue: [fDefaults integerForKey: @"QueueDownloadNumber"]]; [fQueueDownloadField setIntValue: [fDefaults integerForKey: @"QueueDownloadNumber"]];
[fQueueSeedField setIntValue: [fDefaults integerForKey: @"QueueSeedNumber"]]; [fQueueSeedField setIntValue: [fDefaults integerForKey: @"QueueSeedNumber"]];
//set stalled value
[fStalledField setIntValue: [fDefaults integerForKey: @"StalledSeconds"]];
//set update check //set update check
NSString * updateCheck = [fDefaults stringForKey: @"UpdateCheck"]; NSString * updateCheck = [fDefaults stringForKey: @"UpdateCheck"];
if ([updateCheck isEqualToString: @"Weekly"]) if ([updateCheck isEqualToString: @"Weekly"])
@ -484,10 +487,28 @@
} }
[fDefaults setInteger: limit forKey: download ? @"QueueDownloadNumber" : @"QueueSeedNumber"]; [fDefaults setInteger: limit forKey: download ? @"QueueDownloadNumber" : @"QueueSeedNumber"];
[self setQueue: nil]; [self setQueue: nil];
} }
- (void) setStalled: (id) sender
{
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateUI" object: self];
}
- (void) setStalledSeconds: (id) sender
{
int seconds = [sender intValue];
if (![[sender stringValue] isEqualToString: [NSString stringWithFormat: @"%d", seconds]] || seconds < 0)
{
NSBeep();
[sender setIntValue: [fDefaults integerForKey: @"StalledSeconds"]];
return;
}
[fDefaults setInteger: seconds forKey: @"StalledSeconds"];
[self setQueueStalled: nil];
}
- (void) setDownloadLocation: (id) sender - (void) setDownloadLocation: (id) sender
{ {
switch ([fFolderPopUp indexOfSelectedItem]) switch ([fFolderPopUp indexOfSelectedItem])

View File

@ -56,7 +56,7 @@
int fUploadLimit, fDownloadLimit; int fUploadLimit, fDownloadLimit;
float fRatioLimit; float fRatioLimit;
int fCheckUpload, fCheckDownload, fRatioSetting; int fCheckUpload, fCheckDownload, fRatioSetting;
BOOL fFinishedSeeding, fWaitToStart, fError, fChecking; BOOL fFinishedSeeding, fWaitToStart, fError, fChecking, fStalled;
int fOrderValue; int fOrderValue;
@ -205,6 +205,9 @@
- (NSDate *) dateCompleted; - (NSDate *) dateCompleted;
- (NSDate *) dateActivity; - (NSDate *) dateActivity;
- (int) stalledSeconds;
- (BOOL) isStalled;
- (NSNumber *) stateSortKey; - (NSNumber *) stateSortKey;
- (NSNumber *) progressSortKey; - (NSNumber *) progressSortKey;
- (NSNumber *) ratioSortKey; - (NSNumber *) ratioSortKey;

View File

@ -445,21 +445,23 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
break; break;
} }
if (wasChecking && !fChecking) //check for error
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
if ([self isError])
{
[statusString setString: [NSLocalizedString(@"Error: ", "Torrent -> status string") stringByAppendingString:
[self errorMessage]]];
}
BOOL wasError = fError; BOOL wasError = fError;
if ((fError = fStat->cannotConnect)) if ((fError = [self isError]))
{ [statusString setString: [NSLocalizedString(@"Error: ", "Torrent -> status string")
if (!wasError && [self isActive]) stringByAppendingString: [self errorMessage]]];
//check if stalled
BOOL wasStalled = fStalled;
fStalled = [fDefaults boolForKey: @"CheckStalled"]
&& [fDefaults integerForKey: @"StalledSeconds"] < [self stalledSeconds];
if (!fError && fStalled)
[statusString setString: [NSLocalizedString(@"Stalled, ", "Torrent -> status string")
stringByAppendingString: statusString]];
//update queue for checking (from downloading to seeding), stalled, or error
if ((wasChecking && !fChecking) || (!wasStalled && fStalled) || (!wasError && fError && [self isActive]))
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self]; [[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
}
if ([self isActive] && fStat->status != TR_STATUS_CHECK ) if ([self isActive] && fStat->status != TR_STATUS_CHECK )
{ {
@ -1355,6 +1357,24 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
return date > 0 ? [NSDate dateWithTimeIntervalSince1970: date] : fDateActivity; return date > 0 ? [NSDate dateWithTimeIntervalSince1970: date] : fDateActivity;
} }
- (int) stalledSeconds
{
if (![self isActive])
return -1;
NSDate * started = [NSDate dateWithTimeIntervalSince1970: fStat->startDate / 1000],
* activity = [self dateActivity];
if (!activity || [started compare: activity] == NSOrderedDescending)
return -1.0 * [started timeIntervalSinceNow];
else
return -1.0 * [activity timeIntervalSinceNow];
}
- (BOOL) isStalled
{
return fStalled;
}
- (NSNumber *) stateSortKey - (NSNumber *) stateSortKey
{ {
if (![self isActive]) if (![self isActive])