Ignore:
Timestamp:
Aug 1, 2011, 10:24:24 PM (11 years ago)
Author:
jordan
Message:

(trunk) #671 "torrent queuing" -- Preliminary implementation. Covers libtransmission; GTK+ and Qt clients, and rudimentary web client support.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/rpcimpl.c

    r12521 r12607  
    187187}
    188188
     189static void
     190notifyBatchChange( tr_session * session, tr_torrent ** torrents, int n )
     191{
     192    int i;
     193    for( i=0; i<n; ++i )
     194        notify( session, TR_RPC_TORRENT_CHANGED, torrents[i] );
     195}
     196
     197static const char*
     198queueMoveTop( tr_session               * session,
     199              tr_benc                  * args_in,
     200              tr_benc                  * args_out UNUSED,
     201              struct tr_rpc_idle_data  * idle_data UNUSED )
     202{
     203    int n;
     204    tr_torrent ** torrents = getTorrents( session, args_in, &n );
     205    tr_torrentsQueueMoveTop( torrents, n );
     206    notifyBatchChange( session, torrents, n );
     207    tr_free( torrents );
     208    return NULL;
     209}
     210
     211static const char*
     212queueMoveUp( tr_session               * session,
     213             tr_benc                  * args_in,
     214             tr_benc                  * args_out UNUSED,
     215             struct tr_rpc_idle_data  * idle_data UNUSED )
     216{
     217    int n;
     218    tr_torrent ** torrents = getTorrents( session, args_in, &n );
     219    tr_torrentsQueueMoveUp( torrents, n );
     220    notifyBatchChange( session, torrents, n );
     221    tr_free( torrents );
     222    return NULL;
     223}
     224
     225static const char*
     226queueMoveDown( tr_session               * session,
     227               tr_benc                  * args_in,
     228               tr_benc                  * args_out UNUSED,
     229               struct tr_rpc_idle_data  * idle_data UNUSED )
     230{
     231    int n;
     232    tr_torrent ** torrents = getTorrents( session, args_in, &n );
     233    tr_torrentsQueueMoveDown( torrents, n );
     234    notifyBatchChange( session, torrents, n );
     235    tr_free( torrents );
     236    return NULL;
     237}
     238
     239static const char*
     240queueMoveBottom( tr_session               * session,
     241                 tr_benc                  * args_in,
     242                 tr_benc                  * args_out UNUSED,
     243                 struct tr_rpc_idle_data  * idle_data UNUSED )
     244{
     245    int n;
     246    tr_torrent ** torrents = getTorrents( session, args_in, &n );
     247    tr_torrentsQueueMoveBottom( torrents, n );
     248    notifyBatchChange( session, torrents, n );
     249    tr_free( torrents );
     250    return NULL;
     251}
     252
    189253static const char*
    190254torrentStart( tr_session               * session,
     
    212276
    213277static const char*
     278torrentStartNow( tr_session               * session,
     279                 tr_benc                  * args_in,
     280                 tr_benc                  * args_out UNUSED,
     281                 struct tr_rpc_idle_data  * idle_data UNUSED )
     282{
     283    int           i, torrentCount;
     284    tr_torrent ** torrents = getTorrents( session, args_in, &torrentCount );
     285
     286    assert( idle_data == NULL );
     287
     288    for( i = 0; i < torrentCount; ++i )
     289    {
     290        tr_torrent * tor = torrents[i];
     291        if( !tor->isRunning )
     292        {
     293            tr_torrentStartNow( tor );
     294            notify( session, TR_RPC_TORRENT_STARTED, tor );
     295        }
     296    }
     297    tr_free( torrents );
     298    return NULL;
     299}
     300
     301static const char*
    214302torrentStop( tr_session               * session,
    215303             tr_benc                  * args_in,
     
    226314        tr_torrent * tor = torrents[i];
    227315
    228         if( tor->isRunning )
     316        if( tor->isRunning || ( tor->queuePosition >= 0 ) )
    229317        {
    230318            tor->isStopping = true;
     
    579667            tr_bencListAddInt( p, inf->files[i].priority );
    580668    }
     669    else if( tr_streq( key, keylen, "queuePosition" ) )
     670        tr_bencDictAddInt( d, key, st->queuePosition );
    581671    else if( tr_streq( key, keylen, "rateDownload" ) )
    582672        tr_bencDictAddInt( d, key, toSpeedBytes( st->pieceDownloadSpeed_KBps ) );
     
    10181108        if( tr_bencDictFindInt( args_in, "seedRatioMode", &tmp ) )
    10191109            tr_torrentSetRatioMode( tor, tmp );
     1110        if( tr_bencDictFindInt( args_in, "queuePosition", &tmp ) )
     1111            tr_torrentSetQueuePosition( tor, tmp );
    10201112        if( !errmsg && tr_bencDictFindList( args_in, "trackerAdd", &trackers ) )
    10211113            errmsg = addTrackerUrls( tor, trackers );
     
    14661558    if( tr_bencDictFindStr( args_in, TR_PREFS_KEY_DOWNLOAD_DIR, &str ) )
    14671559        tr_sessionSetDownloadDir( session, str );
     1560    if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_DOWNLOAD_QUEUE_ENABLED, &boolVal ) )
     1561        tr_sessionSetQueueEnabled ( session, TR_DOWN, boolVal );
     1562    if( tr_bencDictFindInt( args_in, TR_PREFS_KEY_DOWNLOAD_QUEUE_SIZE, &i ) )
     1563        tr_sessionSetQueueSize( session, TR_DOWN, i );
    14681564    if( tr_bencDictFindStr( args_in, TR_PREFS_KEY_INCOMPLETE_DIR, &str ) )
    14691565        tr_sessionSetIncompleteDir( session, str );
     
    15001596    if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_START, &boolVal ) )
    15011597        tr_sessionSetPaused( session, !boolVal );
     1598    if( tr_bencDictFindBool( args_in, TR_PREFS_KEY_SEED_QUEUE_ENABLED, &boolVal ) )
     1599        tr_sessionSetQueueEnabled ( session, TR_UP, boolVal );
     1600    if( tr_bencDictFindInt( args_in, TR_PREFS_KEY_SEED_QUEUE_SIZE, &i ) )
     1601        tr_sessionSetQueueSize( session, TR_UP, i );
    15021602    if( tr_bencDictFindStr( args_in, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_FILENAME, &str ) )
    15031603        tr_sessionSetTorrentDoneScript( session, str );
     
    15981698    tr_bencDictAddStr ( d, "config-dir", tr_sessionGetConfigDir( s ) );
    15991699    tr_bencDictAddStr ( d, TR_PREFS_KEY_DOWNLOAD_DIR, tr_sessionGetDownloadDir( s ) );
     1700    tr_bencDictAddBool( d, TR_PREFS_KEY_DOWNLOAD_QUEUE_ENABLED, tr_sessionGetQueueEnabled( s, TR_DOWN ) );
     1701    tr_bencDictAddInt ( d, TR_PREFS_KEY_DOWNLOAD_QUEUE_SIZE, tr_sessionGetQueueSize( s, TR_DOWN ) );
    16001702    tr_bencDictAddInt ( d, "download-dir-free-space",  tr_sessionGetDownloadDirFreeSpace( s ) );
    16011703    tr_bencDictAddInt ( d, TR_PREFS_KEY_PEER_LIMIT_GLOBAL, tr_sessionGetPeerLimit( s ) );
     
    16171719    tr_bencDictAddInt ( d, TR_PREFS_KEY_IDLE_LIMIT, tr_sessionGetIdleLimit( s ) );
    16181720    tr_bencDictAddBool( d, TR_PREFS_KEY_IDLE_LIMIT_ENABLED, tr_sessionIsIdleLimited( s ) );
     1721    tr_bencDictAddBool( d, TR_PREFS_KEY_SEED_QUEUE_ENABLED, tr_sessionGetQueueEnabled( s, TR_UP ) );
     1722    tr_bencDictAddInt ( d, TR_PREFS_KEY_SEED_QUEUE_SIZE, tr_sessionGetQueueSize( s, TR_UP ) );
    16191723    tr_bencDictAddBool( d, TR_PREFS_KEY_START, !tr_sessionGetPaused( s ) );
    16201724    tr_bencDictAddBool( d, TR_PREFS_KEY_TRASH_ORIGINAL, tr_sessionGetDeleteSource( s ) );
     
    16771781    { "torrent-set-location",  true,  torrentSetLocation  },
    16781782    { "torrent-start",         true,  torrentStart        },
     1783    { "torrent-start-now",     true,  torrentStartNow     },
    16791784    { "torrent-stop",          true,  torrentStop         },
    16801785    { "torrent-verify",        true,  torrentVerify       },
    1681     { "torrent-reannounce",    true,  torrentReannounce   }
     1786    { "torrent-reannounce",    true,  torrentReannounce   },
     1787    { "queue-move-top",        true,  queueMoveTop        },
     1788    { "queue-move-up",         true,  queueMoveUp         },
     1789    { "queue-move-down",       true,  queueMoveDown       },
     1790    { "queue-move-bottom",     true,  queueMoveBottom     }
    16821791};
    16831792
Note: See TracChangeset for help on using the changeset viewer.