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:
parent
0e48418f26
commit
313bd9e211
5 changed files with 45 additions and 3 deletions
|
@ -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 ) ) {
|
||||
|
|
|
@ -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 )
|
||||
{
|
||||
|
|
|
@ -111,6 +111,7 @@ struct tr_session
|
|||
|
||||
tr_benc removedTorrents;
|
||||
|
||||
bool stalledEnabled;
|
||||
bool queueEnabled[2];
|
||||
int queueSize[2];
|
||||
int queueStalledMinutes;
|
||||
|
|
|
@ -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 ) );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
||||
|
|
Loading…
Reference in a new issue