Changeset 8021


Ignore:
Timestamp:
Mar 4, 2009, 7:52:57 PM (12 years ago)
Author:
charles
Message:

(trunk) libT and gtk+ parts for #1889: per-torrent vs. global speed limit confusion

Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/rpc-spec.txt

    r7992 r8021  
    9393   Request arguments:
    9494
    95    string                     | value type & description
    96    ---------------------------+-------------------------------------------------
    97    "files-wanted"             | array      indices of file(s) to download
    98    "files-unwanted"           | array      indices of file(s) to not download
    99    "ids"                      | array      torrent list, as described in 3.1
    100    "peer-limit"               | number     maximum number of peers
    101    "priority-high"            | array      indices of high-priority file(s)
    102    "priority-low"             | array      indices of low-priority file(s)
    103    "priority-normal"          | array      indices of normal-priority file(s)
    104    "speed-limit-down"         | number     maximum download speed (in K/s)
    105    "speed-limit-down-enabled" | 'boolean'  true if the download speed is limited
    106    "speed-limit-up"           | number     maximum upload speed (in K/s)
    107    "speed-limit-up-enabled"   | 'boolean'  true if the upload speed is limited
     95   string                            | value type & description
     96   ----------------------------------+-------------------------------------------------
     97   "files-wanted"                    | array      indices of file(s) to download
     98   "files-unwanted"                  | array      indices of file(s) to not download
     99   "ids"                             | array      torrent list, as described in 3.1
     100   "peer-limit"                      | number     maximum number of peers
     101   "priority-high"                   | array      indices of high-priority file(s)
     102   "priority-low"                    | array      indices of low-priority file(s)
     103   "priority-normal"                 | array      indices of normal-priority file(s)
     104   "speed-limit-down"                | number     maximum download speed (in K/s)
     105   "speed-limit-down-enabled"        | 'boolean'  true if the download speed is limited
     106   "speed-limit-down-global-enabled" | 'boolean'  true if the download speed is limited by session
     107   "speed-limit-up"                  | number     maximum upload speed (in K/s)
     108   "speed-limit-up-enabled"          | 'boolean'  true if the upload speed is limited
     109   "speed-limit-up-global-enabled"   | 'boolean'  true if the upload speed is limited by session
    108110
    109111   Just as an empty "ids" value is shorthand for "all ids", using an empty array
     
    127129       the key/value pairs matching the request's "fields" argument.
    128130
    129    key                    | type                                 | source
    130    -----------------------+--------------------------------------+---------
    131    activityDate           | number                               | tr_stat
    132    addedDate              | number                               | tr_stat
    133    announceResponse       | string                               | tr_stat
    134    announceURL            | string                               | tr_stat
    135    comment                | string                               | tr_info
    136    corruptEver            | number                               | tr_stat
    137    creator                | string                               | tr_info
    138    dateCreated            | number                               | tr_info
    139    desiredAvailable       | number                               | tr_stat
    140    doneDate               | number                               | tr_stat
    141    downloadDir            | string                               | tr_torrent
    142    downloadedEver         | number                               | tr_stat
    143    downloaders            | number                               | tr_stat
    144    downloadLimitMode      | number                               | tr_torrent
    145    downloadLimit          | number                               | tr_torrent
    146    error                  | number                               | tr_stat
    147    errorString            | number                               | tr_stat
    148    eta                    | number                               | tr_stat
    149    files                  | array (see below)                    | n/a
    150    hashString             | string                               | tr_info
    151    haveUnchecked          | number                               | tr_stat
    152    haveValid              | number                               | tr_stat
    153    id                     | number                               | tr_torrent
    154    isPrivate              | 'boolean                             | tr_torrent
    155    lastAnnounceTime       | number                               | tr_stat
    156    lastScrapeTime         | number                               | tr_stat
    157    leechers               | number                               | tr_stat
    158    leftUntilDone          | number                               | tr_stat
    159    manualAnnounceTime     | number                               | tr_stat
    160    maxConnectedPeers      | number                               | tr_torrent
    161    name                   | string                               | tr_info
    162    nextAnnounceTime       | number                               | tr_stat
    163    nextScrapeTime         | number                               | tr_stat
    164    peers                  | array (see below)                    | n/a
    165    peersConnected         | number                               | tr_stat
    166    peersFrom              | object (see below)                   | n/a
    167    peersGettingFromUs     | number                               | tr_stat
    168    peersKnown             | number                               | tr_stat
    169    peersSendingToUs       | number                               | tr_stat
    170    pieces                 | string (see below)                   | tr_torrent
    171    pieceCount             | tnumber                              | tr_info
    172    pieceSize              | tnumber                              | tr_info
    173    priorities             | array (see below)                    | n/a
    174    rateDownload (B/s)     | number                               | tr_stat
    175    rateUpload (B/s)       | number                               | tr_stat
    176    recheckProgress        | 'double'                             | tr_stat
    177    scrapeResponse         | string                               | tr_stat
    178    scrapeURL              | string                               | tr_stat
    179    seeders                | number                               | tr_stat
    180    sizeWhenDone           | number                               | tr_stat
    181    startDate              | number                               | tr_stat
    182    status                 | number                               | tr_stat
    183    swarmSpeed (K/s)       | number                               | tr_stat
    184    timesCompleted         | number                               | tr_stat
    185    trackers               | array (see below)                    | n/a
    186    totalSize              | number                               | tr_info
    187    uploadedEver           | number                               | tr_stat
    188    uploadLimitMode        | number                               | tr_torrent
    189    uploadLimit            | number                               | tr_torrent
    190    uploadRatio            | 'double'                             | tr_stat
    191    wanted                 | array (see below)                    | n/a
    192    webseeds               | array (see below)                    | n/a
    193    webseedsSendingToUs    | number                               | tr_stat
    194                           |                                      |
    195                           |                                      |
    196    -----------------------+--------------------------------------+
     131   key                             | type                        | source
     132   --------------------------------+-----------------------------+---------
     133   activityDate                    | number                      | tr_stat
     134   addedDate                       | number                      | tr_stat
     135   announceResponse                | string                      | tr_stat
     136   announceURL                     | string                      | tr_stat
     137   comment                         | string                      | tr_info
     138   corruptEver                     | number                      | tr_stat
     139   creator                         | string                      | tr_info
     140   dateCreated                     | number                      | tr_info
     141   desiredAvailable                | number                      | tr_stat
     142   doneDate                        | number                      | tr_stat
     143   downloadDir                     | string                      | tr_torrent
     144   downloadedEver                  | number                      | tr_stat
     145   downloaders                     | number                      | tr_stat
     146   error                           | number                      | tr_stat
     147   errorString                     | number                      | tr_stat
     148   eta                             | number                      | tr_stat
     149   files                           | array (see below)           | n/a
     150   hashString                      | string                      | tr_info
     151   haveUnchecked                   | number                      | tr_stat
     152   haveValid                       | number                      | tr_stat
     153   id                              | number                      | tr_torrent
     154   isPrivate                       | 'boolean'                   | tr_torrent
     155   lastAnnounceTime                | number                      | tr_stat
     156   lastScrapeTime                  | number                      | tr_stat
     157   leechers                        | number                      | tr_stat
     158   leftUntilDone                   | number                      | tr_stat
     159   manualAnnounceTime              | number                      | tr_stat
     160   maxConnectedPeers               | number                      | tr_torrent
     161   name                            | string                      | tr_info
     162   nextAnnounceTime                | number                      | tr_stat
     163   nextScrapeTime                  | number                      | tr_stat
     164   peers                           | array (see below)           | n/a
     165   peersConnected                  | number                      | tr_stat
     166   peersFrom                       | object (see below)          | n/a
     167   peersGettingFromUs              | number                      | tr_stat
     168   peersKnown                      | number                      | tr_stat
     169   peersSendingToUs                | number                      | tr_stat
     170   pieces                          | string (see below)          | tr_torrent
     171   pieceCount                      | tnumber                     | tr_info
     172   pieceSize                       | tnumber                     | tr_info
     173   priorities                      | array (see below)           | n/a
     174   rateDownload (B/s)              | number                      | tr_stat
     175   rateUpload (B/s)                | number                      | tr_stat
     176   recheckProgress                 | 'double'                    | tr_stat
     177   scrapeResponse                  | string                      | tr_stat
     178   scrapeURL                       | string                      | tr_stat
     179   seeders                         | number                      | tr_stat
     180   sizeWhenDone                    | number                      | tr_stat
     181   speed-limit-down                | number                      | tr_torrent
     182   speed-limit-down-enabled        | 'boolean'                   | tr_torrent
     183   speed-limit-down-global-enabled | 'boolean'                   | tr_torrent
     184   speed-limit-up                  | number                      | tr_torrent
     185   speed-limit-up-enabled          | 'boolean'                   | tr_torrent
     186   speed-limit-up-global-enabled   | 'boolean'                   | tr_torrent
     187   startDate                       | number                      | tr_stat
     188   status                          | number                      | tr_stat
     189   swarmSpeed (K/s)                | number                      | tr_stat
     190   timesCompleted                  | number                      | tr_stat
     191   trackers                        | array (see below)           | n/a
     192   totalSize                       | number                      | tr_info
     193   uploadedEver                    | number                      | tr_stat
     194   uploadLimitMode                 | number                      | tr_torrent
     195   uploadLimit                     | number                      | tr_torrent
     196   uploadRatio                     | 'double'                    | tr_stat
     197   wanted                          | array (see below)           | n/a
     198   webseeds                        | array (see below)           | n/a
     199   webseedsSendingToUs             | number                      | tr_stat
     200                                   |                             |
     201                                   |                             |
     202   -----------------------+--------+-----------------------------+
    197203   files                  | array of objects, each containing:   |
    198204                          +-------------------------+------------+
     
    408414   ------+---------+-----------+----------------+-------------------------------
    409415   3     | 1.41    | yes       | torrent-get    | added "port" to "peers"
    410          |         |           | torrent-get    | new arg "downloaders"
    411          |         |           | session-get    | new arg "version"
    412          |         |           | torrent-remove | new method
     416         |         | yes       | torrent-get    | new arg "downloaders"
     417         |         | yes       | session-get    | new arg "version"
     418         |         | yes       | torrent-remove | new method
    413419   ------+---------+-----------+----------------+-------------------------------
    414420   4     | 1.50    | yes       | session-get    | new arg "rpc-version"
    415          |         |           | session-get    | new arg "rpc-version-minimum"
    416          |         |           | session-stats  | added "cumulative-stats"
    417          |         |           | session-stats  | added "current-stats"
    418          |         |           | torrent-get    | new arg "downloadDir"
     421         |         | yes       | session-get    | new arg "rpc-version-minimum"
     422         |         | yes       | session-stats  | added "cumulative-stats"
     423         |         | yes       | session-stats  | added "current-stats"
     424         |         | yes       | torrent-get    | new arg "downloadDir"
    419425   ------+---------+-----------+----------------+-------------------------------
    420426   6     | 1.60    | yes       | torrent-get    | new arg "pieces"
    421    ------+---------+-----------+----------------+-------------------------------
    422 
    423 
     427         |         | yes       | torrent-set    | new arg "speed-limit-down-global-enabled"
     428         |         | yes       | torrent-set    | new arg "speed-limit-up-global-enabled"
     429         |         | yes       | torrent-get    | new arg "speed-limit-down"
     430         |         | yes       | torrent-get    | new arg "speed-limit-down-enabled"
     431         |         | yes       | torrent-get    | new arg "speed-limit-down-global-enabled"
     432         |         | yes       | torrent-get    | new arg "speed-limit-up"
     433         |         | yes       | torrent-get    | new arg "speed-limit-up-enabled"
     434         |         | yes       | torrent-get    | new arg "speed-limit-up-global-enabled"
     435         |         |        NO | torrent-get    | removed arg "downloadLimit"
     436         |         |        NO | torrent-get    | removed arg "downloadLimitMode"
     437         |         |        NO | torrent-get    | removed arg "uploadLimit"
     438         |         |        NO | torrent-get    | removed arg "uploadLimitMode"
     439   ------+---------+-----------+----------------+-------------------------------
     440
     441
  • trunk/gtk/details.c

    r8001 r8021  
    11531153
    11541154static void
    1155 speed_toggled_cb( GtkToggleButton * tb,
    1156                   gpointer          gtor,
    1157                   int               up_or_down )
     1155up_speed_toggled_cb( GtkToggleButton *tb,
     1156                     gpointer         gtor )
    11581157{
    11591158    tr_torrent * tor = tr_torrent_handle ( gtor );
    1160     gboolean     b = gtk_toggle_button_get_active( tb );
    1161 
    1162     tr_torrentSetSpeedMode( tor, up_or_down, b ? TR_SPEEDLIMIT_SINGLE
    1163                             : TR_SPEEDLIMIT_GLOBAL );
    1164 }
    1165 
    1166 static void
    1167 ul_speed_toggled_cb( GtkToggleButton *tb,
    1168                      gpointer         gtor )
    1169 {
    1170     speed_toggled_cb( tb, gtor, TR_UP );
    1171 }
    1172 
    1173 static void
    1174 dl_speed_toggled_cb( GtkToggleButton *tb,
    1175                      gpointer         gtor )
    1176 {
    1177     speed_toggled_cb( tb, gtor, TR_DOWN );
     1159    const gboolean b = gtk_toggle_button_get_active( tb );
     1160
     1161    tr_torrentUseSpeedLimit( tor, TR_UP, b );
     1162}
     1163
     1164static void
     1165down_speed_toggled_cb( GtkToggleButton *tb,
     1166                       gpointer         gtor )
     1167{
     1168    tr_torrent * tor = tr_torrent_handle ( gtor );
     1169    const gboolean b = gtk_toggle_button_get_active( tb );
     1170
     1171    tr_torrentUseSpeedLimit( tor, TR_DOWN, b );
     1172}
     1173
     1174static void
     1175global_speed_toggled_cb( GtkToggleButton * tb, gpointer gtor )
     1176{
     1177    tr_torrent * tor = tr_torrent_handle ( gtor );
     1178    const gboolean b = gtk_toggle_button_get_active( tb );
     1179
     1180    tr_torrentUseGlobalSpeedLimit( tor, TR_UP, b );
     1181    tr_torrentUseGlobalSpeedLimit( tor, TR_DOWN, b );
    11781182}
    11791183
     
    11921196
    11931197static void
    1194 sensitize_from_check_cb( GtkToggleButton *toggle,
    1195                          gpointer         w )
     1198sensitize_from_check_cb( GtkToggleButton * toggle, gpointer w )
    11961199{
    11971200    gtk_widget_set_sensitive ( GTK_WIDGET( w ),
    1198                               gtk_toggle_button_get_active( toggle ) );
    1199 }
    1200 
    1201 static void
    1202 setSpeedLimit( GtkSpinButton* spin,
    1203                gpointer       gtor,
    1204                int            up_or_down )
     1201                               gtk_toggle_button_get_active( toggle ) );
     1202}
     1203
     1204static void
     1205setSpeedLimit( GtkSpinButton* spin, gpointer gtor, int up_or_down )
    12051206{
    12061207    tr_torrent * tor = tr_torrent_handle ( gtor );
    1207     int          kb_sec = gtk_spin_button_get_value_as_int ( spin );
     1208    const int kb_sec = gtk_spin_button_get_value_as_int ( spin );
    12081209
    12091210    tr_torrentSetSpeedLimit( tor, up_or_down, kb_sec );
     
    12111212
    12121213static void
    1213 ul_speed_spun_cb( GtkSpinButton *spin,
    1214                   gpointer       gtor )
     1214up_speed_spun_cb( GtkSpinButton * spin, gpointer gtor )
    12151215{
    12161216    setSpeedLimit( spin, gtor, TR_UP );
     
    12181218
    12191219static void
    1220 dl_speed_spun_cb( GtkSpinButton *spin,
    1221                   gpointer       gtor )
     1220down_speed_spun_cb( GtkSpinButton * spin, gpointer gtor )
    12221221{
    12231222    setSpeedLimit( spin, gtor, TR_DOWN );
     
    12251224
    12261225static void
    1227 ratio_spun_cb( GtkSpinButton *spin,
    1228                gpointer       gtor )
     1226ratio_spun_cb( GtkSpinButton * spin, gpointer gtor )
    12291227{
    12301228    tr_torrent * tor = tr_torrent_handle ( gtor );
     
    12351233
    12361234static void
    1237 max_peers_spun_cb( GtkSpinButton * spin,
    1238                    gpointer        gtor )
     1235max_peers_spun_cb( GtkSpinButton * spin, gpointer gtor )
    12391236{
    12401237    const uint16_t n = gtk_spin_button_get_value( spin );
     
    12861283    row = 0;
    12871284    t = hig_workarea_create ( );
    1288     hig_workarea_add_section_title ( t, &row, _( "Limits" ) );
    1289 
    1290     tb =
    1291         gtk_check_button_new_with_mnemonic ( _(
    1292                                                 "Limit _download speed (KB/s):" ) );
    1293     b = tr_torrentGetSpeedMode( tor, TR_DOWN ) == TR_SPEEDLIMIT_SINGLE;
    1294     gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( tb ), b );
    1295     g_signal_connect ( tb, "toggled", G_CALLBACK(
    1296                            dl_speed_toggled_cb ), gtor );
    1297 
    1298     i = tr_torrentGetSpeedLimit( tor, TR_DOWN );
    1299     w = gtk_spin_button_new_with_range( 1, INT_MAX, 5 );
    1300     gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), i );
    1301 
    1302     g_signal_connect ( w, "value-changed", G_CALLBACK(
    1303                            dl_speed_spun_cb ), gtor );
    1304     g_signal_connect ( tb, "toggled", G_CALLBACK(
    1305                            sensitize_from_check_cb ), w );
    1306     sensitize_from_check_cb ( GTK_TOGGLE_BUTTON( tb ), w );
    1307     hig_workarea_add_row_w ( t, &row, tb, w, NULL );
    1308 
    1309     tb =
    1310         gtk_check_button_new_with_mnemonic ( _(
    1311                                                 "Limit _upload speed (KB/s):" ) );
    1312     b = tr_torrentGetSpeedMode( tor, TR_UP ) == TR_SPEEDLIMIT_SINGLE;
    1313     gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( tb ), b );
    1314     g_signal_connect ( tb, "toggled", G_CALLBACK(
    1315                            ul_speed_toggled_cb ), gtor );
    1316 
    1317     i = tr_torrentGetSpeedLimit( tor, TR_UP );
    1318     w = gtk_spin_button_new_with_range( 1, INT_MAX, 5 );
    1319     gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), i );
    1320 
    1321     g_signal_connect ( w, "value-changed", G_CALLBACK(
    1322                            ul_speed_spun_cb ), gtor );
    1323     g_signal_connect ( tb, "toggled", G_CALLBACK(
    1324                            sensitize_from_check_cb ), w );
    1325     sensitize_from_check_cb ( GTK_TOGGLE_BUTTON( tb ), w );
    1326     hig_workarea_add_row_w ( t, &row, tb, w, NULL );
     1285    hig_workarea_add_section_title ( t, &row, _( "Speed Limits" ) );
     1286
     1287        b = tr_torrentIsUsingGlobalSpeedLimit( tor, TR_UP );
     1288        tb = hig_workarea_add_wide_checkbutton( t, &row, _( "Honor global _limits" ), b );
     1289        g_signal_connect( tb, "toggled", G_CALLBACK( global_speed_toggled_cb ), gtor );
     1290
     1291        tb = gtk_check_button_new_with_mnemonic ( _( "Limit _download speed (KB/s):" ) );
     1292        b = tr_torrentIsUsingSpeedLimit( tor, TR_DOWN );
     1293        gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( tb ), b );
     1294        g_signal_connect ( tb, "toggled", G_CALLBACK( down_speed_toggled_cb ), gtor );
     1295
     1296        i = tr_torrentGetSpeedLimit( tor, TR_DOWN );
     1297        w = gtk_spin_button_new_with_range( 1, INT_MAX, 5 );
     1298        gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), i );
     1299        g_signal_connect ( w, "value-changed", G_CALLBACK( down_speed_spun_cb ), gtor );
     1300        g_signal_connect ( tb, "toggled", G_CALLBACK( sensitize_from_check_cb ), w );
     1301        sensitize_from_check_cb ( GTK_TOGGLE_BUTTON( tb ), w );
     1302        hig_workarea_add_row_w ( t, &row, tb, w, NULL );
     1303
     1304        tb = gtk_check_button_new_with_mnemonic ( _( "Limit _upload speed (KB/s):" ) );
     1305        b = tr_torrentIsUsingSpeedLimit( tor, TR_UP );
     1306        gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( tb ), b );
     1307        g_signal_connect ( tb, "toggled", G_CALLBACK( up_speed_toggled_cb ), gtor );
     1308
     1309        i = tr_torrentGetSpeedLimit( tor, TR_UP );
     1310        w = gtk_spin_button_new_with_range( 1, INT_MAX, 5 );
     1311        gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), i );
     1312        g_signal_connect ( w, "value-changed", G_CALLBACK( up_speed_spun_cb ), gtor );
     1313        g_signal_connect ( tb, "toggled", G_CALLBACK( sensitize_from_check_cb ), w );
     1314        sensitize_from_check_cb ( GTK_TOGGLE_BUTTON( tb ), w );
     1315        hig_workarea_add_row_w ( t, &row, tb, w, NULL );
    13271316
    13281317    hig_workarea_add_section_divider ( t, &row );
    13291318    hig_workarea_add_section_title ( t, &row, _( "Seed-Until Ratio" ) );
    1330 
    13311319
    13321320        group = NULL;
  • trunk/gtk/util.c

    r8017 r8021  
    5252tr_strlratio( char * buf, double ratio, size_t buflen )
    5353{
    54     tr_strratio( buf, buflen, ratio, "\xE2\x88\x9E" );
     54    return tr_strratio( buf, buflen, ratio, "\xE2\x88\x9E" );
    5555}
    5656
  • trunk/libtransmission/bandwidth.h

    r7663 r8021  
    168168 */
    169169static TR_INLINE void tr_bandwidthSetLimited( tr_bandwidth        * bandwidth,
    170                                            tr_direction          dir,
    171                                            tr_bool               isLimited )
     170                                              tr_direction          dir,
     171                                              tr_bool               isLimited )
    172172{
    173173    bandwidth->band[dir].isLimited = isLimited;
     
    178178 */
    179179static TR_INLINE tr_bool tr_bandwidthIsLimited( const tr_bandwidth  * bandwidth,
    180                                              tr_direction          dir )
     180                                                tr_direction          dir )
    181181{
    182182    return bandwidth->band[dir].isLimited;
     
    234234 */
    235235static TR_INLINE void tr_bandwidthHonorParentLimits ( tr_bandwidth        * bandwidth,
    236                                                    tr_direction          direction,
    237                                                    tr_bool               isEnabled )
     236                                                      tr_direction          direction,
     237                                                      tr_bool               isEnabled )
    238238{
    239239    assert( tr_isBandwidth( bandwidth ) );
     
    243243}
    244244
     245static TR_INLINE tr_bool tr_bandwidthAreParentLimitsHonored( tr_bandwidth  * bandwidth,
     246                                                             tr_direction    direction )
     247{
     248    assert( tr_isBandwidth( bandwidth ) );
     249    assert( tr_isDirection( direction ) );
     250
     251    return bandwidth->band[direction].honorParentLimits;
     252}
     253
    245254/******
    246255*******
  • trunk/libtransmission/fastresume.c

    r7829 r8021  
    388388        tr_torrentSetSpeedLimit( tor, TR_DOWN, i16 );
    389389        readBytes( &i8, &buf, sizeof( i8 ) );
    390         tr_torrentSetSpeedMode( tor, TR_DOWN, (tr_speedlimit)i8 );
     390        /*tr_torrentSetSpeedMode( tor, TR_DOWN, (tr_speedlimit)i8 );*/
    391391        readBytes( &i16, &buf, sizeof( i16 ) );
    392392        tr_torrentSetSpeedLimit( tor, TR_UP, i16 );
    393393        readBytes( &i8, &buf, sizeof( i8 ) );
    394         tr_torrentSetSpeedMode( tor, TR_UP, (tr_speedlimit)i8 );
     394        /*tr_torrentSetSpeedMode( tor, TR_UP, (tr_speedlimit)i8 );*/
    395395
    396396        ret = TR_FR_SPEEDLIMIT;
  • trunk/libtransmission/resume.c

    r7888 r8021  
    3939#define KEY_PRIORITY        "priority"
    4040#define KEY_PROGRESS        "progress"
    41 #define KEY_SPEEDLIMIT      "speed-limit"
     41#define KEY_SPEEDLIMIT_OLD  "speed-limit"
     42#define KEY_SPEEDLIMIT_UP   "speed-limit-up"
     43#define KEY_SPEEDLIMIT_DOWN "speed-limit-down"
    4244#define KEY_RATIOLIMIT      "ratio-limit"
    4345#define KEY_UPLOADED        "uploaded"
    4446
    45 #define KEY_SPEEDLIMIT_DOWN_SPEED "down-speed"
    46 #define KEY_SPEEDLIMIT_DOWN_MODE  "down-mode"
    47 #define KEY_SPEEDLIMIT_UP_SPEED   "up-speed"
    48 #define KEY_SPEEDLIMIT_UP_MODE    "up-mode"
    49 #define KEY_RATIOLIMIT_RATIO      "ratio-limit"
    50 #define KEY_RATIOLIMIT_MODE       "ratio-mode"
     47#define KEY_SPEED                  "speed"
     48#define KEY_USE_GLOBAL_SPEED_LIMIT "use-global-speed-limit"
     49#define KEY_USE_SPEED_LIMIT        "use-speed-limit"
     50#define KEY_SPEEDLIMIT_DOWN_SPEED  "down-speed"
     51#define KEY_SPEEDLIMIT_DOWN_MODE   "down-mode"
     52#define KEY_SPEEDLIMIT_UP_SPEED    "up-speed"
     53#define KEY_SPEEDLIMIT_UP_MODE     "up-mode"
     54#define KEY_RATIOLIMIT_RATIO       "ratio-limit"
     55#define KEY_RATIOLIMIT_MODE        "ratio-mode"
    5156
    5257#define KEY_PROGRESS_MTIMES   "mtimes"
     
    244249
    245250static void
    246 saveSpeedLimits( tr_benc *          dict,
    247                  const tr_torrent * tor )
    248 {
    249     tr_benc * d = tr_bencDictAddDict( dict, KEY_SPEEDLIMIT, 4 );
    250 
    251     tr_bencDictAddInt( d, KEY_SPEEDLIMIT_DOWN_SPEED,
    252                       tr_torrentGetSpeedLimit( tor, TR_DOWN ) );
    253     tr_bencDictAddInt( d, KEY_SPEEDLIMIT_DOWN_MODE,
    254                       tr_torrentGetSpeedMode( tor, TR_DOWN ) );
    255     tr_bencDictAddInt( d, KEY_SPEEDLIMIT_UP_SPEED,
    256                       tr_torrentGetSpeedLimit( tor, TR_UP ) );
    257     tr_bencDictAddInt( d, KEY_SPEEDLIMIT_UP_MODE,
    258                       tr_torrentGetSpeedMode( tor, TR_UP ) );
     251saveSingleSpeedLimit( tr_benc * d, const tr_torrent * tor, tr_direction dir )
     252{
     253    tr_bencDictReserve( d, 3 );
     254    tr_bencDictAddInt( d, KEY_SPEED, tr_torrentGetSpeedLimit( tor, dir ) );
     255    tr_bencDictAddInt( d, KEY_USE_GLOBAL_SPEED_LIMIT, tr_torrentIsUsingGlobalSpeedLimit( tor, dir ) );
     256    tr_bencDictAddInt( d, KEY_USE_SPEED_LIMIT, tr_torrentIsUsingSpeedLimit( tor, dir ) );
    259257}
    260258
    261259static void
    262 saveRatioLimits( tr_benc *          dict,
    263                  const tr_torrent * tor )
     260saveSpeedLimits( tr_benc * dict, const tr_torrent * tor )
     261{
     262    saveSingleSpeedLimit( tr_bencDictAddDict( dict, KEY_SPEEDLIMIT_DOWN, 0 ), tor, TR_DOWN );
     263    saveSingleSpeedLimit( tr_bencDictAddDict( dict, KEY_SPEEDLIMIT_UP, 0 ), tor, TR_UP );
     264}
     265
     266static void
     267saveRatioLimits( tr_benc * dict, const tr_torrent * tor )
    264268{
    265269    tr_benc * d = tr_bencDictAddDict( dict, KEY_RATIOLIMIT, 4 );
     
    271275}
    272276
    273 static uint64_t
    274 loadSpeedLimits( tr_benc *    dict,
    275                  tr_torrent * tor )
     277static void
     278loadSingleSpeedLimit( tr_benc * d, tr_direction dir, tr_torrent * tor )
     279{
     280    int64_t i;
     281    if( tr_bencDictFindInt( d, KEY_SPEED, &i ) )
     282        tr_torrentSetSpeedLimit( tor, dir, i );
     283    if( tr_bencDictFindInt( d, KEY_USE_SPEED_LIMIT, &i ) )
     284        tr_torrentUseSpeedLimit( tor, dir, i!=0 );
     285    if( tr_bencDictFindInt( d, KEY_USE_GLOBAL_SPEED_LIMIT, &i ) )
     286        tr_torrentUseGlobalSpeedLimit( tor, dir, i!=0 );
     287}
     288
     289enum old_speed_modes
     290{
     291    TR_SPEEDLIMIT_GLOBAL,   /* only follow the overall speed limit */
     292    TR_SPEEDLIMIT_SINGLE    /* only follow the per-torrent limit */
     293};
     294
     295static uint64_t
     296loadSpeedLimits( tr_benc * dict, tr_torrent * tor )
    276297{
    277298    uint64_t  ret = 0;
    278299    tr_benc * d;
    279300
    280     if( tr_bencDictFindDict( dict, KEY_SPEEDLIMIT, &d ) )
    281     {
     301    if( tr_bencDictFindDict( dict, KEY_SPEEDLIMIT_UP, &d ) )
     302    {
     303        loadSingleSpeedLimit( d, TR_UP, tor );
     304        ret = TR_FR_SPEEDLIMIT;
     305    }
     306    if( tr_bencDictFindDict( dict, KEY_SPEEDLIMIT_DOWN, &d ) )
     307    {
     308        loadSingleSpeedLimit( d, TR_DOWN, tor );
     309        ret = TR_FR_SPEEDLIMIT;
     310    }
     311
     312    /* older speedlimit structure */
     313    if( !ret && tr_bencDictFindDict( dict, KEY_SPEEDLIMIT_OLD, &d ) )
     314    {
     315
    282316        int64_t i;
    283317        if( tr_bencDictFindInt( d, KEY_SPEEDLIMIT_DOWN_SPEED, &i ) )
    284318            tr_torrentSetSpeedLimit( tor, TR_DOWN, i );
    285         if( tr_bencDictFindInt( d, KEY_SPEEDLIMIT_DOWN_MODE, &i ) )
    286             tr_torrentSetSpeedMode( tor, TR_DOWN, i );
     319        if( tr_bencDictFindInt( d, KEY_SPEEDLIMIT_DOWN_MODE, &i ) ) {
     320            tr_torrentUseSpeedLimit ( tor, TR_DOWN, i==TR_SPEEDLIMIT_SINGLE );
     321            tr_torrentUseGlobalSpeedLimit( tor, TR_DOWN, i==TR_SPEEDLIMIT_GLOBAL );
     322         }
    287323        if( tr_bencDictFindInt( d, KEY_SPEEDLIMIT_UP_SPEED, &i ) )
    288324            tr_torrentSetSpeedLimit( tor, TR_UP, i );
    289         if( tr_bencDictFindInt( d, KEY_SPEEDLIMIT_UP_MODE, &i ) )
    290             tr_torrentSetSpeedMode( tor, TR_UP, i );
     325        if( tr_bencDictFindInt( d, KEY_SPEEDLIMIT_UP_MODE, &i ) ) {
     326            tr_torrentUseSpeedLimit ( tor, TR_UP, i==TR_SPEEDLIMIT_SINGLE );
     327            tr_torrentUseGlobalSpeedLimit( tor, TR_UP, i==TR_SPEEDLIMIT_GLOBAL );
     328        }
    291329        ret = TR_FR_SPEEDLIMIT;
    292330    }
  • trunk/libtransmission/rpcimpl.c

    r8006 r8021  
    367367    else if( !strcmp( key, "downloaders" ) )
    368368        tr_bencDictAddInt( d, key, st->downloaders );
    369     else if( !strcmp( key, "downloadLimitMode" ) )
    370         tr_bencDictAddInt( d, key, tr_torrentGetSpeedMode( tor, TR_DOWN ) );
    371     else if( !strcmp( key, "downloadLimit" ) )
    372         tr_bencDictAddInt( d, key, tr_torrentGetSpeedLimit( tor, TR_DOWN ) );
    373369    else if( !strcmp( key, "error" ) )
    374370        tr_bencDictAddInt( d, key, st->error );
     
    457453    else if( !strcmp( key, "sizeWhenDone" ) )
    458454        tr_bencDictAddInt( d, key, st->sizeWhenDone );
     455    else if( !strcmp( key, "speed-limit-down" ) )
     456        tr_bencDictAddInt( d, key, tr_torrentGetSpeedLimit( tor, TR_DOWN ) );
     457    else if( !strcmp( key, "speed-limit-down-enabled" ) )
     458        tr_bencDictAddInt( d, key, tr_torrentIsUsingSpeedLimit( tor, TR_DOWN ) );
     459    else if( !strcmp( key, "speed-limit-down-global-enabled" ) )
     460        tr_bencDictAddInt( d, key, tr_torrentIsUsingGlobalSpeedLimit( tor, TR_DOWN ) );
     461    else if( !strcmp( key, "speed-limit-up" ) )
     462        tr_bencDictAddInt( d, key, tr_torrentGetSpeedLimit( tor, TR_UP ) );
     463    else if( !strcmp( key, "speed-limit-up-enabled" ) )
     464        tr_bencDictAddInt( d, key, tr_torrentIsUsingSpeedLimit( tor, TR_UP ) );
     465    else if( !strcmp( key, "speed-limit-up-global-enabled" ) )
     466        tr_bencDictAddInt( d, key, tr_torrentIsUsingGlobalSpeedLimit( tor, TR_UP ) );
    459467    else if( !strcmp( key, "startDate" ) )
    460468        tr_bencDictAddInt( d, key, st->startDate );
     
    471479    else if( !strcmp( key, "uploadedEver" ) )
    472480        tr_bencDictAddInt( d, key, st->uploadedEver );
    473     else if( !strcmp( key, "uploadLimitMode" ) )
    474         tr_bencDictAddInt( d, key,   tr_torrentGetSpeedMode( tor, TR_UP ) );
    475     else if( !strcmp( key, "uploadLimit" ) )
    476         tr_bencDictAddInt( d, key, tr_torrentGetSpeedLimit( tor, TR_UP ) );
    477481    else if( !strcmp( key, "uploadRatio" ) )
    478482        tr_bencDictAddDouble( d, key,
     
    645649            tr_torrentSetSpeedLimit( tor, TR_DOWN, tmp );
    646650        if( tr_bencDictFindInt( args_in, "speed-limit-down-enabled", &tmp ) )
    647             tr_torrentSetSpeedMode(
    648                 tor, TR_DOWN, tmp ? TR_SPEEDLIMIT_SINGLE
    649                 : TR_SPEEDLIMIT_GLOBAL );
     651            tr_torrentUseSpeedLimit( tor, TR_DOWN, tmp!=0 );
     652        if( tr_bencDictFindInt( args_in, "speed-limit-down-global-enabled", &tmp ) )
     653            tr_torrentUseGlobalSpeedLimit( tor, TR_DOWN, tmp!=0 );
    650654        if( tr_bencDictFindInt( args_in, "speed-limit-up", &tmp ) )
    651655            tr_torrentSetSpeedLimit( tor, TR_UP, tmp );
    652656        if( tr_bencDictFindInt( args_in, "speed-limit-up-enabled", &tmp ) )
    653             tr_torrentSetSpeedMode( tor, TR_UP, tmp ? TR_SPEEDLIMIT_SINGLE
    654                                     : TR_SPEEDLIMIT_GLOBAL );
     657            tr_torrentUseSpeedLimit( tor, TR_UP, tmp!=0 );
     658        if( tr_bencDictFindInt( args_in, "speed-limit-up-global-enabled", &tmp ) )
     659            tr_torrentUseGlobalSpeedLimit( tor, TR_UP, tmp!=0 );
    655660        if( tr_bencDictFindDouble( args_in, "ratio-limit", &d ) )
    656661            tr_torrentSetRatioLimit( tor, d );
  • trunk/libtransmission/torrent.c

    r8014 r8021  
    110110
    111111void
    112 tr_torrentSetSpeedMode( tr_torrent *  tor,
    113                         tr_direction  dir,
    114                         tr_speedlimit mode )
    115 {
    116     assert( tor != NULL );
     112tr_torrentSetSpeedLimit( tr_torrent * tor, tr_direction dir, int KiB_sec )
     113{
     114    assert( tr_isTorrent( tor ) );
    117115    assert( tr_isDirection( dir ) );
    118     assert( mode==TR_SPEEDLIMIT_GLOBAL || mode==TR_SPEEDLIMIT_SINGLE || mode==TR_SPEEDLIMIT_UNLIMITED  );
    119 
    120     tor->speedLimitMode[dir] = mode;
    121 
    122     tr_bandwidthSetLimited( tor->bandwidth, dir, mode==TR_SPEEDLIMIT_SINGLE );
    123     tr_bandwidthHonorParentLimits( tor->bandwidth, dir, mode==TR_SPEEDLIMIT_GLOBAL );
    124 }
    125 
    126 tr_speedlimit
    127 tr_torrentGetSpeedMode( const tr_torrent * tor,
    128                         tr_direction       dir )
    129 {
    130     assert( tor != NULL );
     116
     117    tr_bandwidthSetDesiredSpeed( tor->bandwidth, dir, KiB_sec );
     118}
     119
     120int
     121tr_torrentGetSpeedLimit( const tr_torrent * tor, tr_direction dir )
     122{
     123    assert( tr_isTorrent( tor ) );
    131124    assert( tr_isDirection( dir ) );
    132125
    133     return tor->speedLimitMode[dir];
    134 }
    135 
    136 void
    137 tr_torrentSetSpeedLimit( tr_torrent * tor,
    138                          tr_direction dir,
    139                          int          desiredSpeed )
    140 {
    141     tr_bandwidthSetDesiredSpeed( tor->bandwidth, dir, desiredSpeed );
    142 }
    143 
    144 int
    145 tr_torrentGetSpeedLimit( const tr_torrent * tor,
    146                          tr_direction       dir )
    147 {
    148     assert( tr_isTorrent( tor ) );
    149 
    150126    return tr_bandwidthGetDesiredSpeed( tor->bandwidth, dir );
    151127}
     128
     129void
     130tr_torrentUseSpeedLimit( tr_torrent * tor, tr_direction dir, tr_bool do_use )
     131{
     132    assert( tr_isTorrent( tor ) );
     133    assert( tr_isDirection( dir ) );
     134
     135    tr_bandwidthSetLimited( tor->bandwidth, dir, do_use );
     136}
     137
     138tr_bool
     139tr_torrentIsUsingSpeedLimit( const tr_torrent * tor, tr_direction dir )
     140{
     141    assert( tr_isTorrent( tor ) );
     142    assert( tr_isDirection( dir ) );
     143
     144    return tr_bandwidthIsLimited( tor->bandwidth, dir );
     145}
     146
     147void
     148tr_torrentUseGlobalSpeedLimit( tr_torrent * tor, tr_direction dir, tr_bool do_use )
     149{
     150    assert( tr_isTorrent( tor ) );
     151    assert( tr_isDirection( dir ) );
     152
     153    tr_bandwidthHonorParentLimits( tor->bandwidth, dir, do_use );
     154}
     155
     156tr_bool
     157tr_torrentIsUsingGlobalSpeedLimit( const tr_torrent * tor, tr_direction dir )
     158{
     159    assert( tr_isTorrent( tor ) );
     160    assert( tr_isDirection( dir ) );
     161
     162    return tr_bandwidthAreParentLimitsHonored( tor->bandwidth, dir );
     163}
     164
     165/***
     166****
     167***/
    152168
    153169void
     
    193209                                  tr_direction        direction )
    194210{
    195     tr_bool isEnabled = FALSE;
    196 
    197     switch( tr_torrentGetSpeedMode( tor, direction ) )
    198     {
    199         case TR_SPEEDLIMIT_GLOBAL:
    200             isEnabled = !tr_sessionIsSpeedLimitEnabled( tor->session, direction )
    201                       || tr_sessionGetSpeedLimit( tor->session, direction ) > 0;
    202             break;
    203 
    204         case TR_SPEEDLIMIT_SINGLE:
    205             isEnabled = tr_torrentGetSpeedLimit( tor, direction ) > 0;
    206             break;
    207 
    208         case TR_SPEEDLIMIT_UNLIMITED:
    209             isEnabled = TRUE;
    210             break;
    211 
    212         default:
    213             assert( 0 && "unhandled speed mode" );
    214             break;
    215     }
    216 
    217     return isEnabled;
     211    tr_bool allowed = TRUE;
     212
     213    if( tr_torrentIsUsingSpeedLimit( tor, direction ) )
     214        if( tr_torrentGetSpeedLimit( tor, direction ) <= 0 )
     215            allowed = FALSE;
     216
     217    if( tr_torrentIsUsingGlobalSpeedLimit( tor, direction ) )
     218        if( tr_sessionIsSpeedLimitEnabled( tor->session, direction ) )
     219            if( tr_sessionGetSpeedLimit( tor->session, direction ) <= 0 )
     220                allowed = FALSE;
     221
     222    return allowed;
    218223}
    219224
  • trunk/libtransmission/torrent.h

    r7977 r8021  
    133133    tr_info                  info;
    134134
    135     tr_speedlimit            speedLimitMode[2];
    136 
    137135    struct tr_ratecontrol    swarmSpeed;
    138136
  • trunk/libtransmission/transmission.h

    r7988 r8021  
    873873****/
    874874
    875 typedef enum
    876 {
    877     TR_SPEEDLIMIT_GLOBAL,    /* only follow the overall speed limit */
    878     TR_SPEEDLIMIT_SINGLE,    /* only follow the per-torrent limit */
    879     TR_SPEEDLIMIT_UNLIMITED  /* no limits at all */
    880 }
    881 tr_speedlimit;
     875void     tr_torrentSetSpeedLimit( tr_torrent *, tr_direction, int KiB_sec );
     876
     877int      tr_torrentGetSpeedLimit( const tr_torrent *, tr_direction );
     878
     879void     tr_torrentUseSpeedLimit( tr_torrent *, tr_direction, tr_bool do_use );
     880
     881tr_bool  tr_torrentIsUsingSpeedLimit( const tr_torrent *, tr_direction );
     882
     883void     tr_torrentUseGlobalSpeedLimit( tr_torrent *, tr_direction, tr_bool do_use );
     884
     885tr_bool  tr_torrentIsUsingGlobalSpeedLimit ( const tr_torrent *, tr_direction );
     886
     887/****
     888*****  Ratio Limits
     889****/
    882890
    883891typedef enum
     
    888896}
    889897tr_ratiolimit;
    890 
    891 void          tr_torrentSetSpeedMode( tr_torrent     * tor,
    892                                       tr_direction     up_or_down,
    893                                       tr_speedlimit    mode );
    894 
    895 tr_speedlimit tr_torrentGetSpeedMode( const tr_torrent * tor,
    896                                       tr_direction       direction );
    897 
    898 void          tr_torrentSetSpeedLimit( tr_torrent    * tor,
    899                                        tr_direction    up_or_down,
    900                                        int             KiB_sec );
    901 
    902 int           tr_torrentGetSpeedLimit( const tr_torrent  * tor,
    903                                        tr_direction        direction );
    904898
    905899void          tr_torrentSetRatioMode( tr_torrent         * tor,
Note: See TracChangeset for help on using the changeset viewer.