first go at bringing the libT queue to the Mac client
This commit is contained in:
parent
307754e807
commit
cd5b9b16fd
|
@ -199,9 +199,11 @@
|
|||
|
||||
- (void) confirmAdd
|
||||
{
|
||||
[fTorrent setWaitToStart: [fStartCheck state] == NSOnState];
|
||||
[fTorrent setGroupValue: fGroupValue];
|
||||
|
||||
if ([fStartCheck state] == NSOnState)
|
||||
[fTorrent startTransfer];
|
||||
|
||||
[self close];
|
||||
[fController askOpenMagnetConfirmed: self add: YES]; //ensure last, since it releases this controller
|
||||
}
|
||||
|
|
|
@ -287,13 +287,14 @@
|
|||
{
|
||||
[fTimer invalidate];
|
||||
fTimer = nil;
|
||||
|
||||
[fTorrent setWaitToStart: [fStartCheck state] == NSOnState];
|
||||
[fTorrent setGroupValue: fGroupValue];
|
||||
|
||||
if (fTorrentFile && [fDeleteCheck state] == NSOnState)
|
||||
[Torrent trashFile: fTorrentFile];
|
||||
|
||||
if ([fStartCheck state] == NSOnState)
|
||||
[fTorrent startTransfer];
|
||||
|
||||
[fFileController setTorrent: nil]; //avoid a crash when window tries to update
|
||||
|
||||
[self close];
|
||||
|
|
|
@ -185,7 +185,6 @@ typedef enum
|
|||
- (void) setBottomCountText: (BOOL) filtering;
|
||||
|
||||
- (void) updateTorrentsInQueue;
|
||||
- (NSUInteger) numToStartFromQueue: (BOOL) downloadQueue;
|
||||
|
||||
- (void) torrentFinishedDownloading: (NSNotification *) notification;
|
||||
- (void) torrentRestartedDownloading: (NSNotification *) notification;
|
||||
|
|
|
@ -286,6 +286,8 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_DHT_ENABLED, [fDefaults boolForKey: @"DHTGlobal"]);
|
||||
tr_bencDictAddStr(&settings, TR_PREFS_KEY_DOWNLOAD_DIR, [[[fDefaults stringForKey: @"DownloadFolder"]
|
||||
stringByExpandingTildeInPath] UTF8String]);
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_DOWNLOAD_QUEUE_ENABLED, [fDefaults boolForKey: @"Queue"]);
|
||||
tr_bencDictAddInt(&settings, TR_PREFS_KEY_DOWNLOAD_QUEUE_SIZE, [fDefaults integerForKey: @"QueueDownloadNumber"]);
|
||||
tr_bencDictAddInt(&settings, TR_PREFS_KEY_IDLE_LIMIT, [fDefaults integerForKey: @"IdleLimitMinutes"]);
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_IDLE_LIMIT_ENABLED, [fDefaults boolForKey: @"IdleLimitCheck"]);
|
||||
tr_bencDictAddStr(&settings, TR_PREFS_KEY_INCOMPLETE_DIR, [[[fDefaults stringForKey: @"IncompleteDownloadFolder"]
|
||||
|
@ -307,6 +309,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_PEX_ENABLED, [fDefaults boolForKey: @"PEXGlobal"]);
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_PORT_FORWARDING, [fDefaults boolForKey: @"NatTraversal"]);
|
||||
tr_bencDictAddInt(&settings, TR_PREFS_KEY_QUEUE_STALLED_MINUTES, [fDefaults integerForKey: @"StalledMinutes"]);
|
||||
tr_bencDictAddReal(&settings, TR_PREFS_KEY_RATIO, [fDefaults floatForKey: @"RatioLimit"]);
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_RATIO_ENABLED, [fDefaults boolForKey: @"RatioCheck"]);
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_RENAME_PARTIAL_FILES, [fDefaults boolForKey: @"RenamePartialFiles"]);
|
||||
|
@ -315,6 +318,8 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
tr_bencDictAddInt(&settings, TR_PREFS_KEY_RPC_PORT, [fDefaults integerForKey: @"RPCPort"]);
|
||||
tr_bencDictAddStr(&settings, TR_PREFS_KEY_RPC_USERNAME, [[fDefaults stringForKey: @"RPCUsername"] UTF8String]);
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_RPC_WHITELIST_ENABLED, [fDefaults boolForKey: @"RPCUseWhitelist"]);
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_SEED_QUEUE_ENABLED, [fDefaults boolForKey: @"QueueSeed"]);
|
||||
tr_bencDictAddInt(&settings, TR_PREFS_KEY_SEED_QUEUE_SIZE, [fDefaults integerForKey: @"QueueSeedNumber"]);
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_START, [fDefaults boolForKey: @"AutoStartDownload"]);
|
||||
tr_bencDictAddBool(&settings, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_ENABLED, [fDefaults boolForKey: @"DoneScriptEnabled"]);
|
||||
tr_bencDictAddStr(&settings, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_FILENAME, [[fDefaults stringForKey: @"DoneScriptPath"] UTF8String]);
|
||||
|
@ -446,15 +451,26 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
|
||||
if (history)
|
||||
{
|
||||
NSMutableArray * waitToStartTorrents = [NSMutableArray arrayWithCapacity: (([history count] > 0 && !fPauseOnLaunch) ? [history count]-1 : 0)]; //theoretical max without doing a lot of work
|
||||
|
||||
for (NSDictionary * historyItem in history)
|
||||
{
|
||||
Torrent * torrent;
|
||||
if ((torrent = [[Torrent alloc] initWithHistory: historyItem lib: fLib forcePause: fPauseOnLaunch]))
|
||||
{
|
||||
[fTorrents addObject: torrent];
|
||||
|
||||
NSNumber * waitToStart;
|
||||
if (!fPauseOnLaunch && (waitToStart = [historyItem objectForKey: @"WaitToStart"]) && [waitToStart boolValue])
|
||||
[waitToStartTorrents addObject: torrent];
|
||||
|
||||
[torrent release];
|
||||
}
|
||||
}
|
||||
|
||||
//now that all are loaded, let's set those in the queue to waiting
|
||||
for (Torrent * torrent in waitToStartTorrents)
|
||||
[torrent startTransfer];
|
||||
}
|
||||
|
||||
fBadger = [[Badger alloc] initWithLib: fLib];
|
||||
|
@ -490,6 +506,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
[nc addObserver: fWindow selector: @selector(makeKeyWindow)
|
||||
name: @"MakeWindowKey" object: nil];
|
||||
|
||||
#warning look at this
|
||||
[nc addObserver: self selector: @selector(updateTorrentsInQueue)
|
||||
name: @"UpdateQueue" object: nil];
|
||||
|
||||
|
@ -881,7 +898,8 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
}
|
||||
else
|
||||
{
|
||||
[torrent setWaitToStart: [fDefaults boolForKey: @"AutoStartDownload"]];
|
||||
if ([fDefaults boolForKey: @"AutoStartDownload"])
|
||||
[torrent startTransfer];
|
||||
|
||||
[torrent update];
|
||||
[fTorrents addObject: torrent];
|
||||
|
@ -950,7 +968,8 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
}
|
||||
else
|
||||
{
|
||||
[torrent setWaitToStart: [fDefaults boolForKey: @"AutoStartDownload"]];
|
||||
if ([fDefaults boolForKey: @"AutoStartDownload"])
|
||||
[torrent startTransfer];
|
||||
|
||||
[torrent update];
|
||||
[fTorrents addObject: torrent];
|
||||
|
@ -1175,7 +1194,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
- (void) resumeTorrents: (NSArray *) torrents
|
||||
{
|
||||
for (Torrent * torrent in torrents)
|
||||
[torrent setWaitToStart: YES];
|
||||
[torrent startTransfer];
|
||||
|
||||
[self updateTorrentsInQueue];
|
||||
}
|
||||
|
@ -1190,7 +1209,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
NSMutableArray * torrents = [NSMutableArray arrayWithCapacity: [fTorrents count]];
|
||||
|
||||
for (Torrent * torrent in fTorrents)
|
||||
if (![torrent isActive] && [torrent waitingToStart])
|
||||
if ([torrent waitingToStart])
|
||||
[torrents addObject: torrent];
|
||||
|
||||
[self resumeTorrentsNoWait: torrents];
|
||||
|
@ -1200,11 +1219,9 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
{
|
||||
//iterate through instead of all at once to ensure no conflicts
|
||||
for (Torrent * torrent in torrents)
|
||||
{
|
||||
tr_inf( "restarting a torrent in resumeTorrentsNoWait" );
|
||||
[torrent startTransfer];
|
||||
}
|
||||
[torrent startTransferNoQueue];
|
||||
|
||||
#warning change to updateTorrentsInQueue?
|
||||
[self updateUI];
|
||||
[self applyFilter];
|
||||
[[fWindow toolbar] validateVisibleItems];
|
||||
|
@ -1223,9 +1240,10 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
|
||||
- (void) stopTorrents: (NSArray *) torrents
|
||||
{
|
||||
#warning look into stopping all without starting any
|
||||
//don't want any of these starting then stopping
|
||||
for (Torrent * torrent in torrents)
|
||||
[torrent setWaitToStart: NO];
|
||||
/*for (Torrent * torrent in torrents)
|
||||
[torrent setWaitToStart: NO];*/
|
||||
|
||||
[torrents makeObjectsPerformSelector: @selector(stopTransfer)];
|
||||
|
||||
|
@ -1324,9 +1342,10 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
NSMutableArray * selectedValues = [NSMutableArray arrayWithArray: [fTableView selectedValues]];
|
||||
[selectedValues removeObjectsInArray: torrents];
|
||||
|
||||
#warning look into stopping all without starting any
|
||||
//don't want any of these starting then stopping
|
||||
for (Torrent * torrent in torrents)
|
||||
[torrent setWaitToStart: NO];
|
||||
/*for (Torrent * torrent in torrents)
|
||||
[torrent setWaitToStart: NO];*/
|
||||
|
||||
[fTorrents removeObjectsInArray: torrents];
|
||||
|
||||
|
@ -1707,74 +1726,15 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
[fTotalTorrentsField setStringValue: totalTorrentsString];
|
||||
}
|
||||
|
||||
#warning rename? remove?
|
||||
- (void) updateTorrentsInQueue
|
||||
{
|
||||
NSUInteger desiredDownloadActive = [fDefaults boolForKey: @"Queue"] ? [self numToStartFromQueue: YES] : NSUIntegerMax,
|
||||
desiredSeedActive = [fDefaults boolForKey: @"QueueSeed"] ? [self numToStartFromQueue: NO] : NSUIntegerMax;
|
||||
|
||||
for (Torrent * torrent in fTorrents)
|
||||
{
|
||||
if (desiredDownloadActive == 0 && desiredSeedActive == 0)
|
||||
break;
|
||||
|
||||
if (![torrent isActive] && ![torrent isChecking] && [torrent waitingToStart])
|
||||
{
|
||||
if (![torrent allDownloaded])
|
||||
{
|
||||
if (desiredDownloadActive > 0)
|
||||
{
|
||||
tr_inf( "restarting download torrent in mac queue" );
|
||||
[torrent startTransfer];
|
||||
if ([torrent isActive])
|
||||
--desiredDownloadActive;
|
||||
[torrent update];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (desiredSeedActive > 0)
|
||||
{
|
||||
tr_inf( "restarting seed torrent in mac queue" );
|
||||
[torrent startTransfer];
|
||||
if ([torrent isActive])
|
||||
--desiredSeedActive;
|
||||
[torrent update];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[self updateUI];
|
||||
[self applyFilter];
|
||||
[[fWindow toolbar] validateVisibleItems];
|
||||
[self updateTorrentHistory];
|
||||
}
|
||||
|
||||
- (NSUInteger) numToStartFromQueue: (BOOL) downloadQueue
|
||||
{
|
||||
if (![fDefaults boolForKey: downloadQueue ? @"Queue" : @"QueueSeed"])
|
||||
return 0;
|
||||
|
||||
NSUInteger desired = [fDefaults integerForKey: downloadQueue ? @"QueueDownloadNumber" : @"QueueSeedNumber"];
|
||||
|
||||
for (Torrent * torrent in fTorrents)
|
||||
{
|
||||
if (desired == 0)
|
||||
break;
|
||||
|
||||
if ([torrent isChecking])
|
||||
--desired;
|
||||
else if ([torrent isActive] && ![torrent isStalled] && ![torrent isError])
|
||||
{
|
||||
if ([torrent allDownloaded] != downloadQueue)
|
||||
--desired;
|
||||
}
|
||||
else;
|
||||
}
|
||||
|
||||
return desired;
|
||||
}
|
||||
|
||||
- (void) torrentFinishedDownloading: (NSNotification *) notification
|
||||
{
|
||||
Torrent * torrent = [notification object];
|
||||
|
@ -1808,26 +1768,14 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
//bounce download stack
|
||||
[[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"com.apple.DownloadFileFinished"
|
||||
object: [torrent dataLocation]];
|
||||
|
||||
if ([torrent isActive] && [fDefaults boolForKey: @"QueueSeed"] && [self numToStartFromQueue: NO] == 0)
|
||||
{
|
||||
[torrent stopTransfer];
|
||||
[torrent setWaitToStart: YES];
|
||||
}
|
||||
}
|
||||
|
||||
[self updateTorrentsInQueue];
|
||||
}
|
||||
|
||||
#warning remove?
|
||||
- (void) torrentRestartedDownloading: (NSNotification *) notification
|
||||
{
|
||||
Torrent * torrent = [notification object];
|
||||
if ([torrent isActive] && [fDefaults boolForKey: @"Queue"] && [self numToStartFromQueue: YES] == 0)
|
||||
{
|
||||
[torrent stopTransfer];
|
||||
[torrent setWaitToStart: YES];
|
||||
}
|
||||
|
||||
[self updateTorrentsInQueue];
|
||||
}
|
||||
|
||||
|
@ -2700,6 +2648,8 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
//insert objects at new location
|
||||
NSUInteger insertIndex = topTorrent ? [fTorrents indexOfObject: topTorrent] + 1 : 0;
|
||||
NSIndexSet * insertIndexes = [NSIndexSet indexSetWithIndexesInRange: NSMakeRange(insertIndex, [movingTorrents count])];
|
||||
for (Torrent * torrent in movingTorrents)
|
||||
[torrent setQueueIndex: insertIndex++];
|
||||
[fTorrents insertObjects: movingTorrents atIndexes: insertIndexes];
|
||||
}
|
||||
|
||||
|
@ -4164,6 +4114,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
|||
}
|
||||
}
|
||||
|
||||
#warning handle queue state changes
|
||||
- (void) rpcCallback: (tr_rpc_callback_type) type forTorrentStruct: (struct tr_torrent *) torrentStruct
|
||||
{
|
||||
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
|
||||
|
|
|
@ -762,24 +762,38 @@ tr_session * fHandle;
|
|||
|
||||
- (void) setQueue: (id) sender
|
||||
{
|
||||
//let's just do both - easier that way
|
||||
tr_sessionSetQueueEnabled(fHandle, TR_DOWN, [fDefaults boolForKey: @"Queue"]);
|
||||
tr_sessionSetQueueEnabled(fHandle, TR_UP, [fDefaults boolForKey: @"QueueSeed"]);
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
|
||||
}
|
||||
|
||||
- (void) setQueueNumber: (id) sender
|
||||
{
|
||||
[fDefaults setInteger: [sender intValue] forKey: sender == fQueueDownloadField ? @"QueueDownloadNumber" : @"QueueSeedNumber"];
|
||||
[self setQueue: nil];
|
||||
const NSInteger number = [sender intValue];
|
||||
const BOOL seed = sender == fQueueSeedField;
|
||||
|
||||
[fDefaults setInteger: number forKey: seed ? @"QueueSeedNumber" : @"QueueDownloadNumber"];
|
||||
|
||||
tr_sessionSetQueueSize(fHandle, seed ? TR_UP : TR_DOWN, number);
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
|
||||
}
|
||||
|
||||
- (void) setStalled: (id) sender
|
||||
{
|
||||
#warning do something here
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
|
||||
}
|
||||
|
||||
- (void) setStalledMinutes: (id) sender
|
||||
{
|
||||
[fDefaults setInteger: [sender intValue] forKey: @"StalledMinutes"];
|
||||
[self setStalled: nil];
|
||||
tr_sessionSetQueueStalledMinutes(fHandle, [fDefaults integerForKey: @"StalledMinutes"]);
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
|
||||
}
|
||||
|
||||
- (void) setDownloadLocation: (id) sender
|
||||
|
@ -1221,6 +1235,20 @@ tr_session * fHandle;
|
|||
const NSUInteger idleLimitMin = tr_sessionGetIdleLimit(fHandle);
|
||||
[fDefaults setInteger: idleLimitMin forKey: @"IdleLimitMinutes"];
|
||||
|
||||
//queue
|
||||
const BOOL downloadQueue = tr_sessionGetQueueEnabled(fHandle, TR_DOWN);
|
||||
[fDefaults setBool: downloadQueue forKey: @"Queue"];
|
||||
|
||||
const int downloadQueueNum = tr_sessionGetQueueSize(fHandle, TR_DOWN);
|
||||
[fDefaults setInteger: downloadQueueNum forKey: @"QueueDownloadNumber"];
|
||||
|
||||
const BOOL seedQueue = tr_sessionGetQueueEnabled(fHandle, TR_UP);
|
||||
[fDefaults setBool: seedQueue forKey: @"QueueSeed"];
|
||||
[fDefaults setBool: downloadQueue forKey: @"Queue"];
|
||||
|
||||
const int seedQueueNum = tr_sessionGetQueueSize(fHandle, TR_UP);
|
||||
[fDefaults setInteger: seedQueueNum forKey: @"QueueSeedNumber"];
|
||||
|
||||
//done script
|
||||
const BOOL doneScriptEnabled = tr_sessionIsTorrentDoneScriptEnabled(fHandle);
|
||||
[fDefaults setBool: doneScriptEnabled forKey: @"DoneScriptEnabled"];
|
||||
|
|
|
@ -47,8 +47,6 @@
|
|||
NSIndexSet * fPreviousFinishedIndexes;
|
||||
NSDate * fPreviousFinishedIndexesDate;
|
||||
|
||||
BOOL fWaitToStart, fStalled;
|
||||
|
||||
NSInteger fGroupValue;
|
||||
|
||||
BOOL fResumeOnWake;
|
||||
|
@ -73,15 +71,18 @@
|
|||
- (void) getAvailability: (int8_t *) tab size: (NSInteger) size;
|
||||
- (void) getAmountFinished: (float *) tab size: (NSInteger) size;
|
||||
- (NSIndexSet *) previousFinishedPieces;
|
||||
-(void) setPreviousFinishedPieces: (NSIndexSet *) indexes;
|
||||
- (void) setPreviousFinishedPieces: (NSIndexSet *) indexes;
|
||||
|
||||
- (void) update;
|
||||
|
||||
- (void) startTransferNoQueue;
|
||||
- (void) startTransfer;
|
||||
- (void) stopTransfer;
|
||||
- (void) sleep;
|
||||
- (void) wakeUp;
|
||||
|
||||
- (void) setQueueIndex: (NSUInteger) index;
|
||||
|
||||
- (void) manualAnnounce;
|
||||
- (BOOL) canManualAnnounce;
|
||||
|
||||
|
@ -112,7 +113,6 @@
|
|||
- (void) setMaxPeerConnect: (uint16_t) count;
|
||||
- (uint16_t) maxPeerConnect;
|
||||
|
||||
- (void) setWaitToStart: (BOOL) wait;
|
||||
- (BOOL) waitingToStart;
|
||||
|
||||
- (tr_priority_t) priority;
|
||||
|
|
122
macosx/Torrent.m
122
macosx/Torrent.m
|
@ -37,7 +37,6 @@
|
|||
|
||||
- (id) initWithPath: (NSString *) path hash: (NSString *) hashString torrentStruct: (tr_torrent *) torrentStruct
|
||||
magnetAddress: (NSString *) magnetAddress lib: (tr_session *) lib
|
||||
waitToStart: (NSNumber *) waitToStart
|
||||
groupValue: (NSNumber *) groupValue
|
||||
timeMachineExcludeLocation: (NSString *) timeMachineExclude
|
||||
downloadFolder: (NSString *) downloadFolder
|
||||
|
@ -103,7 +102,7 @@ int trashDataFile(const char * filename)
|
|||
lib: (tr_session *) lib
|
||||
{
|
||||
self = [self initWithPath: path hash: nil torrentStruct: NULL magnetAddress: nil lib: lib
|
||||
waitToStart: nil groupValue: nil
|
||||
groupValue: nil
|
||||
timeMachineExcludeLocation: nil
|
||||
downloadFolder: location
|
||||
legacyIncompleteFolder: nil];
|
||||
|
@ -119,7 +118,7 @@ int trashDataFile(const char * filename)
|
|||
- (id) initWithTorrentStruct: (tr_torrent *) torrentStruct location: (NSString *) location lib: (tr_session *) lib
|
||||
{
|
||||
self = [self initWithPath: nil hash: nil torrentStruct: torrentStruct magnetAddress: nil lib: lib
|
||||
waitToStart: nil groupValue: nil
|
||||
groupValue: nil
|
||||
timeMachineExcludeLocation: nil
|
||||
downloadFolder: location
|
||||
legacyIncompleteFolder: nil];
|
||||
|
@ -130,7 +129,7 @@ int trashDataFile(const char * filename)
|
|||
- (id) initWithMagnetAddress: (NSString *) address location: (NSString *) location lib: (tr_session *) lib
|
||||
{
|
||||
self = [self initWithPath: nil hash: nil torrentStruct: nil magnetAddress: address
|
||||
lib: lib waitToStart: nil groupValue: nil
|
||||
lib: lib groupValue: nil
|
||||
timeMachineExcludeLocation: nil
|
||||
downloadFolder: location legacyIncompleteFolder: nil];
|
||||
|
||||
|
@ -144,7 +143,6 @@ int trashDataFile(const char * filename)
|
|||
torrentStruct: NULL
|
||||
magnetAddress: nil
|
||||
lib: lib
|
||||
waitToStart: [history objectForKey: @"WaitToStart"]
|
||||
groupValue: [history objectForKey: @"GroupValue"]
|
||||
timeMachineExcludeLocation: [history objectForKey: @"TimeMachineExcludeLocation"]
|
||||
downloadFolder: [history objectForKey: @"DownloadFolder"] //upgrading from versions < 1.80
|
||||
|
@ -158,9 +156,12 @@ int trashDataFile(const char * filename)
|
|||
if (!pause && (active = [history objectForKey: @"Active"]) && [active boolValue])
|
||||
{
|
||||
fStat = tr_torrentStat(fHandle);
|
||||
[self startTransfer];
|
||||
[self startTransferNoQueue];
|
||||
}
|
||||
|
||||
//fWaitToStart = waitToStart && [waitToStart boolValue];
|
||||
|
||||
|
||||
//upgrading from versions < 1.30: get old added, activity, and done dates
|
||||
NSDate * date;
|
||||
if ((date = [history objectForKey: @"Date"]))
|
||||
|
@ -194,7 +195,7 @@ int trashDataFile(const char * filename)
|
|||
[self torrentLocation], @"InternalTorrentPath",
|
||||
[self hashString], @"TorrentHash",
|
||||
[NSNumber numberWithBool: [self isActive]], @"Active",
|
||||
[NSNumber numberWithBool: fWaitToStart], @"WaitToStart",
|
||||
[NSNumber numberWithBool: [self waitingToStart]], @"WaitToStart",
|
||||
[NSNumber numberWithInt: fGroupValue], @"GroupValue", nil];
|
||||
|
||||
if (fTimeMachineExclude)
|
||||
|
@ -289,37 +290,30 @@ int trashDataFile(const char * filename)
|
|||
|
||||
- (void) update
|
||||
{
|
||||
//get previous status values before update
|
||||
BOOL wasChecking = NO, wasError = NO, wasStalled = NO;
|
||||
if (fStat != NULL)
|
||||
{
|
||||
wasChecking = [self isChecking];
|
||||
wasError = [self isError];
|
||||
wasStalled = fStalled;
|
||||
}
|
||||
|
||||
fStat = tr_torrentStat(fHandle);
|
||||
|
||||
//check if stalled (stored because based on time and needs to check if it was previously stalled)
|
||||
fStalled = [self isActive] && [fDefaults boolForKey: @"CheckStalled"]
|
||||
&& [self stalledMinutes] > [fDefaults integerForKey: @"StalledMinutes"];
|
||||
|
||||
//update queue for checking (from downloading to seeding), stalled, or error
|
||||
if ((wasChecking && ![self isChecking]) || (wasStalled != fStalled) || (!wasError && [self isError] && [self isActive]))
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
|
||||
|
||||
//when the data first appears, update time machine exclusion
|
||||
if (!fTimeMachineExclude)
|
||||
[self updateTimeMachineExclude];
|
||||
}
|
||||
|
||||
- (void) startTransfer
|
||||
- (void) startTransferNoQueue
|
||||
{
|
||||
fWaitToStart = NO;
|
||||
|
||||
if (![self isActive] && [self alertForRemainingDiskSpace])
|
||||
{
|
||||
tr_ninf( fInfo->name, "restarting via startTransfer" );
|
||||
tr_torrentStartNow(fHandle);
|
||||
[self update];
|
||||
|
||||
//capture, specifically, stop-seeding settings changing to unlimited
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateOptions" object: nil];
|
||||
}
|
||||
}
|
||||
|
||||
#warning merge
|
||||
- (void) startTransfer
|
||||
{
|
||||
if (![self isActive] && ![self waitingToStart] && [self alertForRemainingDiskSpace])
|
||||
{
|
||||
tr_torrentStart(fHandle);
|
||||
[self update];
|
||||
|
||||
|
@ -330,13 +324,12 @@ int trashDataFile(const char * filename)
|
|||
|
||||
- (void) stopTransfer
|
||||
{
|
||||
fWaitToStart = NO;
|
||||
|
||||
if ([self isActive])
|
||||
if ([self isActive] || [self waitingToStart])
|
||||
{
|
||||
tr_torrentStop(fHandle);
|
||||
[self update];
|
||||
|
||||
#warning still needed?
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: @"UpdateQueue" object: self];
|
||||
}
|
||||
}
|
||||
|
@ -356,6 +349,11 @@ int trashDataFile(const char * filename)
|
|||
}
|
||||
}
|
||||
|
||||
- (void) setQueueIndex: (NSUInteger) index
|
||||
{
|
||||
tr_torrentSetQueuePosition(fHandle, index);
|
||||
}
|
||||
|
||||
- (void) manualAnnounce
|
||||
{
|
||||
tr_torrentManualUpdate(fHandle);
|
||||
|
@ -475,15 +473,9 @@ int trashDataFile(const char * filename)
|
|||
{
|
||||
return tr_torrentGetPeerLimit(fHandle);
|
||||
}
|
||||
|
||||
- (void) setWaitToStart: (BOOL) wait
|
||||
{
|
||||
fWaitToStart = wait;
|
||||
}
|
||||
|
||||
- (BOOL) waitingToStart
|
||||
{
|
||||
return fWaitToStart;
|
||||
return fStat->activity == TR_STATUS_DOWNLOAD_WAIT || fStat->activity == TR_STATUS_SEED_WAIT;
|
||||
}
|
||||
|
||||
- (tr_priority_t) priority
|
||||
|
@ -622,6 +614,8 @@ int trashDataFile(const char * filename)
|
|||
|
||||
- (NSString *) name
|
||||
{
|
||||
#warning remove
|
||||
//return [NSString stringWithFormat: @"%d %@", fStat->queuePosition, [NSString stringWithUTF8String: fInfo->name]];
|
||||
return fInfo->name != NULL ? [NSString stringWithUTF8String: fInfo->name] : fHashString;
|
||||
}
|
||||
|
||||
|
@ -840,7 +834,7 @@ int trashDataFile(const char * filename)
|
|||
|
||||
- (BOOL) isActive
|
||||
{
|
||||
return fStat->activity != TR_STATUS_STOPPED;
|
||||
return fStat->activity != TR_STATUS_STOPPED && fStat->activity != TR_STATUS_DOWNLOAD_WAIT && fStat->activity != TR_STATUS_SEED_WAIT;
|
||||
}
|
||||
|
||||
- (BOOL) isSeeding
|
||||
|
@ -1050,18 +1044,20 @@ int trashDataFile(const char * filename)
|
|||
switch (fStat->activity)
|
||||
{
|
||||
case TR_STATUS_STOPPED:
|
||||
if (fWaitToStart)
|
||||
{
|
||||
string = ![self allDownloaded]
|
||||
? [NSLocalizedString(@"Waiting to download", "Torrent -> status string") stringByAppendingEllipsis]
|
||||
: [NSLocalizedString(@"Waiting to seed", "Torrent -> status string") stringByAppendingEllipsis];
|
||||
}
|
||||
else if ([self isFinishedSeeding])
|
||||
if ([self isFinishedSeeding])
|
||||
string = NSLocalizedString(@"Seeding complete", "Torrent -> status string");
|
||||
else
|
||||
string = NSLocalizedString(@"Paused", "Torrent -> status string");
|
||||
break;
|
||||
|
||||
|
||||
case TR_STATUS_DOWNLOAD_WAIT:
|
||||
string = [NSLocalizedString(@"Waiting to download", "Torrent -> status string") stringByAppendingEllipsis];
|
||||
break;
|
||||
|
||||
case TR_STATUS_SEED_WAIT:
|
||||
string = [NSLocalizedString(@"Waiting to seed", "Torrent -> status string") stringByAppendingEllipsis];
|
||||
break;
|
||||
|
||||
case TR_STATUS_CHECK_WAIT:
|
||||
string = [NSLocalizedString(@"Waiting to check existing data", "Torrent -> status string") stringByAppendingEllipsis];
|
||||
break;
|
||||
|
@ -1104,7 +1100,7 @@ int trashDataFile(const char * filename)
|
|||
[self peersGettingFromUs]];
|
||||
}
|
||||
|
||||
if (fStalled)
|
||||
if ([self isStalled])
|
||||
string = [NSLocalizedString(@"Stalled", "Torrent -> status string") stringByAppendingFormat: @", %@", string];
|
||||
}
|
||||
|
||||
|
@ -1130,17 +1126,17 @@ int trashDataFile(const char * filename)
|
|||
switch (fStat->activity)
|
||||
{
|
||||
case TR_STATUS_STOPPED:
|
||||
if (fWaitToStart)
|
||||
{
|
||||
string = ![self allDownloaded]
|
||||
? [NSLocalizedString(@"Waiting to download", "Torrent -> status string") stringByAppendingEllipsis]
|
||||
: [NSLocalizedString(@"Waiting to seed", "Torrent -> status string") stringByAppendingEllipsis];
|
||||
}
|
||||
else if ([self isFinishedSeeding])
|
||||
if ([self isFinishedSeeding])
|
||||
string = NSLocalizedString(@"Seeding complete", "Torrent -> status string");
|
||||
else
|
||||
string = NSLocalizedString(@"Paused", "Torrent -> status string");
|
||||
break;
|
||||
|
||||
case TR_STATUS_DOWNLOAD_WAIT:
|
||||
string = [NSLocalizedString(@"Waiting to download", "Torrent -> status string") stringByAppendingEllipsis];
|
||||
|
||||
case TR_STATUS_SEED_WAIT:
|
||||
string = [NSLocalizedString(@"Waiting to seed", "Torrent -> status string") stringByAppendingEllipsis];
|
||||
|
||||
case TR_STATUS_CHECK_WAIT:
|
||||
string = [NSLocalizedString(@"Waiting to check existing data", "Torrent -> status string") stringByAppendingEllipsis];
|
||||
|
@ -1180,13 +1176,15 @@ int trashDataFile(const char * filename)
|
|||
switch (fStat->activity)
|
||||
{
|
||||
case TR_STATUS_STOPPED:
|
||||
case TR_STATUS_DOWNLOAD_WAIT:
|
||||
case TR_STATUS_SEED_WAIT:
|
||||
{
|
||||
NSString * string = NSLocalizedString(@"Paused", "Torrent -> status string");
|
||||
|
||||
NSString * extra = nil;
|
||||
if (fWaitToStart)
|
||||
if ([self waitingToStart])
|
||||
{
|
||||
extra = ![self allDownloaded]
|
||||
extra = fStat->activity == TR_STATUS_DOWNLOAD_WAIT
|
||||
? NSLocalizedString(@"Waiting to download", "Torrent -> status string")
|
||||
: NSLocalizedString(@"Waiting to seed", "Torrent -> status string");
|
||||
}
|
||||
|
@ -1210,10 +1208,6 @@ int trashDataFile(const char * filename)
|
|||
|
||||
case TR_STATUS_SEED:
|
||||
return NSLocalizedString(@"Seeding", "Torrent -> status string");
|
||||
|
||||
default:
|
||||
NSAssert1(NO, @"Unknown activity %d for state string", fStat->activity);
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1536,7 +1530,7 @@ int trashDataFile(const char * filename)
|
|||
|
||||
- (BOOL) isStalled
|
||||
{
|
||||
return fStalled;
|
||||
return fStat->isStalled;
|
||||
}
|
||||
|
||||
- (void) updateTimeMachineExclude
|
||||
|
@ -1567,7 +1561,7 @@ int trashDataFile(const char * filename)
|
|||
{
|
||||
if (![self isActive]) //paused
|
||||
{
|
||||
if (fWaitToStart)
|
||||
if ([self waitingToStart])
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
|
@ -1613,7 +1607,6 @@ int trashDataFile(const char * filename)
|
|||
|
||||
- (id) initWithPath: (NSString *) path hash: (NSString *) hashString torrentStruct: (tr_torrent *) torrentStruct
|
||||
magnetAddress: (NSString *) magnetAddress lib: (tr_session *) lib
|
||||
waitToStart: (NSNumber *) waitToStart
|
||||
groupValue: (NSNumber *) groupValue
|
||||
timeMachineExcludeLocation: (NSString *) timeMachineExclude
|
||||
downloadFolder: (NSString *) downloadFolder
|
||||
|
@ -1669,7 +1662,6 @@ int trashDataFile(const char * filename)
|
|||
|
||||
fHashString = [[NSString alloc] initWithUTF8String: fInfo->hashString];
|
||||
|
||||
fWaitToStart = waitToStart && [waitToStart boolValue];
|
||||
fResumeOnWake = NO;
|
||||
|
||||
//don't do after this point - it messes with auto-group functionality
|
||||
|
|
Loading…
Reference in New Issue