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];
while ((torrent = [enumerator nextObject]))
if ([torrent isActive] && ![torrent isError])
if ([torrent isActive] && ![torrent isStalled] && ![torrent isError])
{
if ([torrent allDownloaded])
desiredSeedActive--;

View File

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

View File

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

View File

@ -7,11 +7,11 @@
<key>IBEditorPositions</key>
<dict>
<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>
<string>294 421 563 313 0 0 1152 842 </string>
<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>
<string>294 506 563 144 0 0 1152 842 </string>
</dict>

View File

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

View File

@ -155,6 +155,9 @@
[fQueueDownloadField setIntValue: [fDefaults integerForKey: @"QueueDownloadNumber"]];
[fQueueSeedField setIntValue: [fDefaults integerForKey: @"QueueSeedNumber"]];
//set stalled value
[fStalledField setIntValue: [fDefaults integerForKey: @"StalledSeconds"]];
//set update check
NSString * updateCheck = [fDefaults stringForKey: @"UpdateCheck"];
if ([updateCheck isEqualToString: @"Weekly"])
@ -484,10 +487,28 @@
}
[fDefaults setInteger: limit forKey: download ? @"QueueDownloadNumber" : @"QueueSeedNumber"];
[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
{
switch ([fFolderPopUp indexOfSelectedItem])

View File

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

View File

@ -445,21 +445,23 @@ static uint32_t kRed = BE(0xFF6450FF), //255, 100, 80
break;
}
if (wasChecking && !fChecking)
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
if ([self isError])
{
[statusString setString: [NSLocalizedString(@"Error: ", "Torrent -> status string") stringByAppendingString:
[self errorMessage]]];
}
//check for error
BOOL wasError = fError;
if ((fError = fStat->cannotConnect))
{
if (!wasError && [self isActive])
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
}
if ((fError = [self isError]))
[statusString setString: [NSLocalizedString(@"Error: ", "Torrent -> status string")
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];
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;
}
- (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
{
if (![self isActive])