]> granicus.if.org Git - transmission/commitdiff
#4093 Peer and network settings accessible through the Web Client
authorMitchell Livingston <livings124@transmissionbt.com>
Thu, 10 Mar 2011 01:37:58 +0000 (01:37 +0000)
committerMitchell Livingston <livings124@transmissionbt.com>
Thu, 10 Mar 2011 01:37:58 +0000 (01:37 +0000)
web/index.html
web/javascript/transmission.js
web/javascript/transmission.remote.js
web/stylesheets/common.css

index fbc2c073034895bec7ec3e8da645f2509edf5cb0..828ea08963b32ac80f3ee6ad85604615d5411cba 100755 (executable)
                                                <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>
index daedf555cde1f80c873daf9ea0d8724439bb84a1..6cf85d0ea8ea2dcaf3bf04d55b00144a439ccacd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *     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
  *
@@ -48,6 +48,7 @@ Transmission.prototype =
                 $('#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); });
@@ -60,7 +61,10 @@ Transmission.prototype =
                $('#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(); });
@@ -149,6 +153,14 @@ Transmission.prototype =
                        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) {
@@ -189,7 +201,7 @@ Transmission.prototype =
         */
        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')) {
@@ -636,6 +648,7 @@ Transmission.prototype =
 
        savePrefsClicked: function(event)
        {
+               
                // handle the clutch prefs locally
                var tr = this;
                var rate = parseInt( $('#prefs_form #refresh_rate')[0].value );
@@ -669,10 +682,28 @@ Transmission.prototype =
                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( );
@@ -948,6 +979,7 @@ Transmission.prototype =
         *--------------------------------------------*/
 
        showPrefsDialog: function( ) {
+               this.checkPort(true);
                $('body').addClass('prefs_showing');
                $('#prefs_container').show();
                this.hideiPhoneAddressbar();
@@ -1008,6 +1040,19 @@ Transmission.prototype =
                $('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('') );
@@ -1025,6 +1070,13 @@ Transmission.prototype =
                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');
index 9f51ffe9bd7b16aff727ad7f35409d4b641936ce..b62ed0c766f844f81700d64e3b91dfdd4986d905 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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
  *
@@ -28,6 +28,17 @@ RPC._TurtleTimeEnabled      = 'alt-speed-time-enabled';
 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 )
@@ -108,7 +119,13 @@ TransmissionRemote.prototype =
                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' };
@@ -250,6 +267,15 @@ TransmissionRemote.prototype =
                        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 );
        },
index 20bd9be264114f895422973e6f204fd736f1349a..1e00b62cb7808a431824b1130e6841f83a1ce89f 100644 (file)
@@ -1220,6 +1220,10 @@ div#prefs_container div.preference input {
        float: left;
 }
 
+div#prefs_container div.block_url input {
+       width: 256px !important;
+}
+
 div#prefs_container div.download_location input {
        width: 256px !important;
 }