Changeset 6199


Ignore:
Timestamp:
Jun 16, 2008, 3:47:50 AM (13 years ago)
Author:
charles
Message:

(rpc) simplify the rpc accessors

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/daemon/remote.c

    r6107 r6199  
    149149        char buf[MAX_PATH_LENGTH];
    150150        int addArg = TRUE;
     151        int64_t fields = 0;
    151152        tr_benc top, *args;
    152153        tr_bencInitDict( &top, 3 );
     
    194195                      tr_bencDictAddStr( args, "download-dir", absolutify(buf,sizeof(buf),optarg) );
    195196                      break;
    196             case 'l': tr_bencDictAddStr( &top, "method", "torrent-list" );
     197            case 'l': tr_bencDictAddStr( &top, "method", "torrent-info" );
    197198                      tr_bencDictAddInt( &top, "tag", TAG_LIST );
     199                      fields = TR_RPC_TORRENT_FIELD_ID
     200                             | TR_RPC_TORRENT_FIELD_ACTIVITY
     201                             | TR_RPC_TORRENT_FIELD_SIZE;
     202                      tr_bencDictAddInt( args, "fields", fields );
    198203                      break;
    199204            case 'm': tr_bencDictAddStr( &top, "method", "session-set" );
     
    307312        if( ( tag == TAG_LIST ) &&
    308313            ( tr_bencDictFindDict( &top, "arguments", &args ) ) &&
    309             ( tr_bencDictFindList( args, "list", &list ) ) )
     314            ( tr_bencDictFindList( args, "torrent-info", &list ) ) )
    310315        {
    311316            int i, n;
     
    316321                tr_benc * d = tr_bencListChild( list, i );
    317322                if(    tr_bencDictFindInt( d, "id", &id )
    318                     && tr_bencDictFindInt( d, "status", &status )
    319323                    && tr_bencDictFindStr( d, "name", &name )
     324                    && tr_bencDictFindStr( d, "rateDownload", &dnstr )
     325                    && tr_bencDictFindStr( d, "rateUpload", &upstr )
    320326                    && tr_bencDictFindStr( d, "ratio", &ratiostr )
    321                     && tr_bencDictFindStr( d, "rateUpload", &upstr )
    322                     && tr_bencDictFindStr( d, "rateDownload", &dnstr ) )
     327                    && tr_bencDictFindInt( d, "status", &status ) )
    323328                {
    324329                    printf( "%4d.  Up: %5.1f  Down: %5.1f  Ratio: %4.1f  %-15s  %s\n",
  • trunk/doc/rpc-spec.txt

    r6109 r6199  
    7676   Response arguments: none
    7777
    78 3.2.  Torrent List
    79 
    80    An overview list of torrents.
    81 
    82    Method name: "torrent-list".
    83 
    84    Request arguments: none.
    85 
    86    Response arguments: "list", an array of objects that contain these keys:
    87 
    88    key                   | value type
    89    ----------------------+-------------------------------------------------
    90    "downloadedEver"      | number
    91    "eta"                 | number
    92    "hashString"          | string
    93    "id"                  | number
    94    "name"                | string
    95    "peersConnected"      | number
    96    "peersSendingToUs"    | number
    97    "peersGettingFromUs"  | number
    98    "percentDone"         | double
    99    "rateDownload"        | double
    100    "rateUpload"          | double
    101    "ratio"               | double
    102    "sizeWhenDone"        | number
    103    "status"              | number
    104    "uploadedEver"        | number
    105 
    106 
    107 
    108 3.3.  Torrent Info Requests
     783.2.  Torrent Information Requests
    10979
    11080   Method name: "torrent-info".
    11181
    112    Request arguments: 3.1's optional "ids" argument.
    113 
    114    Response arguments: "torrent-info", an array of objects based on
    115    libtransmission's tr_info struct but different in the following ways:
    116    (1) the torrent's "id" field is added.
    117    (2) tr_info's "hash" field is omitted.
    118    (3) tr_info's "pieces" field is omitted.
    119    (4) tr_file's only included pieces are "name" and "length".
    120 
    121    Note that this is a fairly high-bandwidth request and that its results
    122    don't change.  You should try to cache its results instead of re-calling it.
    123 
    124    Example Request:
     82   The request takes two arguments: "ids", as described in section 3.1, and
     83   "fields", a bitwise-or'ed number which specifies which torrent information
     84   is being requested.  (See libtransmission/rpc.h's enumeration)
     85   The response arguments are "fields" (identical to the request argument)
     86   and "torrent-info", a list of objects that each contain the pairs
     87   shown here:
     88
     89   field and          | response | response               | source
     90   numeric value      | type     | name                   |
     91   -------------------+----------+------------------------+-------------
     92   activity, 1        | number   | desiredAvailable       | tr_stat
     93                      | number   | eta                    | tr_stat
     94                      | number   | peersConnected         | tr_stat
     95                      | number   | peersGettingFromUs     | tr_stat
     96                      | number   | peersSendingToUs       | tr_stat
     97                      | number   | rateDownload           | tr_stat
     98                      | number   | rateUpload             | tr_stat
     99                      | number   | recheckProgress        | tr_stat
     100                      | number   | status                 | tr_stat
     101                      | number   | swarmSpeed             | tr_stat
     102                      | number   | webseedsSendingToUs    | tr_stat
     103   -------------------+----------+------------------------+-------------
     104   announce, 2        | string   | announceResponse       | tr_stat
     105                      | string   | announceURL            | tr_stat
     106                      | string   | lastAnnounceTime       | tr_stat
     107                      | string   | manualAnnounceTime     | tr_stat
     108                      | string   | nextAnnounceTime       | tr_stat
     109   -------------------+----------+------------------------+-------------
     110   error, 4           | number   | error                  | tr_stat
     111                      | number   | errorString            | tr_Stat
     112   -------------------+----------+------------------------+-------------
     113   files, 8           | array    | files
     114                      +----------+--------------------------------------
     115                      | files is an array of objects that contain:
     116                      +----------+------------------------+-------------
     117                      | number   | length                 | tr_info
     118                      | string   | name                   | tr_info
     119   -------------------+----------+------------------------+-------------
     120   history, 16        | number   | activityDate           | tr_stat
     121                      | number   | addedDate              | tr_stat
     122                      | number   | corruptEver            | tr_stat
     123                      | number   | doneDate               | tr_stat
     124                      | number   | downloadedEver         | tr_stat
     125                      | number   | startDate              | tr_stat
     126                      | number   | uploadedEver           | tr_stat
     127   -------------------+----------+------------------------+-------------
     128   id, 32             | number   | uniqueId               | tr_torrent
     129                      | string   | hashString             | tr_info
     130                      | string   | name                   | tr_info
     131   -------------------+----------+------------------------+-------------
     132   info, 64           | string   | comment                | tr_info
     133                      | string   | creator                | tr_info
     134                      | number   | dateCreated            | tr_info
     135                      | number   | pieceCount             | tr_info
     136                      | number   | pieceSize              | tr_info
     137   -------------------+----------+------------------------+-------------
     138   limits, 128        | number   | downloadLimit          | tr_torrent
     139                      | number   | downloadLimitMode      | tr_torrent
     140                      | number   | maxConnectedPeers      | tr_torrent
     141                      | number   | uploadLimit            | tr_torrent
     142                      | number   | uploadLimitMode        | tr_torrent
     143   -------------------+----------+------------------------+-------------
     144   peers, 256         | object   | peersFrom              | tr_stat
     145                      +----------+------------------------+-------------
     146                      | peersFrom contains:
     147                      +----------+------------------------+-------------
     148                      | number   | cache                  | tr_stat
     149                      | number   | incoming               | tr_stat
     150                      | number   | pex                    | tr_stat
     151                      | number   | tracker                | tr_stat
     152   -------------------+----------+------------------------+-------------
     153   scrape, 512        | number   | lastScrapeTime         | tr_stat
     154                      | number   | nextScrapeTime         | tr_stat
     155                      | string   | scrapeResponse         | tr_stat
     156                      | string   | scrapeURL              | tr_stat
     157   -------------------+----------+------------------------+-------------
     158   size, 1024         | number   | haveUnchecked          | tr_stat
     159                      | number   | haveValid              | tr_stat
     160                      | number   | leftUntilDone          | tr_stat
     161                      | 'double' | percentComplete        | tr_stat
     162                      | 'double' | percentDone            | tr_stat
     163                      | 'double' | ratio                  | tr_stat
     164                      | number   | sizeWhenDone           | tr_stat
     165                      | number   | totalSize              | tr_stat
     166   -------------------+----------+------------------------+-------------
     167   tracker stats,     | number   | leechers               | tr_stat
     168   2048               | number   | peersKnown             | tr_stat
     169                      | number   | seeders                | tr_stat
     170                      | number   | timesCompleted         | tr_stat
     171   -------------------+----------+--------------------------------------
     172   trackers, 4096     | array    | trackers
     173                      +----------+--------------------------------------
     174                      | trackers is an array of objects that contain:
     175                      +----------+------------------------+-------------
     176                      | string   | announce               | tr_info
     177                      | string   | scrape                 | tr_info
     178                      | number   | tier                   | tr_info
     179   -------------------+----------+------------------------+-------------
     180   webseeds, 8192     | object   | webseeds
     181                      +----------+--------------------------------------
     182                      | webseeds contains:
     183                      | an array of weseed url strings
     184   -------------------+----------+------------------------+-------------
     185
     186
     187   Example:
     188
     189   Say we want to get the ratio and name of torrents 7 and 10.
     190   name is in the "id" section (32) and ratio is in "size" (1024),
     191   so the "fields" argument will be 32 + 1024 == 1056.
     192
     193   Request:
    125194
    126195      {
    127          "arguments": { "ids": [ 7, 10 ] }
     196         "arguments": {
     197             "fields": 1056,
     198             "ids": [ 7, 10 ],
     199         }
    128200         "method": "torrent-info",
    129201         "tag": 39693
    130202      }
    131203
    132    Example Response:
     204
     205   Response:
    133206
    134207      {
     
    136209         "result": "success",
    137210         "arguments": {
     211            "fields": 1056,
    138212            "torrent-info": [
    139                {
    140                   "id": 7,
    141                   "name": "Ubuntu x86_64 DVD",
    142                   "pieceCount": 1209233,
    143                   "pieceSize": 4096,
    144                   "totalSize": 9803930483,
    145                   ...
     213               {
     214                   "hashString": "asdasiofjosejfoasjfiosj",
     215                   "haveUnchecked", 0,
     216                   "haveValid", 9923890123,
     217                   "leftUntilDone", 0,
     218                   "name": "Ubundu x86_64 DVD",
     219                   "percentComplete", "1.0000",
     220                   "percentDone", "1.0000",
     221                   "ratio", "2.23222",
     222                   "sizeWhenDone", 9923890123,
     223                   "totalSize", 9923890123,
     224                   "uniqueId": 7,
    146225               },
    147226               {
    148                   "id": 10,
    149                   "name": "Ubuntu i386 DVD",
    150                   "pieceCount": 83943,
    151                   "pieceSize": 12345,
    152                   "totalSize": 2398480394,
    153                   ...
     227                   "hashString": "sijioejisoefjiosejfioi",
     228                   "haveUnchecked", 23023,
     229                   "haveValid", 27986795145,
     230                   "leftUntilDone", 0,
     231                   "name": "Fedora x86_64 DVD",
     232                   "percentComplete", "1.0000",
     233                   "percentDone", "0.8010",
     234                   "ratio", "0.604034",
     235                   "sizeWhenDone", 34983493932,
     236                   "totalSize", 34983493932,
     237                   "uniqueId": 10,
    154238               }
    155239            ]
     
    157241      }
    158242
    159 3.4.  Torrent Status Requests
    160 
    161    Method name: "torrent-status"
    162 
    163    Request arguments: 3.1's optional "ids" argument.
    164 
    165    Response arguments: "torrent-status", an array of objects
    166    based on libtransmission's tr_stat struct but different
    167    in the following ways:
    168    (1) tr_info's "hashString" field is added.
    169 
    170 3.5.  Adding a Torrent
     2433.3.  Adding a Torrent
    171244
    172245   Method name: "torrent-add"
     
    174247   Request arguments:
    175248
    176    string             | value type & description
     249   key                | value type & description
    177250   -------------------+-------------------------------------------------
    178251   "download-dir"     | string    path to download the torrent to
     
    186259
    187260   Response arguments: on success, a "torrent-added" object in the
    188                        form of one of 3.3's tr_info objects.
    189 
    190 3.6.  Other Torrent Settings
     261                       form of one of 3.3's tr_info objects with the
     262                       fields for id, name, and hashString.
     263
     2643.4.  Other Torrent Settings
    191265
    192266   Common arguments:
     
    200274   "speed-limit-up-enabled"   | boolean   true if the upload speed is limited
    201275
    202 3.6.1.  Mutators
     2763.4.1.  Mutators
    203277
    204278   Method name: "torrent-set"
    205279   Request arguments: 3.1's "ids", plus one or more of 3.6's arguments
    206280   Response arguments: none
    207 
    208 3.6.2.  Accessors
    209 
    210    Method name: "torrent-get"
    211    Request arguments: none
    212    Response arguments: A "torrents" list of objects containing all
    213                        of 3.6's arguments plus the torrent's "id" field.
    214281                     
    215282
    216 3.7  File Priorities
     2833.5  File Priorities
    217284
    218285   Common arguments:
     
    226293   "priority-normal"  | array     indices of one or more normal-priority files
    227294
    228 3.7.1.  Mutators
     2953.5.1.  Mutators
    229296
    230297    Method name: "torrent-set-priorities"
     
    232299    Response arguments: none
    233300
    234 3.7.2.  Accessors
     3013.5.2.  Accessors
    235302
    236303    Method name: "torrent-get-priorities"
  • trunk/gtk/details.c

    r6155 r6199  
    528528  fmtpeercount (p->seeders_lb, stat->seeders);
    529529  fmtpeercount (p->leechers_lb, stat->leechers);
    530   fmtpeercount (p->completed_lb, stat->completedFromTracker );
     530  fmtpeercount (p->completed_lb, stat->timesCompleted );
    531531
    532532  free( peers );
     
    766766                                 gtk_alignment_new (0.0f, 0.0f, 0.0f, 0.0f));
    767767        l = gtk_label_new (NULL);
    768         gtk_label_set_markup (GTK_LABEL(l), _( "<b>Completed:</b>" ) );
     768        gtk_label_set_markup (GTK_LABEL(l), _( "<b>Times Completed:</b>" ) );
    769769        gtk_box_pack_start (GTK_BOX(hbox), l, FALSE, FALSE, 0);
    770770        l = p->completed_lb = gtk_label_new (NULL);
  • trunk/libtransmission/rpc.c

    r6029 r6199  
    1818#include "transmission.h"
    1919#include "bencode.h"
     20#include "ratecontrol.h"
    2021#include "rpc.h"
    2122#include "json.h"
     
    155156***/
    156157
    157 static const char*
    158 torrentStatus( tr_handle * handle, tr_benc * args_in, tr_benc * args_out )
    159 {
    160     int i, torrentCount;
    161     tr_torrent ** torrents = getTorrents( handle, args_in, &torrentCount );
    162     tr_benc * list = tr_bencDictAddList( args_out, "torrent-status", torrentCount );
    163 
    164     for( i=0; i<torrentCount; ++i )
    165     {
    166         tr_torrent * tor = torrents[i];
    167         const tr_stat * st = tr_torrentStat( tor );
    168         const int * f = st->peersFrom;
    169         tr_benc * d = tr_bencListAddDict( list, 41 );
    170         tr_benc * t;
    171 
    172         tr_bencDictAddInt( d, "activityDate", st->activityDate );
    173         tr_bencDictAddStr( d, "announceResponse", st->announceResponse );
    174         tr_bencDictAddStr( d, "announceURL", st->announceURL );
    175         tr_bencDictAddInt( d, "completedFromTracker", st->completedFromTracker );
    176         tr_bencDictAddInt( d, "corruptEver", st->corruptEver );
    177         tr_bencDictAddInt( d, "desiredAvailable", st->desiredAvailable );
    178         tr_bencDictAddInt( d, "downloadedEver", st->downloadedEver );
    179         tr_bencDictAddInt( d, "error", st->error );
    180         tr_bencDictAddStr( d, "errorString", st->errorString );
    181         tr_bencDictAddInt( d, "eta", st->eta );
    182         tr_bencDictAddStr( d, "hashString", tor->info.hashString );
    183         tr_bencDictAddInt( d, "haveUnchecked", st->haveUnchecked );
    184         tr_bencDictAddInt( d, "haveValid", st->haveValid );
    185         tr_bencDictAddInt( d, "id", st->id );
    186         tr_bencDictAddInt( d, "lastAnnounceTime", st->lastAnnounceTime );
    187         tr_bencDictAddInt( d, "lastScrapeTime", st->lastScrapeTime );
    188         tr_bencDictAddInt( d, "leechers", st->leechers );
    189         tr_bencDictAddInt( d, "leftUntilDone", st->leftUntilDone );
    190         tr_bencDictAddInt( d, "manualAnnounceTime", st->manualAnnounceTime );
    191         tr_bencDictAddInt( d, "nextAnnounceTime", st->nextAnnounceTime );
    192         tr_bencDictAddInt( d, "nextScrapeTime", st->nextScrapeTime );
    193         tr_bencDictAddInt( d, "peersConnected", st->peersConnected );
    194         t = tr_bencDictAddDict( d, "peersFrom", 4 );
    195             tr_bencDictAddInt( t, "cache",    f[TR_PEER_FROM_CACHE] );
    196             tr_bencDictAddInt( t, "incoming", f[TR_PEER_FROM_INCOMING] );
    197             tr_bencDictAddInt( t, "pex",      f[TR_PEER_FROM_PEX] );
    198             tr_bencDictAddInt( t, "tracker",  f[TR_PEER_FROM_TRACKER] );
    199         tr_bencDictAddInt( d, "peersGettingFromUs", st->peersGettingFromUs );
    200         tr_bencDictAddInt( d, "peersKnown", st->peersKnown );
    201         tr_bencDictAddInt( d, "peersSendingToUs", st->peersSendingToUs );
    202         tr_bencDictAddDouble( d, "percentComplete", st->percentComplete );
    203         tr_bencDictAddDouble( d, "percentDone", st->percentDone );
    204         tr_bencDictAddDouble( d, "rateDownload", st->rateDownload );
    205         tr_bencDictAddDouble( d, "rateUpload", st->rateUpload );
    206         tr_bencDictAddDouble( d, "ratio", st->ratio );
    207         tr_bencDictAddDouble( d, "recheckProgress", st->recheckProgress );
    208         tr_bencDictAddStr( d, "scrapeResponse", st->scrapeResponse );
    209         tr_bencDictAddStr( d, "scrapeURL", st->scrapeURL );
    210         tr_bencDictAddInt( d, "seeders", st->seeders );
    211         tr_bencDictAddInt( d, "sizeWhenDone", st->sizeWhenDone );
    212         tr_bencDictAddInt( d, "startDate", st->startDate );
    213         tr_bencDictAddInt( d, "status", st->status );
    214         tr_bencDictAddDouble( d, "swarmSpeed", st->swarmSpeed );
    215         tr_bencDictAddInt( d, "uploadedEver", st->uploadedEver );
    216     }
    217 
    218     tr_free( torrents );
    219     return NULL;
    220 }
    221 
    222 /**
    223 ***
    224 **/
    225 
    226158static void
    227159addFiles( const tr_info * info, tr_benc * files )
     
    235167        tr_bencDictAddStr( d, "name", file->name );
    236168    }
     169}
     170
     171static void
     172addWebseeds( const tr_info * info, tr_benc * webseeds )
     173{
     174    int i;
     175    for( i=0; i<info->webseedCount; ++i )
     176        tr_bencListAddStr( webseeds, info->webseeds[i] );
    237177}
    238178
     
    252192
    253193static void
    254 addInfo( const tr_torrent * tor, tr_benc * d )
     194addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields )
    255195{
    256196    const tr_info * inf = tr_torrentInfo( tor );
    257     tr_bencInitDict( d, 14 );
    258     tr_bencDictAddStr( d, "comment", inf->comment ? inf->comment : "" );
    259     tr_bencDictAddStr( d, "creator", inf->creator ? inf->creator : "" );
    260     tr_bencDictAddInt( d, "dateCreated", inf->dateCreated );
    261     addFiles( inf, tr_bencDictAddList( d, "files", inf->fileCount ) );
    262     tr_bencDictAddStr( d, "hashString", inf->hashString );
    263     tr_bencDictAddInt( d, "id", tr_torrentId( tor ) );
    264     tr_bencDictAddInt( d, "isMultifile", inf->isMultifile );
    265     tr_bencDictAddInt( d, "isPrivate", inf->isPrivate );
    266     tr_bencDictAddStr( d, "name", inf->name );
    267     tr_bencDictAddInt( d, "pieceCount", inf->pieceCount );
    268     tr_bencDictAddInt( d, "pieceSize", inf->pieceSize );
    269     tr_bencDictAddStr( d, "torrent", inf->torrent );
    270     tr_bencDictAddInt( d, "totalSize", inf->totalSize );
    271     addTrackers( inf, tr_bencDictAddList( d, "trackers", inf->trackerCount ) );
     197    const tr_stat * st = tr_torrentStat( (tr_torrent*)tor );
     198
     199    tr_bencInitDict( d, 64 );
     200
     201    if( fields & TR_RPC_TORRENT_FIELD_ACTIVITY ) {
     202        tr_bencDictAddInt( d, "desiredAvailable", st->desiredAvailable );
     203        tr_bencDictAddInt( d, "eta", st->eta );
     204        tr_bencDictAddInt( d, "peersConnected", st->peersConnected );
     205        tr_bencDictAddInt( d, "peersGettingFromUs", st->peersGettingFromUs );
     206        tr_bencDictAddInt( d, "peersSendingToUs", st->peersSendingToUs );
     207        tr_bencDictAddDouble( d, "rateDownload", st->rateDownload );
     208        tr_bencDictAddDouble( d, "rateUpload", st->rateUpload );
     209        tr_bencDictAddDouble( d, "recheckProgress", st->recheckProgress );
     210        tr_bencDictAddInt( d, "status", st->status );
     211        tr_bencDictAddDouble( d, "swarmSpeed", st->swarmSpeed );
     212        tr_bencDictAddInt( d, "webseedsSendingToUs", st->webseedsSendingToUs );
     213    }
     214
     215    if( fields & TR_RPC_TORRENT_FIELD_ANNOUNCE ) {
     216        tr_bencDictAddStr( d, "announceResponse", st->announceResponse );
     217        tr_bencDictAddStr( d, "announceURL", st->announceURL );
     218        tr_bencDictAddInt( d, "lastAnnounceTime", st->lastAnnounceTime );
     219        tr_bencDictAddInt( d, "manualAnnounceTime", st->manualAnnounceTime );
     220        tr_bencDictAddInt( d, "nextAnnounceTime", st->nextAnnounceTime );
     221    }
     222
     223    if( fields & TR_RPC_TORRENT_FIELD_ERROR ) {
     224        tr_bencDictAddInt( d, "error", st->error );
     225        tr_bencDictAddStr( d, "errorString", st->errorString );
     226    }
     227
     228    if( fields & TR_RPC_TORRENT_FIELD_FILES )
     229        addFiles( inf, tr_bencDictAddList( d, "files", inf->fileCount ) );
     230
     231    if( fields & TR_RPC_TORRENT_FIELD_HISTORY ) {
     232        tr_bencDictAddInt( d, "activityDate", st->activityDate );
     233        tr_bencDictAddInt( d, "addedDate", st->addedDate );
     234        tr_bencDictAddInt( d, "corruptEver", st->corruptEver );
     235        tr_bencDictAddInt( d, "doneDate", st->doneDate );
     236        tr_bencDictAddInt( d, "downloadedEver", st->downloadedEver );
     237        tr_bencDictAddInt( d, "startDate", st->startDate );
     238        tr_bencDictAddInt( d, "uploadedEver", st->uploadedEver );
     239    }
     240
     241    if( fields & TR_RPC_TORRENT_FIELD_ID ) {
     242        tr_bencDictAddInt( d, "id", st->id );
     243        tr_bencDictAddStr( d, "hashString", tor->info.hashString );
     244        tr_bencDictAddStr( d, "name", inf->name );
     245    }
     246
     247    if( fields & TR_RPC_TORRENT_FIELD_INFO ) {
     248        tr_bencDictAddStr( d, "comment", inf->comment ? inf->comment : "" );
     249        tr_bencDictAddStr( d, "creator", inf->creator ? inf->creator : "" );
     250        tr_bencDictAddInt( d, "dateCreated", inf->dateCreated );
     251        tr_bencDictAddInt( d, "pieceCount", inf->pieceCount );
     252        tr_bencDictAddInt( d, "pieceSize", inf->pieceSize );
     253    }
     254
     255    if( fields & TR_RPC_TORRENT_FIELD_LIMITS ) {
     256        tr_bencDictAddInt( d, "downloadLimit", tr_torrentGetSpeedLimit( tor, TR_DOWN ) );
     257        tr_bencDictAddInt( d, "downloadLimitMode", tr_torrentGetSpeedMode( tor, TR_DOWN ) );
     258        tr_bencDictAddInt( d, "maxConnectedPeers",  tr_torrentGetPeerLimit( tor ) );
     259        tr_bencDictAddInt( d, "uploadLimit", tr_torrentGetSpeedLimit( tor, TR_UP ) );
     260        tr_bencDictAddInt( d, "uploadLimitMode",   tr_torrentGetSpeedMode( tor, TR_UP ) );
     261    }
     262
     263    if( fields & TR_RPC_TORRENT_FIELD_PEERS ) {
     264        const int * from = st->peersFrom;
     265        tr_benc * f;
     266        f = tr_bencDictAddDict( d, "peersFrom", 4 );
     267            tr_bencDictAddInt( f, "cache",    from[TR_PEER_FROM_CACHE] );
     268            tr_bencDictAddInt( f, "incoming", from[TR_PEER_FROM_INCOMING] );
     269            tr_bencDictAddInt( f, "pex",      from[TR_PEER_FROM_PEX] );
     270            tr_bencDictAddInt( f, "tracker",  from[TR_PEER_FROM_TRACKER] );
     271    }
     272
     273    if( fields & TR_RPC_TORRENT_FIELD_SCRAPE ) {
     274        tr_bencDictAddInt( d, "lastScrapeTime", st->lastScrapeTime );
     275        tr_bencDictAddInt( d, "nextScrapeTime", st->nextScrapeTime );
     276        tr_bencDictAddStr( d, "scrapeResponse", st->scrapeResponse );
     277        tr_bencDictAddStr( d, "scrapeURL", st->scrapeURL );
     278    }
     279
     280    if( fields & TR_RPC_TORRENT_FIELD_SIZE ) {
     281        tr_bencDictAddInt( d, "haveUnchecked", st->haveUnchecked );
     282        tr_bencDictAddInt( d, "haveValid", st->haveValid );
     283        tr_bencDictAddInt( d, "leftUntilDone", st->leftUntilDone );
     284        tr_bencDictAddDouble( d, "percentComplete", st->percentComplete );
     285        tr_bencDictAddDouble( d, "percentDone", st->percentDone );
     286        tr_bencDictAddDouble( d, "ratio", st->ratio );
     287        tr_bencDictAddInt( d, "sizeWhenDone", st->sizeWhenDone );
     288        tr_bencDictAddInt( d, "totalSize", inf->totalSize );
     289    }
     290
     291    if( fields & TR_RPC_TORRENT_FIELD_TRACKER_STATS ) {
     292        tr_bencDictAddInt( d, "leechers", st->leechers );
     293        tr_bencDictAddInt( d, "peersKnown", st->peersKnown );
     294        tr_bencDictAddInt( d, "seeders", st->seeders );
     295        tr_bencDictAddDouble( d, "timesCompleted", st->timesCompleted );
     296    }
     297
     298    if( fields & TR_RPC_TORRENT_FIELD_TRACKERS )
     299        addTrackers( inf, tr_bencDictAddList( d, "trackers", inf->trackerCount ) );
     300
     301    if( fields & TR_RPC_TORRENT_FIELD_WEBSEEDS )
     302        addWebseeds( inf, tr_bencDictAddList( d, "webseeds", inf->trackerCount ) );
    272303}
    273304
     
    278309    tr_torrent ** torrents = getTorrents( handle, args_in, &torrentCount );
    279310    tr_benc * list = tr_bencDictAddList( args_out, "torrent-info", torrentCount );
     311    int64_t fields = 0;
     312
     313    if( !tr_bencDictFindInt( args_in, "fields", &fields ) )
     314        fields = ~(int64_t)0;
     315    tr_bencDictAddInt( args_out, "fields", fields );
    280316
    281317    for( i=0; i<torrentCount; ++i )
    282         addInfo( torrents[i], tr_bencListAdd( list ) );
     318        addInfo( torrents[i], tr_bencListAdd( list ), fields );
    283319
    284320    tr_free( torrents );
     
    286322}
    287323
    288 /**
    289 ***
    290 **/
    291 
    292 static const char*
    293 torrentList( tr_handle * handle, tr_benc * args_in, tr_benc * args_out )
    294 {
    295     int i, torrentCount;
    296     tr_torrent ** torrents = getTorrents( handle, args_in, &torrentCount );
    297     tr_benc * list = tr_bencDictAddList( args_out, "list", torrentCount );
    298 
    299     for( i=0; i<torrentCount; ++i )
    300     {
    301         tr_torrent * tor = torrents[i];
    302         const tr_stat * st = tr_torrentStat( tor );
    303         tr_benc * d = tr_bencListAddDict( list, 15 );
    304         tr_bencDictAddInt( d, "downloadedEver", st->downloadedEver );
    305         tr_bencDictAddInt( d, "eta", st->eta );
    306         tr_bencDictAddStr( d, "hashString", tor->info.hashString );
    307         tr_bencDictAddInt( d, "id", tr_torrentId( tor ) );
    308         tr_bencDictAddStr( d, "name", tor->info.name );
    309         tr_bencDictAddInt( d, "peersConnected", st->peersConnected );
    310         tr_bencDictAddInt( d, "peersGettingFromUs", st->peersGettingFromUs );
    311         tr_bencDictAddInt( d, "peersSendingToUs", st->peersSendingToUs );
    312         tr_bencDictAddDouble( d, "percentDone", st->percentDone );
    313         tr_bencDictAddDouble( d, "rateDownload", st->rateDownload );
    314         tr_bencDictAddDouble( d, "rateUpload", st->rateUpload );
    315         tr_bencDictAddDouble( d, "ratio", st->ratio );
    316         tr_bencDictAddInt( d, "sizeWhenDone", st->sizeWhenDone );
    317         tr_bencDictAddInt( d, "status", st->status );
    318         tr_bencDictAddInt( d, "uploadedEver", st->uploadedEver );
    319     }
    320 
    321     tr_free( torrents );
    322     return NULL;
    323 }
    324 
    325 /**
    326 ***
    327 **/
    328 
    329 static const char*
    330 torrentGet( tr_handle * handle, tr_benc * args_in, tr_benc * args_out )
    331 {
    332     int i, torrentCount;
    333     tr_torrent ** torrents = getTorrents( handle, args_in, &torrentCount );
    334     tr_benc * list = tr_bencDictAddList( args_out, "torrents", torrentCount );
    335 
    336     for( i=0; i<torrentCount; ++i )
    337     {
    338         tr_torrent * tor = torrents[i];
    339         tr_benc * d = tr_bencListAddDict( list, 6 );
    340         tr_bencDictAddInt( d, "id", tr_torrentId( tor ) );
    341         tr_bencDictAddInt( d, "peer-limit",
    342                            tr_torrentGetPeerLimit( tor ) );
    343         tr_bencDictAddInt( d, "speed-limit-down",
    344                            tr_torrentGetSpeedLimit( tor, TR_DOWN ) );
    345         tr_bencDictAddInt( d, "speed-limit-down-enabled",
    346                            tr_torrentGetSpeedMode( tor, TR_DOWN )
    347                                == TR_SPEEDLIMIT_SINGLE );
    348         tr_bencDictAddInt( d, "speed-limit-up",
    349                            tr_torrentGetSpeedLimit( tor, TR_UP ) );
    350         tr_bencDictAddInt( d, "speed-limit-up-enabled",
    351                            tr_torrentGetSpeedMode( tor, TR_UP )
    352                                == TR_SPEEDLIMIT_SINGLE );
    353     }
    354 
    355     tr_free( torrents );
    356     return NULL;
    357 }
     324/***
     325****
     326***/
    358327
    359328static const char*
     
    573542
    574543        if( tor ) {
    575             addInfo( tor, tr_bencDictAdd( args_out, "torrent-added" ) );
     544            addInfo( tor, tr_bencDictAdd( args_out, "torrent-added" ), TR_RPC_TORRENT_FIELD_ID );
    576545            notify( h, TR_RPC_TORRENT_ADDED, tor );
    577546        } else if( err == TR_EDUPLICATE ) {
     
    677646    { "torrent-add", torrentAdd },
    678647    { "torrent-get-priorities", torrentGetPriorities },
    679     { "torrent-get", torrentGet },
    680648    { "torrent-info", torrentInfo },
    681     { "torrent-list", torrentList },
    682649    { "torrent-remove", torrentRemove },
    683650    { "torrent-set-priorities", torrentSetPriorities },
    684651    { "torrent-set", torrentSet },
    685652    { "torrent-start", torrentStart },
    686     { "torrent-status", torrentStatus },
    687653    { "torrent-stop", torrentStop },
    688654    { "torrent-verify", torrentVerify }
  • trunk/libtransmission/rpc.h

    r5959 r6199  
    1717****  RPC processing
    1818***/
     19
     20enum
     21{
     22    TR_RPC_TORRENT_FIELD_ACTIVITY        = (1<<0),
     23    TR_RPC_TORRENT_FIELD_ANNOUNCE        = (1<<1),
     24    TR_RPC_TORRENT_FIELD_ERROR           = (1<<2),
     25    TR_RPC_TORRENT_FIELD_FILES           = (1<<3),
     26    TR_RPC_TORRENT_FIELD_HISTORY         = (1<<4),
     27    TR_RPC_TORRENT_FIELD_ID              = (1<<5),
     28    TR_RPC_TORRENT_FIELD_INFO            = (1<<6),
     29    TR_RPC_TORRENT_FIELD_LIMITS          = (1<<7),
     30    TR_RPC_TORRENT_FIELD_PEERS           = (1<<8),
     31    TR_RPC_TORRENT_FIELD_SCRAPE          = (1<<9),
     32    TR_RPC_TORRENT_FIELD_SIZE            = (1<<10),
     33    TR_RPC_TORRENT_FIELD_TRACKER_STATS   = (1<<11),
     34    TR_RPC_TORRENT_FIELD_TRACKERS        = (1<<12),
     35    TR_RPC_TORRENT_FIELD_WEBSEEDS        = (1<<13)
     36};
    1937
    2038struct tr_benc;
     
    4058                       size_t            list_str_len );
    4159
     60
    4261#endif
  • trunk/libtransmission/torrent.c

    r6162 r6199  
    713713    s->scrapeURL   = ti ? ti->scrape   : NULL;
    714714    tr_trackerStat( tc, s );
    715     tr_trackerGetCounts( tc, &s->completedFromTracker,
     715    tr_trackerGetCounts( tc, &s->timesCompleted,
    716716                             &s->leechers,
    717717                             &s->seeders );
  • trunk/libtransmission/transmission.h

    r6148 r6199  
    12481248
    12491249    /** Number of finished downloads that the tracker says torrent has */
    1250     int completedFromTracker;
     1250    int timesCompleted;
    12511251
    12521252    /** Byte count of all the piece data we'll have downloaded when we're done,
  • trunk/macosx/Torrent.m

    r6145 r6199  
    12781278- (int) completedFromTracker
    12791279{
    1280     return fStat->completedFromTracker;
     1280    return fStat->timesCompleted;
    12811281}
    12821282
Note: See TracChangeset for help on using the changeset viewer.