add ability to start next transfer in queue if one becomes stalled
This commit is contained in:
parent
3d48ed389d
commit
10fb28ad4c
|
@ -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--;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Binary file not shown.
|
@ -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;
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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]]];
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
|
|
||||||
}
|
//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 )
|
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])
|
||||||
|
|
Loading…
Reference in New Issue