(gtk) add options to set global & per-torrent peer connection limits
This commit is contained in:
parent
ccc804e06a
commit
93f69d2b5c
|
@ -1534,12 +1534,14 @@ dl_speed_toggled_cb (GtkToggleButton *tb, gpointer gtor)
|
|||
}
|
||||
|
||||
|
||||
#if 0
|
||||
static void
|
||||
seeding_cap_toggled_cb (GtkToggleButton *tb, gpointer gtor)
|
||||
{
|
||||
tr_torrent_set_seeding_cap_enabled (TR_TORRENT(gtor),
|
||||
gtk_toggle_button_get_active(tb));
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
sensitize_from_check_cb (GtkToggleButton *toggle, gpointer w)
|
||||
|
@ -1566,16 +1568,27 @@ dl_speed_spun_cb (GtkSpinButton *spin, gpointer gtor)
|
|||
setSpeedLimit( spin, gtor, TR_DOWN );
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void
|
||||
seeding_ratio_spun_cb (GtkSpinButton *spin, gpointer gtor)
|
||||
{
|
||||
tr_torrent_set_seeding_cap_ratio (TR_TORRENT(gtor),
|
||||
gtk_spin_button_get_value(spin));
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
max_peers_spun_cb( GtkSpinButton * spin, gpointer gtor )
|
||||
{
|
||||
const uint16_t maxConnectedPeers = gtk_spin_button_get_value( spin );
|
||||
tr_torrentSetPeerLimits( tr_torrent_handle( gtor ), maxConnectedPeers, 0 );
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
options_page_new ( TrTorrent * gtor )
|
||||
{
|
||||
uint8_t maxUnchokedPeers;
|
||||
uint16_t maxConnectedPeers;
|
||||
int i, row;
|
||||
gboolean b;
|
||||
GtkAdjustment *a;
|
||||
|
@ -1614,9 +1627,16 @@ options_page_new ( TrTorrent * gtor )
|
|||
hig_workarea_add_row_w (t, &row, tb, w, NULL);
|
||||
|
||||
hig_workarea_add_section_divider (t, &row);
|
||||
hig_workarea_add_section_title (t, &row, _("Seeding"));
|
||||
hig_workarea_add_section_title (t, &row, _("Peer Connections"));
|
||||
hig_workarea_add_section_spacer (t, row, 1);
|
||||
|
||||
tr_torrentGetPeerLimits( tor, &maxConnectedPeers, &maxUnchokedPeers );
|
||||
w = gtk_spin_button_new_with_range( 1, 3000, 5 );
|
||||
gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), maxConnectedPeers );
|
||||
hig_workarea_add_row( t, &row, _( "Maximum connected peers:" ), w, NULL );
|
||||
g_signal_connect( w, "value-changed", G_CALLBACK( max_peers_spun_cb ), gtor );
|
||||
|
||||
#if 0
|
||||
tb = gtk_check_button_new_with_mnemonic (_("_Stop Seeding at Ratio:"));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(tb), gtor->seeding_cap_enabled);
|
||||
g_signal_connect (tb, "toggled", G_CALLBACK(seeding_cap_toggled_cb), gtor);
|
||||
|
@ -1626,6 +1646,7 @@ options_page_new ( TrTorrent * gtor )
|
|||
g_signal_connect (tb, "toggled", G_CALLBACK(sensitize_from_check_cb), w);
|
||||
sensitize_from_check_cb (GTK_TOGGLE_BUTTON(tb), w);
|
||||
hig_workarea_add_row_w (t, &row, tb, w, NULL);
|
||||
#endif
|
||||
|
||||
hig_workarea_finish (t, &row);
|
||||
return t;
|
||||
|
|
|
@ -306,14 +306,18 @@ setSort( TrCore * core, const char * mode, gboolean isReversed )
|
|||
static void
|
||||
prefsChanged( TrCore * core, const char * key, gpointer data UNUSED )
|
||||
{
|
||||
if( !strcmp( key, PREF_KEY_SORT_MODE )
|
||||
|| !strcmp( key, PREF_KEY_SORT_REVERSED ) )
|
||||
if( !strcmp( key, PREF_KEY_SORT_MODE ) || !strcmp( key, PREF_KEY_SORT_REVERSED ) )
|
||||
{
|
||||
char * mode = pref_string_get( PREF_KEY_SORT_MODE );
|
||||
gboolean isReversed = pref_flag_get( PREF_KEY_SORT_REVERSED );
|
||||
setSort( core, mode, isReversed );
|
||||
g_free( mode );
|
||||
}
|
||||
else if( !strcmp( key, PREF_KEY_MAX_PEERS_GLOBAL ) )
|
||||
{
|
||||
const uint16_t val = pref_int_get( key );
|
||||
tr_setGlobalPeerLimit( core->handle, val );
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -383,6 +387,7 @@ tr_core_new( void )
|
|||
g_signal_connect( core, "prefs-changed", G_CALLBACK(prefsChanged), NULL );
|
||||
prefsChanged( core, PREF_KEY_SORT_MODE, NULL );
|
||||
prefsChanged( core, PREF_KEY_SORT_REVERSED, NULL );
|
||||
prefsChanged( core, PREF_KEY_MAX_PEERS_GLOBAL, NULL );
|
||||
|
||||
return core;
|
||||
}
|
||||
|
@ -462,6 +467,7 @@ tr_core_load( TrCore * self, gboolean paused )
|
|||
ctor = tr_ctorNew( self->handle );
|
||||
tr_ctorSetPaused( ctor, TR_FORCE, paused );
|
||||
tr_ctorSetDestination( ctor, TR_FALLBACK, path );
|
||||
tr_ctorSetMaxConnectedPeers( ctor, TR_FALLBACK, pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
|
||||
|
||||
torrents = tr_loadTorrents ( self->handle, ctor, &count );
|
||||
for( i=0; i<count; ++i )
|
||||
|
|
|
@ -29,6 +29,9 @@ tr_prefs_init_global( void )
|
|||
{
|
||||
cf_check_older_configs( );
|
||||
|
||||
pref_int_set_default ( PREF_KEY_MAX_PEERS_GLOBAL, 400 );
|
||||
pref_int_set_default ( PREF_KEY_MAX_PEERS_PER_TORRENT, 60 );
|
||||
|
||||
pref_string_set_default ( PREF_KEY_STATUS_BAR_STATS, "total-ratio" );
|
||||
pref_flag_set_default ( PREF_KEY_STATUS_BAR, TRUE );
|
||||
pref_flag_set_default ( PREF_KEY_TOOLBAR, TRUE );
|
||||
|
@ -299,6 +302,15 @@ tr_prefs_dialog_new( GObject * core, GtkWindow * parent )
|
|||
s = _("For torrents added from _command-line:");
|
||||
l = hig_workarea_add_row( t, &row, s, w, NULL );
|
||||
|
||||
hig_workarea_add_section_divider( t, &row );
|
||||
hig_workarea_add_section_title( t, &row, _( "Peer Connections" ) );
|
||||
hig_workarea_add_section_spacer(t , row, 2 );
|
||||
|
||||
w = new_spin_button( PREF_KEY_MAX_PEERS_GLOBAL, core, 1, 3000 );
|
||||
hig_workarea_add_row( t, &row, _( "Global maximum connected peers:" ), w, NULL );
|
||||
w = new_spin_button( PREF_KEY_MAX_PEERS_PER_TORRENT, core, 1, 300 );
|
||||
hig_workarea_add_row( t, &row, _( "Maximum connected peers for new torrents:" ), w, NULL );
|
||||
|
||||
hig_workarea_add_section_divider( t, &row );
|
||||
hig_workarea_add_section_title (t, &row, _("Network"));
|
||||
hig_workarea_add_section_spacer (t, row, 2);
|
||||
|
|
|
@ -20,27 +20,30 @@ GtkWidget * tr_prefs_dialog_new( GObject * core, GtkWindow * parent );
|
|||
/* if you add a key here, you /must/ add its
|
||||
* default in tr_prefs_init_global( void ) */
|
||||
|
||||
#define PREF_KEY_DL_LIMIT_ENABLED "download-limit-enabled"
|
||||
#define PREF_KEY_DL_LIMIT "download-limit"
|
||||
#define PREF_KEY_UL_LIMIT_ENABLED "upload-limit-enabled"
|
||||
#define PREF_KEY_UL_LIMIT "upload-limit"
|
||||
#define PREF_KEY_DIR_ASK "prompt-for-download-directory"
|
||||
#define PREF_KEY_DIR_DEFAULT "default-download-directory"
|
||||
#define PREF_KEY_ADDSTD "add-behavior-standard"
|
||||
#define PREF_KEY_ADDIPC "add-behavior-ipc"
|
||||
#define PREF_KEY_PORT "listening-port"
|
||||
#define PREF_KEY_NAT "nat-traversal-enabled"
|
||||
#define PREF_KEY_PEX "pex-enabled"
|
||||
#define PREF_KEY_SYSTRAY "system-tray-icon-enabled"
|
||||
#define PREF_KEY_ASKQUIT "prompt-before-exit"
|
||||
#define PREF_KEY_ENCRYPTED_ONLY "encrypted-connections-only"
|
||||
#define PREF_KEY_MSGLEVEL "debug-message-level"
|
||||
#define PREF_KEY_SORT_MODE "sort-mode"
|
||||
#define PREF_KEY_SORT_REVERSED "sort-reversed"
|
||||
#define PREF_KEY_MINIMAL_VIEW "minimal-view"
|
||||
#define PREF_KEY_STATUS_BAR "show-status-bar"
|
||||
#define PREF_KEY_STATUS_BAR_STATS "status-bar-stats"
|
||||
#define PREF_KEY_TOOLBAR "show-toolbar"
|
||||
#define PREF_KEY_DL_LIMIT_ENABLED "download-limit-enabled"
|
||||
#define PREF_KEY_DL_LIMIT "download-limit"
|
||||
#define PREF_KEY_UL_LIMIT_ENABLED "upload-limit-enabled"
|
||||
#define PREF_KEY_UL_LIMIT "upload-limit"
|
||||
#define PREF_KEY_DIR_ASK "prompt-for-download-directory"
|
||||
#define PREF_KEY_DIR_DEFAULT "default-download-directory"
|
||||
#define PREF_KEY_ADDSTD "add-behavior-standard"
|
||||
#define PREF_KEY_ADDIPC "add-behavior-ipc"
|
||||
#define PREF_KEY_PORT "listening-port"
|
||||
#define PREF_KEY_NAT "nat-traversal-enabled"
|
||||
#define PREF_KEY_PEX "pex-enabled"
|
||||
#define PREF_KEY_SYSTRAY "system-tray-icon-enabled"
|
||||
#define PREF_KEY_ASKQUIT "prompt-before-exit"
|
||||
#define PREF_KEY_ENCRYPTED_ONLY "encrypted-connections-only"
|
||||
#define PREF_KEY_MSGLEVEL "debug-message-level"
|
||||
#define PREF_KEY_SORT_MODE "sort-mode"
|
||||
#define PREF_KEY_SORT_REVERSED "sort-reversed"
|
||||
#define PREF_KEY_MINIMAL_VIEW "minimal-view"
|
||||
#define PREF_KEY_STATUS_BAR "show-status-bar"
|
||||
#define PREF_KEY_STATUS_BAR_STATS "status-bar-stats"
|
||||
#define PREF_KEY_TOOLBAR "show-toolbar"
|
||||
#define PREF_KEY_MAX_PEERS_GLOBAL "max-peers-global"
|
||||
#define PREF_KEY_MAX_PEERS_PER_TORRENT "max-peers-per-torrent"
|
||||
|
||||
|
||||
void tr_prefs_init_global( void );
|
||||
|
||||
|
|
103
gtk/tr_torrent.c
103
gtk/tr_torrent.c
|
@ -175,78 +175,91 @@ tr_torrent_new_preexisting( tr_torrent * tor )
|
|||
return maketorrent( tor );
|
||||
}
|
||||
|
||||
|
||||
TrTorrent *
|
||||
tr_torrent_new( tr_handle * back, const char *torrent, const char *dir,
|
||||
enum tr_torrent_action act, gboolean paused, char **err )
|
||||
tr_torrent_new( tr_handle * handle,
|
||||
const char * metainfo_filename,
|
||||
const char * destination,
|
||||
enum tr_torrent_action act,
|
||||
gboolean paused,
|
||||
char ** err )
|
||||
{
|
||||
TrTorrent *ret;
|
||||
tr_torrent *handle;
|
||||
int errcode;
|
||||
TrTorrent * ret;
|
||||
tr_torrent * tor;
|
||||
tr_ctor * ctor;
|
||||
int errcode = -1;
|
||||
|
||||
g_assert(NULL != dir);
|
||||
g_assert( destination );
|
||||
|
||||
*err = NULL;
|
||||
|
||||
errcode = -1;
|
||||
|
||||
handle = tr_torrentInit( back, torrent, dir, paused, &errcode );
|
||||
|
||||
if(NULL == handle) {
|
||||
switch(errcode) {
|
||||
ctor = tr_ctorNew( handle );
|
||||
tr_ctorSetMetainfoFromFile( ctor, metainfo_filename );
|
||||
tr_ctorSetDestination( ctor, TR_FORCE, destination );
|
||||
tr_ctorSetPaused( ctor, TR_FORCE, paused );
|
||||
tr_ctorSetMaxConnectedPeers( ctor, TR_FORCE, pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
|
||||
tor = tr_torrentNew( handle, ctor, &errcode );
|
||||
tr_ctorFree( ctor );
|
||||
|
||||
if( tor == NULL ) {
|
||||
switch( errcode ) {
|
||||
case TR_EINVALID:
|
||||
*err = g_strdup_printf(_("%s: not a valid torrent file"), torrent);
|
||||
*err = g_strdup_printf(_("%s: not a valid torrent file"), metainfo_filename );
|
||||
break;
|
||||
case TR_EDUPLICATE:
|
||||
*err = g_strdup_printf(_("%s: torrent is already open"), torrent);
|
||||
*err = g_strdup_printf(_("%s: torrent is already open"), metainfo_filename );
|
||||
break;
|
||||
default:
|
||||
*err = g_strdup(torrent);
|
||||
*err = g_strdup( metainfo_filename );
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret = maketorrent( handle );
|
||||
|
||||
ret = maketorrent( tor );
|
||||
if( TR_TOR_MOVE == act )
|
||||
ret->delfile = g_strdup(torrent);
|
||||
|
||||
ret->delfile = g_strdup( metainfo_filename );
|
||||
return ret;
|
||||
}
|
||||
|
||||
TrTorrent *
|
||||
tr_torrent_new_with_data( tr_handle * back, uint8_t * data, size_t size,
|
||||
const char * dir, gboolean paused, char ** err )
|
||||
tr_torrent_new_with_data( tr_handle * handle,
|
||||
uint8_t * metainfo,
|
||||
size_t size,
|
||||
const char * destination,
|
||||
gboolean paused,
|
||||
char ** err )
|
||||
{
|
||||
tr_torrent * handle;
|
||||
int errcode;
|
||||
tr_torrent * tor;
|
||||
tr_ctor * ctor;
|
||||
int errcode = -1;
|
||||
|
||||
g_assert( NULL != dir );
|
||||
g_assert( destination );
|
||||
|
||||
*err = NULL;
|
||||
*err = NULL;
|
||||
|
||||
errcode = -1;
|
||||
handle = tr_torrentInitData( back, data, size, dir, paused, &errcode );
|
||||
|
||||
if( NULL == handle )
|
||||
{
|
||||
switch( errcode )
|
||||
{
|
||||
case TR_EINVALID:
|
||||
*err = g_strdup( _("not a valid torrent file") );
|
||||
break;
|
||||
case TR_EDUPLICATE:
|
||||
*err = g_strdup( _("torrent is already open") );
|
||||
break;
|
||||
default:
|
||||
*err = g_strdup( "" );
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
ctor = tr_ctorNew( handle );
|
||||
tr_ctorSetMetainfo( ctor, metainfo, size );
|
||||
tr_ctorSetDestination( ctor, TR_FORCE, destination );
|
||||
tr_ctorSetPaused( ctor, TR_FORCE, paused );
|
||||
tr_ctorSetMaxConnectedPeers( ctor, TR_FORCE, pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
|
||||
tor = tr_torrentNew( handle, ctor, &errcode );
|
||||
|
||||
if( tor == NULL ) {
|
||||
switch( errcode ) {
|
||||
case TR_EINVALID:
|
||||
*err = g_strdup( _("not a valid torrent file") );
|
||||
break;
|
||||
case TR_EDUPLICATE:
|
||||
*err = g_strdup( _("torrent is already open") );
|
||||
break;
|
||||
default:
|
||||
*err = g_strdup( "" );
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return maketorrent( handle );
|
||||
return maketorrent( tor );
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1304,7 +1304,7 @@ tr_torrentSetFileDLs ( tr_torrent * tor,
|
|||
void
|
||||
tr_torrentSetPeerLimits( tr_torrent * tor,
|
||||
uint16_t maxConnectedPeers,
|
||||
uint16_t maxUnchokedPeers )
|
||||
uint8_t maxUnchokedPeers )
|
||||
{
|
||||
if( maxConnectedPeers )
|
||||
tor->maxConnectedPeers = maxConnectedPeers;
|
||||
|
@ -1315,7 +1315,7 @@ tr_torrentSetPeerLimits( tr_torrent * tor,
|
|||
void
|
||||
tr_torrentGetPeerLimits( const tr_torrent * tor,
|
||||
uint16_t * maxConnectedPeers,
|
||||
uint16_t * maxUnchokedPeers )
|
||||
uint8_t * maxUnchokedPeers )
|
||||
{
|
||||
if( maxConnectedPeers )
|
||||
*maxConnectedPeers = tor->maxConnectedPeers;
|
||||
|
|
|
@ -278,13 +278,14 @@ void tr_getGlobalSpeedLimit( tr_handle * handle,
|
|||
*** Peer Limits
|
||||
**/
|
||||
|
||||
/* pass `0' to a field here to leave it unchanged */
|
||||
void tr_torrentSetPeerLimits( tr_torrent * tor,
|
||||
uint16_t maxConnectedPeers,
|
||||
uint16_t maxUnchokedPeers );
|
||||
uint8_t maxUnchokedPeers );
|
||||
|
||||
void tr_torrentGetPeerLimits( const tr_torrent * tor,
|
||||
uint16_t * maxConnectedPeers,
|
||||
uint16_t * maxUnchokedPeers );
|
||||
uint8_t * maxUnchokedPeers );
|
||||
|
||||
void tr_setGlobalPeerLimit( tr_handle * handle,
|
||||
uint16_t maxGlobalPeers );
|
||||
|
|
Loading…
Reference in New Issue