Changeset 6203


Ignore:
Timestamp:
Jun 16, 2008, 10:11:50 PM (13 years ago)
Author:
charles
Message:

(RPC) add utility arguments for torrent-info: sort by (activity|age|id|name|progress|ratio|state|tracker), filter by (active|all|downloading|paused|seeding)

Location:
trunk
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/configure.ac

    r6191 r6203  
    3636AC_HEADER_STDC
    3737AC_HEADER_TIME
    38 AC_CHECK_FUNCS([lrintf strlcpy daemon dirname basename daemon])
     38AC_CHECK_FUNCS([lrintf strlcpy daemon dirname basename daemon strcasecmp])
    3939AC_CHECK_SIZEOF([void*])
    4040AC_PROG_INSTALL
  • trunk/daemon/remote.c

    r6199 r6203  
    201201                             | TR_RPC_TORRENT_FIELD_SIZE;
    202202                      tr_bencDictAddInt( args, "fields", fields );
     203                      tr_bencDictAddStr( args, "sort", "name" );
    203204                      break;
    204205            case 'm': tr_bencDictAddStr( &top, "method", "session-set" );
  • trunk/doc/rpc-spec.txt

    r6199 r6203  
    8080   Method name: "torrent-info".
    8181
    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:
     82   The request supports four arguments:
     83
     84   (1) "ids", as described in section 3.1.
     85   (2) A required "fields" number as described in the table below
     86   (3) An optional "sort" string whose value should be one of:
     87       "activity", "age", "id", "name", "progress", "ratio", "state", "tracker".
     88   (4) An optional "sort-ascending" 'boolean'.
     89       This is only used if "sort-method" is supplied.
     90       Its default value is 'true'.
     91   (5) An optional "filter" string whose value may be one of:
     92       "active", "all", "downloading", "paused", "seeding"
     93
     94   The respons supports two arguments:
     95
     96   (1) A required "fields" number identical to the request's
     97   (2) A "torrent-info" list of objects, each of which contains the
     98       response names described in the table below.
    8899
    89100   field and          | response | response               | source
     
    197208             "fields": 1056,
    198209             "ids": [ 7, 10 ],
     210             "sort-method": "name"
    199211         }
    200212         "method": "torrent-info",
     
    206218
    207219      {
    208          "tag": 39693
    209          "result": "success",
    210220         "arguments": {
    211221            "fields": 1056,
    212222            "torrent-info": [
     223               {
     224                   "hashString": "sijioejisoefjiosejfioi",
     225                   "haveUnchecked", 23023,
     226                   "haveValid", 27986795145,
     227                   "leftUntilDone", 0,
     228                   "name": "Fedora x86_64 DVD",
     229                   "percentComplete", "0.8010",
     230                   "percentDone", "0.8010",
     231                   "ratio", "0.604034",
     232                   "sizeWhenDone", 34983493932,
     233                   "totalSize", 34983493932,
     234                   "uniqueId": 10,
     235               }
    213236               {
    214237                   "hashString": "asdasiofjosejfoasjfiosj",
     
    216239                   "haveValid", 9923890123,
    217240                   "leftUntilDone", 0,
    218                    "name": "Ubundu x86_64 DVD",
     241                   "name": "Ubuntu x86_64 DVD",
    219242                   "percentComplete", "1.0000",
    220243                   "percentDone", "1.0000",
     
    224247                   "uniqueId": 7,
    225248               },
    226                {
    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,
    238                }
    239249            ]
    240          }
     250         },
     251         "result": "success",
     252         "tag": 39693
    241253      }
    242254
  • trunk/gtk/util.c

    r5996 r6203  
    4848#include "util.h"
    4949
    50 int
    51 tr_strcmp( const char * a, const char * b )
    52 {
    53     if( a && b ) return strcmp( a, b );
    54     if( a ) return 1;
    55     if( b ) return -1;
    56     return 0;
    57 }
    58 
    5950char*
    6051tr_strlratio( char * buf, double ratio, size_t buflen )
  • trunk/gtk/util.h

    r5991 r6203  
    3333#define UNUSED G_GNUC_UNUSED
    3434#endif
    35 
    36 /* NULL-safe version of strcmp */
    37 int tr_strcmp( const char*, const char * );
    3835
    3936/* return number of items in array */
  • trunk/libtransmission/Makefile.am

    r6073 r6203  
    3434    rpc.c \
    3535    rpc-server.c \
     36    rpc-utils.c \
    3637    session.c \
    3738    stats.c \
     
    7879    rpc.h \
    7980    rpc-server.h \
     81    rpc-utils.h \
    8082    session.h \
    8183    stats.h \
  • trunk/libtransmission/rpc.c

    r6199 r6203  
    2020#include "ratecontrol.h"
    2121#include "rpc.h"
     22#include "rpc-utils.h"
    2223#include "json.h"
    2324#include "session.h"
     
    4546getTorrents( tr_handle * handle, tr_benc * args, int * setmeCount )
    4647{
     48    int method;
     49    int torrentCount = 0;
    4750    int64_t id;
     51    int64_t sortAscending;
    4852    tr_torrent ** torrents = NULL;
    49     int torrentCount = 0;
     53    const char * str;
    5054    tr_benc * ids;
     55
     56    /***
     57    ****  Build the array of torrents
     58    ***/
    5159
    5260    if( tr_bencDictFindList( args, "ids", &ids ) )
     
    8795            torrents[torrentCount++] = tor;
    8896    }
     97
     98    /***
     99    ****  filter the torrents
     100    ***/
     101
     102    method = TR_FILTER_ALL;
     103    if( tr_bencDictFindStr( args, "filter", &str ) ) {
     104             if( !strcmp( str, "active"      ) ) method = TR_FILTER_ACTIVE;
     105        else if( !strcmp( str, "downloading" ) ) method = TR_FILTER_DOWNLOADING;
     106        else if( !strcmp( str, "paused"      ) ) method = TR_FILTER_PAUSED;
     107        else if( !strcmp( str, "seeding"     ) ) method = TR_FILTER_SEEDING;
     108    }
     109    if( method != TR_FILTER_ALL )
     110        tr_torrentFilter( torrents, &torrentCount, method );
     111
     112    /***
     113    ****  sort the torrents
     114    ***/
     115
     116    method = TR_SORT_ID;
     117    sortAscending = 1;
     118    tr_bencDictFindInt( args, "sort-ascending", &sortAscending );
     119    if( tr_bencDictFindStr( args, "sort", &str ) ) {
     120             if( !strcmp( str, "activity" ) ) method = TR_SORT_ACTIVITY;
     121        else if( !strcmp( str, "age" ) )      method = TR_SORT_AGE;
     122        else if( !strcmp( str, "name" ) )     method = TR_SORT_NAME;
     123        else if( !strcmp( str, "progress" ) ) method = TR_SORT_PROGRESS;
     124        else if( !strcmp( str, "ratio" ) )    method = TR_SORT_RATIO;
     125        else if( !strcmp( str, "state" ) )    method = TR_SORT_STATE;
     126        else if( !strcmp( str, "tracker" ) )  method = TR_SORT_TRACKER;
     127    }
     128    tr_torrentSort( torrents, torrentCount, method, sortAscending!=0 );
     129
     130    /***
     131    ****  return the results
     132    ***/
    89133
    90134    *setmeCount = torrentCount;
  • trunk/libtransmission/utils.c

    r6140 r6203  
    2424
    2525#include <assert.h>
    26 #include <ctype.h> /* isalpha */
     26#include <ctype.h> /* isalpha, tolower */
    2727#include <errno.h>
    2828#include <stdarg.h>
     
    362362    return 0;
    363363}
     364
     365int
     366tr_compareDouble( double a, double b )
     367{
     368    if( a < b ) return -1;
     369    if( a > b ) return 1;
     370    return 0;
     371}
     372
     373int
     374tr_compareTime( time_t a, time_t b )
     375{
     376    if( a < b ) return -1;
     377    if( a > b ) return 1;
     378    return 0;
     379}
     380
     381int
     382tr_strcmp( const void * a, const void * b )
     383{
     384    if( a && b ) return strcmp( a, b );
     385    if( a ) return 1;
     386    if( b ) return -1;
     387    return 0;
     388}
     389
     390int
     391tr_strcasecmp( const char * a, const char * b )
     392{
     393    if( !a && !b ) return 0;
     394    if( !a ) return -1;
     395    if( !b ) return 1;
     396#ifdef HAVE_STRCASECMP
     397    return strcasecmp( a, b );
     398#else
     399    while( *a && ( tolower( *(uint8_t*)a ) == tolower( *(uint8_t*)b ) ) )
     400        ++a, ++b;
     401    return tolower( *(uint8_t*)s1) - tolower(*(uint8_t*)s2 );
     402#endif
     403}
     404
    364405
    365406/**
  • trunk/libtransmission/utils.h

    r6140 r6203  
    3030#include <stddef.h> /* for size_t */
    3131#include <stdio.h> /* FILE* */
     32#include <time.h> /* time_t* */
    3233
    3334/***
     
    220221int tr_compareUint32( uint32_t a, uint32_t b );
    221222int tr_compareUint64( uint64_t a, uint64_t b );
     223int tr_compareDouble( double a, double b );
     224int tr_compareTime( time_t a, time_t b );
     225
     226int tr_strcmp( const void * a, const void * b );
     227int tr_strcasecmp( const char * a, const char * b );
    222228
    223229void tr_sha1_to_hex( char * out, const uint8_t * sha1 );
Note: See TracChangeset for help on using the changeset viewer.