1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-02-20 21:26:53 +00:00

Add a mechanism for enabling/disabling the stalled minutes feature. This is a pre-existing feature in the Mac client.

This commit is contained in:
Jordan Lee 2011-08-07 19:24:33 +00:00
parent 0e48418f26
commit 313bd9e211
5 changed files with 45 additions and 3 deletions

View file

@ -1559,10 +1559,14 @@ sessionSet( tr_session * session,
tr_blocklistSetURL( session, str );
if( tr_bencDictFindStr( args_in, TR_PREFS_KEY_DOWNLOAD_DIR, &str ) )
tr_sessionSetDownloadDir( session, str );
if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_DOWNLOAD_QUEUE_ENABLED, &boolVal ) )
tr_sessionSetQueueEnabled ( session, TR_DOWN, boolVal );
if( tr_bencDictFindInt( args_in, TR_PREFS_KEY_QUEUE_STALLED_MINUTES, &i ) )
tr_sessionSetQueueStalledMinutes( session, i );
if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_QUEUE_STALLED_ENABLED, &boolVal ) )
tr_sessionSetQueueStalledEnabled( session, boolVal );
if( tr_bencDictFindInt( args_in, TR_PREFS_KEY_DOWNLOAD_QUEUE_SIZE, &i ) )
tr_sessionSetQueueSize( session, TR_DOWN, i );
if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_DOWNLOAD_QUEUE_ENABLED, &boolVal ) )
tr_sessionSetQueueEnabled ( session, TR_DOWN, boolVal );
if( tr_bencDictFindStr( args_in, TR_PREFS_KEY_INCOMPLETE_DIR, &str ) )
tr_sessionSetIncompleteDir( session, str );
if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_INCOMPLETE_DIR_ENABLED, &boolVal ) )
@ -1730,6 +1734,8 @@ sessionGet( tr_session * s,
tr_bencDictAddBool( d, TR_PREFS_KEY_DSPEED_ENABLED, tr_sessionIsSpeedLimited( s, TR_DOWN ) );
tr_bencDictAddStr ( d, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_FILENAME, tr_sessionGetTorrentDoneScript( s ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_ENABLED, tr_sessionIsTorrentDoneScriptEnabled( s ) );
tr_bencDictAddInt ( d, TR_PREFS_KEY_QUEUE_STALLED_MINUTES, tr_sessionGetQueueStalledMinutes( s ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_QUEUE_STALLED_ENABLED, tr_sessionGetQueueStalledEnabled( s ) );
tr_formatter_get_units( tr_bencDictAddDict( d, "units", 0 ) );
tr_bencDictAddStr ( d, "version", LONG_VERSION_STRING );
switch( tr_sessionGetEncryption( s ) ) {

View file

@ -332,6 +332,7 @@ tr_sessionGetDefaultSettings( tr_benc * d )
tr_bencDictAddBool( d, TR_PREFS_KEY_PORT_FORWARDING, true );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PREALLOCATION, TR_PREALLOCATE_SPARSE );
tr_bencDictAddBool( d, TR_PREFS_KEY_PREFETCH_ENABLED, DEFAULT_PREFETCH_ENABLED );
tr_bencDictAddBool( d, TR_PREFS_KEY_QUEUE_STALLED_ENABLED, true );
tr_bencDictAddInt ( d, TR_PREFS_KEY_QUEUE_STALLED_MINUTES, 30 );
tr_bencDictAddReal( d, TR_PREFS_KEY_RATIO, 2.0 );
tr_bencDictAddBool( d, TR_PREFS_KEY_RATIO_ENABLED, false );
@ -402,6 +403,7 @@ tr_sessionGetSettings( tr_session * s, struct tr_benc * d )
tr_bencDictAddBool( d, TR_PREFS_KEY_PORT_FORWARDING, tr_sessionIsPortForwardingEnabled( s ) );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PREALLOCATION, s->preallocationMode );
tr_bencDictAddInt ( d, TR_PREFS_KEY_PREFETCH_ENABLED, s->isPrefetchEnabled );
tr_bencDictAddBool( d, TR_PREFS_KEY_QUEUE_STALLED_ENABLED, tr_sessionGetQueueStalledEnabled( s ) );
tr_bencDictAddInt ( d, TR_PREFS_KEY_QUEUE_STALLED_MINUTES, tr_sessionGetQueueStalledMinutes( s ) );
tr_bencDictAddReal( d, TR_PREFS_KEY_RATIO, s->desiredRatio );
tr_bencDictAddBool( d, TR_PREFS_KEY_RATIO_ENABLED, s->isRatioLimited );
@ -792,6 +794,8 @@ sessionSetImpl( void * vdata )
/* torrent queues */
if( tr_bencDictFindInt( settings, TR_PREFS_KEY_QUEUE_STALLED_MINUTES, &i ) )
tr_sessionSetQueueStalledMinutes( session, i );
if( tr_bencDictFindBool( settings, TR_PREFS_KEY_QUEUE_STALLED_ENABLED, &boolVal ) )
tr_sessionSetQueueStalledEnabled( session, boolVal );
if( tr_bencDictFindInt( settings, TR_PREFS_KEY_DOWNLOAD_QUEUE_SIZE, &i ) )
tr_sessionSetQueueSize( session, TR_DOWN, i );
if( tr_bencDictFindBool( settings, TR_PREFS_KEY_DOWNLOAD_QUEUE_ENABLED, &boolVal ) )
@ -2674,6 +2678,23 @@ tr_sessionSetQueueStalledMinutes( tr_session * session, int minutes )
}
void
tr_sessionSetQueueStalledEnabled( tr_session * session, bool is_enabled )
{
assert( tr_isSession( session ) );
assert( tr_isBool( is_enabled ) );
session->stalledEnabled = is_enabled;
}
bool
tr_sessionGetQueueStalledEnabled( const tr_session * session )
{
assert( tr_isSession( session ) );
return session->stalledEnabled;
}
int
tr_sessionGetQueueStalledMinutes( const tr_session * session )
{

View file

@ -111,6 +111,7 @@ struct tr_session
tr_benc removedTorrents;
bool stalledEnabled;
bool queueEnabled[2];
int queueSize[2];
int queueStalledMinutes;

View file

@ -1141,7 +1141,8 @@ torrentGetIdleSecs( const tr_torrent * tor )
bool
tr_torrentIsStalled( const tr_torrent * tor )
{
return torrentGetIdleSecs( tor ) > ( tr_sessionGetQueueStalledMinutes( tor->session ) * 60 );
return tr_sessionGetQueueStalledEnabled( tor->session )
&& ( torrentGetIdleSecs( tor ) > ( tr_sessionGetQueueStalledMinutes( tor->session ) * 60 ) );
}

View file

@ -209,6 +209,7 @@ const char* tr_getDefaultDownloadDir( void );
#define TR_PREFS_KEY_SEED_QUEUE_SIZE "seed-queue-size"
#define TR_PREFS_KEY_SEED_QUEUE_ENABLED "seed-queue-enabled"
#define TR_PREFS_KEY_RPC_WHITELIST "rpc-whitelist"
#define TR_PREFS_KEY_QUEUE_STALLED_ENABLED "queue-stalled-enabled"
#define TR_PREFS_KEY_QUEUE_STALLED_MINUTES "queue-stalled-minutes"
#define TR_PREFS_KEY_DSPEED_KBps "speed-limit-down"
#define TR_PREFS_KEY_DSPEED_ENABLED "speed-limit-down-enabled"
@ -801,6 +802,9 @@ void tr_sessionSetQueueEnabled ( tr_session *, tr_direction, bool do_limit_simu
/** @brief Return true if we're limiting how many torrents can concurrently download (TR_DOWN) or seed (TR_UP) at the same time */
bool tr_sessionGetQueueEnabled ( const tr_session *, tr_direction );
/**
**/
/** @brief Consider torrent as 'stalled' when it's been inactive for N minutes.
Stalled torrents are left running but are not counted by tr_sessionGetQueueSize(). */
void tr_sessionSetQueueStalledMinutes( tr_session *, int minutes );
@ -808,6 +812,15 @@ void tr_sessionSetQueueStalledMinutes( tr_session *, int minutes );
/** @return the number of minutes a torrent can be idle before being considered as stalled */
int tr_sessionGetQueueStalledMinutes( const tr_session * );
/** @brief Set whether or not to count torrents idle for over N minutes as 'stalled' */
void tr_sessionSetQueueStalledEnabled( tr_session *, bool );
/** @return true if we're torrents idle for over N minutes will be flagged as 'stalled' */
bool tr_sessionGetQueueStalledEnabled( const tr_session * );
/**
**/
/** @brief Set a callback that is invoked when the queue starts a torrent */
void tr_torrentSetQueueStartCallback( tr_torrent * torrent, void (*callback)( tr_torrent *, void * ), void * user_data );