<ul>
<li id="prefs_tab_general_tab" class="prefs_tab_enabled">General</li>
<li id="prefs_tab_speed_tab" class="prefs_tab_disabled">Speed</li>
+ <li id="prefs_tab_peers_tab" class="prefs_tab_disabled">Peers</li>
+ <li id="prefs_tab_network_tab" class="prefs_tab_disabled">Network</li>
</ul>
<div id="prefs_tab_general" class="prefs_tab">
<div class="preference download_location">
<label for="auto_start" class="item">Start transfers when added</label>
</div>
</div>
- <div class="preference port">
- <label class="category">Network:</label>
- <div class="formdiv">
- <label for="port" class="item">Incoming TCP Port:</label>
- <input type="text" id="port" name="port"/>
- </div>
- </div>
<div class="preference encryption">
<label class="category">Encryption:</label>
<div class="formdiv checkbox">
</div>
<div style="clear: both; visibility: hidden;"></div>
</div>
+ <div id="prefs_tab_peers" class="prefs_tab" style="display: none;">
+ <div class="preference peers_conn">
+ <label class="category">Connections:</label>
+ <div class="formdiv">
+ <label for="conn_global" class="item">Global maximum connections:</label>
+ <input type="text" name="conn_global" id="conn_global"/>
+ <label class="suffix">peers</label>
+ </div>
+ <div class="formdiv">
+ <label for="conn_torrent" class="item">Maximum connections for new transfers:</label>
+ <input type="text" name="conn_torrent" id="conn_torrent"/>
+ <label class="suffix">peers</label>
+ </div>
+ <div class="formdiv checkbox">
+ <input type="checkbox" name="conn_pex" id="conn_pex"/>
+ <label for="conn_pex" class="item">Use peer exchange (PEX) for public torrents</label>
+ </div>
+ <div class="formdiv checkbox">
+ <input type="checkbox" name="conn_dht" id="conn_dht"/>
+ <label for="conn_dht" class="item">Use distributed hash table (DHT) for public torrents</label>
+ </div>
+ <div class="formdiv checkbox">
+ <input type="checkbox" name="conn_lpd" id="conn_lpd"/>
+ <label for="conn_lpd" class="item">Use local peer discovery for public torrents</label>
+ </div>
+ </div>
+ <div class="preference block_conn">
+ <label class="category">Blocklist:</label>
+ <div class="formdiv checkbox">
+ <input type="checkbox" name="block_enable" id="block_enable"/>
+ <label for="block_enable" class="item">Prevent peers in blocklist from connecting</label>
+ </div>
+ <div class="formdiv block_url">
+ <label for="block_url" class="item">URL:</label>
+ <input type="text" name="block_url" id="block_url"/>
+ </div>
+ <div class="formdiv">
+ <input type="button" name="block_update_button" id="block_update_button" value="Update"/>
+ <label class="suffix" id="block_size">IP rules in the list</label>
+ </div>
+ </div>
+ <div style="clear: both; visibility: hidden;"></div>
+ </div>
+ <div id="prefs_tab_network" class="prefs_tab" style="display: none;">
+ <div class="preference utp">
+ <label class="category">Peer communication:</label>
+ <div class="formdiv checkbox">
+ <input type="checkbox" name="network_utp" id="network_utp"/>
+ <label for="network_utp" class="item">Enable Micro Transport Protocol (µTP)</label>
+ </div>
+ </div>
+ <div class="preference port">
+ <label class="category">Peer listening port:</label>
+ <div class="formdiv">
+ <label for="port" class="item">Incoming TCP Port:</label>
+ <input type="text" id="port" name="port"/>
+ <label class="suffix" id="port_test"></label>
+ </div>
+ <div class="formdiv checkbox">
+ <input type="checkbox" name="port_rand" id="port_rand"/>
+ <label for="port_rand" class="item">Randomize port on launch</label>
+ </div>
+ <div class="formdiv checkbox">
+ <input type="checkbox" name="port_forward" id="port_forward"/>
+ <label for="port_forward" class="item">Automatically map port</label>
+ </div>
+ </div>
+ <div style="clear: both; visibility: hidden;"></div>
+ </div>
</div>
<span id="transmission_version"></span>
<a href="#save" id="prefs_save_button">Save</a>
/*
- * Copyright © Dave Perrett and Malcolm Jarvis
+ * Copyright © Dave Perrett, Malcolm Jarvis and Bruno Bierbaumer
* This code is licensed under the GPL version 2.
* For details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
$('#filter_finished_link').parent().bind('click', function(e){ tr.showFinishedClicked(e); });
$('#prefs_save_button').bind('click', function(e) { tr.savePrefsClicked(e); return false;});
$('#prefs_cancel_button').bind('click', function(e){ tr.cancelPrefsClicked(e); return false; });
+ $('#block_update_button').bind('click', function(e){ tr.blocklistUpdateClicked(e); return false; });
$('#stats_close_button').bind('click', function(e){ tr.closeStatsClicked(e); return false; });
$('.inspector_tab').bind('click', function(e){ tr.inspectorTabClicked(e, this); });
$('.file_wanted_control').live('click', function(e){ tr.fileWantedClicked(e, this); });
$('#turtle_button').bind('click', function(e){ tr.toggleTurtleClicked(e); return false; });
$('#prefs_tab_general_tab').click(function(e){ changeTab(this, 'prefs_tab_general') });
$('#prefs_tab_speed_tab').click(function(e){ changeTab(this, 'prefs_tab_speed') });
+ $('#prefs_tab_peers_tab').click(function(e){ changeTab(this, 'prefs_tab_peers') });
+ $('#prefs_tab_network_tab').click(function(e){ changeTab(this, 'prefs_tab_network');});
$('#torrent_upload_form').submit(function(){ $('#upload_confirm_button').click(); return false; });
+ $('#torrent_upload_form').submit(function(){ $('#upload_confirm_button').click(); return false; });
if (iPhone) {
$('#inspector_close').bind('click', function(e){ tr.hideInspector(); });
tr.updateStats( o );
}, async );
},
+ checkPort: function( async ){
+ $('#port_test').text('checking ...')
+ var tr = this;
+ this.remote.checkPort( function(data){
+ var o = data.arguments;
+ tr.updatePortStatus( o );
+ }, async );
+ },
preloadImages: function() {
if (iPhone) {
*/
setupPrefConstraints: function() {
// only allow integers for speed limit & port options
- $('div.preference input[@type=text]:not(#download_location)').blur( function() {
+ $('div.preference input[@type=text]:not(#download_location,#block_url)').blur( function() {
this.value = this.value.replace(/[^0-9]/gi, '');
if (this.value == '') {
if ($(this).is('#refresh_rate')) {
savePrefsClicked: function(event)
{
+
// handle the clutch prefs locally
var tr = this;
var rate = parseInt( $('#prefs_form #refresh_rate')[0].value );
o[RPC._TurtleTimeEnd] = parseInt( $('#prefs_form #turtle_end_time').val() );
o[RPC._TurtleTimeDay] = parseInt( $('#prefs_form #turtle_days').val() );
+
+ o[RPC._PeerLimitGlobal] = parseInt( $('#prefs_form #conn_global').val() );
+ o[RPC._PeerLimitPerTorrent] = parseInt( $('#prefs_form #conn_torrent').val() );
+ o[RPC._PexEnabled] = $('#prefs_form #conn_pex')[0].checked;
+ o[RPC._DhtEnabled] = $('#prefs_form #conn_dht')[0].checked;
+ o[RPC._LpdEnabled] = $('#prefs_form #conn_lpd')[0].checked;
+ o[RPC._BlocklistEnabled] = $('#prefs_form #block_enable')[0].checked;
+ o[RPC._BlocklistURL] = $('#prefs_form #block_url').val();
+ o[RPC._UtpEnabled] = $('#prefs_form #network_utp')[0].checked;
+ o[RPC._PeerPortRandom] = $('#prefs_form #port_rand')[0].checked;
+ o[RPC._PortForwardingEnabled]= $('#prefs_form #port_forward')[0].checked;
+
+
+
tr.remote.savePrefs( o );
tr.hidePrefsDialog( );
},
+ blocklistUpdateClicked: function(event){
+ var tr = this;
+ tr.remote.updateBlocklist();
+ },
closeStatsClicked: function(event) {
this.hideStatsDialog( );
*--------------------------------------------*/
showPrefsDialog: function( ) {
+ this.checkPort(true);
$('body').addClass('prefs_showing');
$('#prefs_container').show();
this.hideiPhoneAddressbar();
$('select#turtle_days').val( prefs[RPC._TurtleTimeDay] );
$('#transmission_version').text( prefs[RPC._DaemonVersion] );
+ $('#conn_global').val( prefs[RPC._PeerLimitGlobal] );
+ $('#conn_torrent').val( prefs[RPC._PeerLimitPerTorrent] );
+ $('#conn_pex')[0].checked = prefs[RPC._PexEnabled];
+ $('#conn_dht')[0].checked = prefs[RPC._DhtEnabled];
+ $('#conn_lpd')[0].checked = prefs[RPC._LpdEnabled];
+ $('#block_enable')[0].checked = prefs[RPC._BlocklistEnabled];
+ $('#block_url').val( prefs[RPC._BlocklistURL]);
+ $('#block_size').text( prefs[RPC._BlocklistSize] + ' IP rules in the list' );
+ $('#network_utp')[0].checked = prefs[RPC._UtpEnabled];
+ $('#port_rand')[0].checked = prefs[RPC._PeerPortRandom];
+ $('#port_forward')[0].checked = prefs[RPC._PortForwardingEnabled];
+
+
if (!iPhone)
{
setInnerHTML( $('#limited_download_rate')[0], [ 'Limit (', Transmission.fmt.speed(dn_limit_k), ')' ].join('') );
this.updateTurtleButton();
},
+ updatePortStatus: function( status ){
+ if(status['port-is-open'])
+ $('#port_test').text('Port is open');
+ else
+ $('#port_test').text('Port is closed');
+ },
+
showStatsDialog: function( ) {
this.loadDaemonStats();
$('body').addClass('stats_showing');
/*
- * Copyright © Dave Perrett and Malcolm Jarvis
+ * Copyright © Dave Perrett, Malcolm Jarvis and Bruno Bierbaumer
* This code is licensed under the GPL version 2.
* For details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
RPC._TurtleTimeBegin = 'alt-speed-time-begin';
RPC._TurtleTimeEnd = 'alt-speed-time-end';
RPC._TurtleTimeDay = 'alt-speed-time-day';
+RPC._PeerLimitGlobal = 'peer-limit-global';
+RPC._PeerLimitPerTorrent = 'peer-limit-per-torrent';
+RPC._PexEnabled = 'pex-enabled';
+RPC._DhtEnabled = 'dht-enabled';
+RPC._LpdEnabled = 'lpd-enabled';
+RPC._BlocklistEnabled = 'blocklist-enabled';
+RPC._BlocklistURL = 'blocklist-url';
+RPC._BlocklistSize = 'blocklist-size';
+RPC._UtpEnabled = 'utp-enabled';
+RPC._PeerPortRandom = 'peer-port-random-on-start';
+RPC._PortForwardingEnabled = 'port-forwarding-enabled';
RPC._StartAddedTorrent = 'start-added-torrents';
function TransmissionRemote( controller )
var o = { method: 'session-get' };
this.sendRequest( o, callback, async );
},
-
+
+ checkPort: function( callback, async ) {
+ var tr = this._controller;
+ var o = { method: 'port-test' };
+ this.sendRequest( o, callback, async );
+ },
+
loadDaemonStats: function( callback, async ) {
var tr = this._controller;
var o = { method: 'session-stats' };
remote._controller.loadDaemonPrefs();
} );
},
+ updateBlocklist: function() {
+ var remote = this;
+ var o = {
+ method: 'blocklist-update',
+ };
+ this.sendRequest( o, function() {
+ remote._controller.loadDaemonPrefs();
+ } );
+ },
filesSelectAll: function( torrent_ids, files, callback ) {
this.sendTorrentSetRequests( 'torrent-set', torrent_ids, { 'files-wanted': files }, callback );
},
float: left;
}
+div#prefs_container div.block_url input {
+ width: 256px !important;
+}
+
div#prefs_container div.download_location input {
width: 256px !important;
}