Changeset 4272


Ignore:
Timestamp:
Dec 22, 2007, 12:06:38 AM (15 years ago)
Author:
charles
Message:

(gtk) add options to set global & per-torrent peer connection limits

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/torrent-inspector.c

    r4210 r4272  
    15351535
    15361536
     1537#if 0
    15371538static void
    15381539seeding_cap_toggled_cb (GtkToggleButton *tb, gpointer gtor)
     
    15411542                                      gtk_toggle_button_get_active(tb));
    15421543}
     1544#endif
    15431545
    15441546static void
     
    15671569}
    15681570
     1571#if 0
    15691572static void
    15701573seeding_ratio_spun_cb (GtkSpinButton *spin, gpointer gtor)
     
    15731576                                    gtk_spin_button_get_value(spin));
    15741577}
     1578#endif
     1579
     1580static void
     1581max_peers_spun_cb( GtkSpinButton * spin, gpointer gtor )
     1582{
     1583  const uint16_t maxConnectedPeers = gtk_spin_button_get_value( spin );
     1584  tr_torrentSetPeerLimits( tr_torrent_handle( gtor ), maxConnectedPeers, 0 );
     1585}
    15751586
    15761587GtkWidget*
    15771588options_page_new ( TrTorrent * gtor )
    15781589{
     1590  uint8_t maxUnchokedPeers;
     1591  uint16_t maxConnectedPeers;
    15791592  int i, row;
    15801593  gboolean b;
     
    16151628
    16161629  hig_workarea_add_section_divider (t, &row);
    1617   hig_workarea_add_section_title (t, &row, _("Seeding"));
     1630  hig_workarea_add_section_title (t, &row, _("Peer Connections"));
    16181631  hig_workarea_add_section_spacer (t, row, 1);
    16191632
     1633    tr_torrentGetPeerLimits( tor, &maxConnectedPeers, &maxUnchokedPeers );
     1634    w = gtk_spin_button_new_with_range( 1, 3000, 5 );
     1635    gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), maxConnectedPeers );
     1636    hig_workarea_add_row( t, &row, _( "Maximum connected peers:" ), w, NULL );
     1637    g_signal_connect( w, "value-changed", G_CALLBACK( max_peers_spun_cb ), gtor );
     1638
     1639#if 0
    16201640    tb = gtk_check_button_new_with_mnemonic (_("_Stop Seeding at Ratio:"));
    16211641    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(tb), gtor->seeding_cap_enabled);
     
    16271647    sensitize_from_check_cb (GTK_TOGGLE_BUTTON(tb), w);
    16281648    hig_workarea_add_row_w (t, &row, tb, w, NULL);
     1649#endif
    16291650
    16301651  hig_workarea_finish (t, &row);
  • trunk/gtk/tr_core.c

    r4267 r4272  
    307307prefsChanged( TrCore * core, const char * key, gpointer data UNUSED )
    308308{
    309     if( !strcmp( key, PREF_KEY_SORT_MODE )
    310      || !strcmp( key, PREF_KEY_SORT_REVERSED ) )
     309    if( !strcmp( key, PREF_KEY_SORT_MODE ) || !strcmp( key, PREF_KEY_SORT_REVERSED ) )
    311310    {
    312311        char * mode = pref_string_get( PREF_KEY_SORT_MODE );
     
    314313        setSort( core, mode, isReversed );
    315314        g_free( mode );
     315    }
     316    else if( !strcmp( key, PREF_KEY_MAX_PEERS_GLOBAL ) )
     317    {
     318        const uint16_t val = pref_int_get( key );
     319        tr_setGlobalPeerLimit( core->handle, val );
    316320    }
    317321}
     
    384388    prefsChanged( core, PREF_KEY_SORT_MODE, NULL );
    385389    prefsChanged( core, PREF_KEY_SORT_REVERSED, NULL );
     390    prefsChanged( core, PREF_KEY_MAX_PEERS_GLOBAL, NULL );
    386391
    387392    return core;
     
    463468    tr_ctorSetPaused( ctor, TR_FORCE, paused );
    464469    tr_ctorSetDestination( ctor, TR_FALLBACK, path );
     470    tr_ctorSetMaxConnectedPeers( ctor, TR_FALLBACK, pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
    465471
    466472    torrents = tr_loadTorrents ( self->handle, ctor, &count );
  • trunk/gtk/tr_prefs.c

    r4248 r4272  
    3030    cf_check_older_configs( );
    3131
     32    pref_int_set_default    ( PREF_KEY_MAX_PEERS_GLOBAL, 400 );
     33    pref_int_set_default    ( PREF_KEY_MAX_PEERS_PER_TORRENT, 60 );
     34
    3235    pref_string_set_default ( PREF_KEY_STATUS_BAR_STATS, "total-ratio" );
    3336    pref_flag_set_default   ( PREF_KEY_STATUS_BAR, TRUE );
     
    301304
    302305    hig_workarea_add_section_divider( t, &row );
     306    hig_workarea_add_section_title( t, &row, _( "Peer Connections" ) );
     307    hig_workarea_add_section_spacer(t , row, 2 );
     308 
     309        w = new_spin_button( PREF_KEY_MAX_PEERS_GLOBAL, core, 1, 3000 );
     310        hig_workarea_add_row( t, &row, _( "Global maximum connected peers:" ), w, NULL );
     311        w = new_spin_button( PREF_KEY_MAX_PEERS_PER_TORRENT, core, 1, 300 );
     312        hig_workarea_add_row( t, &row, _( "Maximum connected peers for new torrents:" ), w, NULL );
     313
     314    hig_workarea_add_section_divider( t, &row );
    303315    hig_workarea_add_section_title (t, &row, _("Network"));
    304316    hig_workarea_add_section_spacer (t, row, 2);
  • trunk/gtk/tr_prefs.h

    r4248 r4272  
    2121 * default in tr_prefs_init_global( void ) */
    2222
    23 #define PREF_KEY_DL_LIMIT_ENABLED  "download-limit-enabled"
    24 #define PREF_KEY_DL_LIMIT          "download-limit"
    25 #define PREF_KEY_UL_LIMIT_ENABLED  "upload-limit-enabled"
    26 #define PREF_KEY_UL_LIMIT          "upload-limit"
    27 #define PREF_KEY_DIR_ASK           "prompt-for-download-directory"
    28 #define PREF_KEY_DIR_DEFAULT       "default-download-directory"
    29 #define PREF_KEY_ADDSTD            "add-behavior-standard"
    30 #define PREF_KEY_ADDIPC            "add-behavior-ipc"
    31 #define PREF_KEY_PORT              "listening-port"
    32 #define PREF_KEY_NAT               "nat-traversal-enabled"
    33 #define PREF_KEY_PEX               "pex-enabled"
    34 #define PREF_KEY_SYSTRAY           "system-tray-icon-enabled"
    35 #define PREF_KEY_ASKQUIT           "prompt-before-exit"
    36 #define PREF_KEY_ENCRYPTED_ONLY    "encrypted-connections-only"
    37 #define PREF_KEY_MSGLEVEL          "debug-message-level"
    38 #define PREF_KEY_SORT_MODE         "sort-mode"
    39 #define PREF_KEY_SORT_REVERSED     "sort-reversed"
    40 #define PREF_KEY_MINIMAL_VIEW      "minimal-view"
    41 #define PREF_KEY_STATUS_BAR        "show-status-bar"
    42 #define PREF_KEY_STATUS_BAR_STATS  "status-bar-stats"
    43 #define PREF_KEY_TOOLBAR           "show-toolbar"
     23#define PREF_KEY_DL_LIMIT_ENABLED       "download-limit-enabled"
     24#define PREF_KEY_DL_LIMIT               "download-limit"
     25#define PREF_KEY_UL_LIMIT_ENABLED       "upload-limit-enabled"
     26#define PREF_KEY_UL_LIMIT               "upload-limit"
     27#define PREF_KEY_DIR_ASK                "prompt-for-download-directory"
     28#define PREF_KEY_DIR_DEFAULT            "default-download-directory"
     29#define PREF_KEY_ADDSTD                 "add-behavior-standard"
     30#define PREF_KEY_ADDIPC                 "add-behavior-ipc"
     31#define PREF_KEY_PORT                   "listening-port"
     32#define PREF_KEY_NAT                    "nat-traversal-enabled"
     33#define PREF_KEY_PEX                    "pex-enabled"
     34#define PREF_KEY_SYSTRAY                "system-tray-icon-enabled"
     35#define PREF_KEY_ASKQUIT                "prompt-before-exit"
     36#define PREF_KEY_ENCRYPTED_ONLY         "encrypted-connections-only"
     37#define PREF_KEY_MSGLEVEL               "debug-message-level"
     38#define PREF_KEY_SORT_MODE              "sort-mode"
     39#define PREF_KEY_SORT_REVERSED          "sort-reversed"
     40#define PREF_KEY_MINIMAL_VIEW           "minimal-view"
     41#define PREF_KEY_STATUS_BAR             "show-status-bar"
     42#define PREF_KEY_STATUS_BAR_STATS       "status-bar-stats"
     43#define PREF_KEY_TOOLBAR                "show-toolbar"
     44#define PREF_KEY_MAX_PEERS_GLOBAL       "max-peers-global"
     45#define PREF_KEY_MAX_PEERS_PER_TORRENT  "max-peers-per-torrent"
     46
    4447
    4548void tr_prefs_init_global( void );
  • trunk/gtk/tr_torrent.c

    r4267 r4272  
    176176}
    177177
    178 
    179178TrTorrent *
    180 tr_torrent_new( tr_handle * back, const char *torrent, const char *dir,
    181                 enum tr_torrent_action act, gboolean paused, char **err )
    182 {
    183   TrTorrent *ret;
    184   tr_torrent *handle;
    185   int errcode;
    186 
    187   g_assert(NULL != dir);
     179tr_torrent_new( tr_handle               * handle,
     180                const char              * metainfo_filename,
     181                const char              * destination,
     182                enum tr_torrent_action    act,
     183                gboolean                  paused,
     184                char                   ** err )
     185{
     186  TrTorrent * ret;
     187  tr_torrent * tor;
     188  tr_ctor * ctor;
     189  int errcode = -1;
     190
     191  g_assert( destination );
    188192
    189193  *err = NULL;
    190194
    191   errcode = -1;
    192 
    193   handle = tr_torrentInit( back, torrent, dir, paused, &errcode );
    194 
    195   if(NULL == handle) {
    196     switch(errcode) {
     195  ctor = tr_ctorNew( handle );
     196  tr_ctorSetMetainfoFromFile( ctor, metainfo_filename );
     197  tr_ctorSetDestination( ctor, TR_FORCE, destination );
     198  tr_ctorSetPaused( ctor, TR_FORCE, paused );
     199  tr_ctorSetMaxConnectedPeers( ctor, TR_FORCE, pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
     200  tor = tr_torrentNew( handle, ctor, &errcode );
     201  tr_ctorFree( ctor );
     202 
     203  if( tor == NULL ) {
     204    switch( errcode ) {
    197205      case TR_EINVALID:
    198         *err = g_strdup_printf(_("%s: not a valid torrent file"), torrent);
     206        *err = g_strdup_printf(_("%s: not a valid torrent file"), metainfo_filename );
    199207        break;
    200208      case TR_EDUPLICATE:
    201         *err = g_strdup_printf(_("%s: torrent is already open"), torrent);
     209        *err = g_strdup_printf(_("%s: torrent is already open"), metainfo_filename );
    202210        break;
    203211      default:
    204         *err = g_strdup(torrent);
     212        *err = g_strdup( metainfo_filename );
    205213        break;
    206214    }
     
    208216  }
    209217
    210   ret = maketorrent( handle );
    211 
     218  ret = maketorrent( tor );
    212219  if( TR_TOR_MOVE == act )
    213     ret->delfile = g_strdup(torrent);
    214 
     220    ret->delfile = g_strdup( metainfo_filename );
    215221  return ret;
    216222}
    217223
    218224TrTorrent *
    219 tr_torrent_new_with_data( tr_handle * back, uint8_t * data, size_t size,
    220                           const char * dir, gboolean paused, char ** err )
    221 {
    222     tr_torrent * handle;
    223     int          errcode;
    224 
    225     g_assert( NULL != dir );
    226 
    227     *err = NULL;
    228 
    229     errcode = -1;
    230     handle  = tr_torrentInitData( back, data, size, dir, paused, &errcode );
    231 
    232     if( NULL == handle )
    233     {
    234         switch( errcode )
    235         {
    236             case TR_EINVALID:
    237                 *err = g_strdup( _("not a valid torrent file") );
    238                 break;
    239             case TR_EDUPLICATE:
    240                 *err = g_strdup( _("torrent is already open") );
    241                 break;
    242             default:
    243                 *err = g_strdup( "" );
    244                 break;
    245         }
    246         return NULL;
     225tr_torrent_new_with_data( tr_handle    * handle,
     226                          uint8_t      * metainfo,
     227                          size_t         size,
     228                          const char   * destination,
     229                          gboolean       paused,
     230                          char        ** err )
     231{
     232  tr_torrent * tor;
     233  tr_ctor * ctor;
     234  int errcode = -1; 
     235
     236  g_assert( destination );
     237
     238  *err = NULL;
     239
     240  ctor = tr_ctorNew( handle );
     241  tr_ctorSetMetainfo( ctor, metainfo, size );
     242  tr_ctorSetDestination( ctor, TR_FORCE, destination );
     243  tr_ctorSetPaused( ctor, TR_FORCE, paused );
     244  tr_ctorSetMaxConnectedPeers( ctor, TR_FORCE, pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
     245  tor = tr_torrentNew( handle, ctor, &errcode );
     246 
     247  if( tor == NULL ) {
     248    switch( errcode ) {
     249      case TR_EINVALID:
     250        *err = g_strdup( _("not a valid torrent file") );
     251        break;
     252      case TR_EDUPLICATE:
     253        *err = g_strdup( _("torrent is already open") );
     254        break;
     255      default:
     256        *err = g_strdup( "" );
     257        break;
    247258    }
    248 
    249     return maketorrent( handle );
     259    return NULL;
     260  }
     261
     262  return maketorrent( tor );
    250263}
    251264
  • trunk/libtransmission/torrent.c

    r4270 r4272  
    13051305tr_torrentSetPeerLimits( tr_torrent  * tor,
    13061306                         uint16_t      maxConnectedPeers,
    1307                          uint16_t      maxUnchokedPeers )
     1307                         uint8_t       maxUnchokedPeers )
    13081308{
    13091309    if( maxConnectedPeers )
     
    13161316tr_torrentGetPeerLimits( const tr_torrent  * tor,
    13171317                         uint16_t          * maxConnectedPeers,
    1318                          uint16_t          * maxUnchokedPeers )
     1318                         uint8_t           * maxUnchokedPeers )
    13191319{
    13201320    if( maxConnectedPeers )
  • trunk/libtransmission/transmission.h

    r4267 r4272  
    279279**/
    280280
     281/* pass `0' to a field here to leave it unchanged */
    281282void tr_torrentSetPeerLimits( tr_torrent  * tor,
    282283                              uint16_t      maxConnectedPeers,
    283                               uint16_t      maxUnchokedPeers );
     284                              uint8_t       maxUnchokedPeers );
    284285
    285286void tr_torrentGetPeerLimits( const tr_torrent  * tor,
    286287                              uint16_t          * maxConnectedPeers,
    287                               uint16_t          * maxUnchokedPeers );
     288                              uint8_t           * maxUnchokedPeers );
    288289
    289290void tr_setGlobalPeerLimit( tr_handle * handle,
Note: See TracChangeset for help on using the changeset viewer.