Ticket #4093: peers_network_tab.patch

File peers_network_tab.patch, 15.0 KB (added by bb, 11 years ago)

patch to add a peers/network tabs to the web client

Line 
1diff -crB transmission_old/Transmission.app/Contents/Resources/web/index.html transmission_new/Transmission.app/Contents/Resources/web/index.html
2*** transmission_old/Transmission.app/Contents/Resources/web/index.html 2011-03-05 17:31:40.000000000 +0100
3--- transmission_new/Transmission.app/Contents/Resources/web/index.html 2011-03-08 14:24:54.000000000 +0100
4***************
5*** 229,234 ****
6--- 229,236 ----
7                                                <ul>
8                                                        <li id="prefs_tab_general_tab" class="prefs_tab_enabled">General</li>
9                                                        <li id="prefs_tab_speed_tab" class="prefs_tab_disabled">Speed</li>
10+                                                       <li id="prefs_tab_peers_tab" class="prefs_tab_disabled">Peers</li>
11+                                                       <li id="prefs_tab_network_tab" class="prefs_tab_disabled">Network</li>
12                                                </ul>
13                                                <div id="prefs_tab_general" class="prefs_tab">
14                                                        <div class="preference download_location">
15***************
16*** 242,254 ****
17                                                                        <label for="auto_start" class="item">Start transfers when added</label>
18                                                                </div>
19                                                        </div>
20-                                                       <div class="preference port">
21-                                                               <label class="category">Network:</label>
22-                                                               <div class="formdiv">
23-                                                                       <label for="port" class="item">Incoming TCP Port:</label>
24-                                                                       <input type="text" id="port" name="port"/>
25-                                                               </div>
26-                                                       </div>
27                                                        <div class="preference encryption">
28                                                                <label class="category">Encryption:</label>
29                                                                <div class="formdiv checkbox">
30--- 244,249 ----
31***************
32*** 321,326 ****
33--- 316,390 ----
34                                                        </div>
35                                                        <div style="clear: both; visibility: hidden;"></div>
36                                                </div>
37+                                               <div id="prefs_tab_peers" class="prefs_tab" style="display: none;">
38+                                                       <div class="preference peers_conn">
39+                                                               <label class="category">Connections:</label>
40+                                                               <div class="formdiv">
41+                                                                       <label for="conn_global" class="item">Global maximum connections:</label>
42+                                                                       <input type="text" name="conn_global" id="conn_global"/>
43+                                                                       <label class="suffix">peers</label>
44+                                                               </div>
45+                                                               <div class="formdiv">
46+                                                                       <label for="conn_torrent" class="item">Maximum connections for new transfers:</label>
47+                                                                       <input type="text" name="conn_torrent" id="conn_torrent"/>
48+                                                                       <label class="suffix">peers</label>
49+                                                               </div>
50+                                                               <div class="formdiv checkbox">
51+                                                                       <input type="checkbox" name="conn_pex" id="conn_pex"/>
52+                                                                       <label for="conn_pex" class="item">Use peer exchange (PEX) for public torrents</label>
53+                                                               </div>
54+                                                               <div class="formdiv checkbox">
55+                                                                       <input type="checkbox" name="conn_dht" id="conn_dht"/>
56+                                                                       <label for="conn_dht" class="item">Use distributed hash table (DHT) for public torrents</label>
57+                                                               </div>
58+                                                               <div class="formdiv checkbox">
59+                                                                       <input type="checkbox" name="conn_lpd" id="conn_lpd"/>
60+                                                                       <label for="conn_lpd" class="item">Use local peer discovery for public torrents</label>
61+                                                               </div>
62+                                                       </div>
63+                                                       <div class="preference block_conn">
64+                                                               <label class="category">Blocklist:</label>
65+                                                               <div class="formdiv checkbox">
66+                                                                       <input type="checkbox" name="block_enable" id="block_enable"/>
67+                                                                       <label for="block_enable" class="item">Prevent peers in blocklist from connecting</label>
68+                                                               </div>
69+                                                               <div class="formdiv block_url">
70+                                                                       <label for="block_url" class="item">URL:</label>
71+                                                                       <input type="text" name="block_url" id="block_url"/>
72+                                                               </div>
73+                                                               <div class="formdiv">
74+                                                                       <input type="button" name="block_update_button" id="block_update_button" value="Update"/>
75+                                                                       <label class="suffix" id="block_size">IP rules in the list</label>
76+                                                               </div>
77+                                                       </div>
78+                                                       <div style="clear: both; visibility: hidden;"></div>
79+                                               </div>
80+                                               <div id="prefs_tab_network" class="prefs_tab" style="display: none;">
81+                                                       <div class="preference utp">
82+                                                               <label class="category">Peer communication:</label>
83+                                                               <div class="formdiv checkbox">
84+                                                                       <input type="checkbox" name="network_utp" id="network_utp"/>
85+                                                                       <label for="network_utp" class="item">Enable Micro Transport Protocol (µTP)</label>
86+                                                               </div>
87+                                                       </div>
88+                                                       <div class="preference port">
89+                                                               <label class="category">Peer listening port:</label>
90+                                                               <div class="formdiv">
91+                                                                       <label for="port" class="item">Incoming TCP Port:</label>
92+                                                                       <input type="text" id="port" name="port"/>
93+                                                                       <label class="suffix" id="port_test"></label>
94+                                                               </div>
95+                                                               <div class="formdiv checkbox">
96+                                                                       <input type="checkbox" name="port_rand" id="port_rand"/>
97+                                                                       <label for="port_rand" class="item">Randomize port on launch</label>
98+                                                               </div>
99+                                                               <div class="formdiv checkbox">
100+                                                                       <input type="checkbox" name="port_forward" id="port_forward"/>
101+                                                                       <label for="port_forward" class="item">Automatically map port</label>
102+                                                               </div>
103+                                                       </div>
104+                                                       <div style="clear: both; visibility: hidden;"></div>
105+                                               </div>
106                                        </div>
107                                        <span id="transmission_version"></span>
108                                        <a href="#save" id="prefs_save_button">Save</a>
109diff -crB transmission_old/Transmission.app/Contents/Resources/web/javascript/transmission.js transmission_new/Transmission.app/Contents/Resources/web/javascript/transmission.js
110*** transmission_old/Transmission.app/Contents/Resources/web/javascript/transmission.js 2011-03-05 17:31:40.000000000 +0100
111--- transmission_new/Transmission.app/Contents/Resources/web/javascript/transmission.js 2011-03-08 14:21:51.000000000 +0100
112***************
113*** 1,5 ****
114  /*
115!  *    Copyright © Dave Perrett and Malcolm Jarvis
116   *    This code is licensed under the GPL version 2.
117   *    For details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
118   *
119--- 1,5 ----
120  /*
121!  *    Copyright © Dave Perrett, Malcolm Jarvis and Bruno Bierbaumer
122   *    This code is licensed under the GPL version 2.
123   *    For details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
124   *
125***************
126*** 48,53 ****
127--- 48,54 ----
128                  $('#filter_finished_link').parent().bind('click', function(e){ tr.showFinishedClicked(e); });
129                $('#prefs_save_button').bind('click', function(e) { tr.savePrefsClicked(e); return false;});
130                $('#prefs_cancel_button').bind('click', function(e){ tr.cancelPrefsClicked(e); return false; });
131+               $('#block_update_button').bind('click', function(e){ tr.blocklistUpdateClicked(e); return false; });
132                $('#stats_close_button').bind('click', function(e){ tr.closeStatsClicked(e); return false; });
133                $('.inspector_tab').bind('click', function(e){ tr.inspectorTabClicked(e, this); });
134                $('.file_wanted_control').live('click', function(e){ tr.fileWantedClicked(e, this); });
135***************
136*** 60,66 ****
137--- 61,70 ----
138                $('#turtle_button').bind('click', function(e){ tr.toggleTurtleClicked(e); return false; });
139                $('#prefs_tab_general_tab').click(function(e){ changeTab(this, 'prefs_tab_general') });
140                $('#prefs_tab_speed_tab').click(function(e){ changeTab(this, 'prefs_tab_speed') });
141+               $('#prefs_tab_peers_tab').click(function(e){ changeTab(this, 'prefs_tab_peers') });
142+               $('#prefs_tab_network_tab').click(function(e){ changeTab(this, 'prefs_tab_network');});
143          $('#torrent_upload_form').submit(function(){ $('#upload_confirm_button').click(); return false; });
144+               $('#torrent_upload_form').submit(function(){ $('#upload_confirm_button').click(); return false; });
145 
146                if (iPhone) {
147                        $('#inspector_close').bind('click', function(e){ tr.hideInspector(); });
148***************
149*** 149,154 ****
150--- 153,166 ----
151                        tr.updateStats( o );
152                }, async );
153        },
154+       checkPort: function( async ){
155+               $('#port_test').text('checking ...')
156+               var tr = this;
157+               this.remote.checkPort( function(data){
158+                       var o = data.arguments;
159+                       tr.updatePortStatus( o );
160+               }, async );             
161+       },
162 
163        preloadImages: function() {
164                if (iPhone) {
165***************
166*** 189,195 ****
167         */
168        setupPrefConstraints: function() {
169                // only allow integers for speed limit & port options
170!               $('div.preference input[@type=text]:not(#download_location)').blur( function() {
171                        this.value = this.value.replace(/[^0-9]/gi, '');
172                        if (this.value == '') {
173                                if ($(this).is('#refresh_rate')) {
174--- 201,207 ----
175         */
176        setupPrefConstraints: function() {
177                // only allow integers for speed limit & port options
178!               $('div.preference input[@type=text]:not(#download_location,#block_url)').blur( function() {
179                        this.value = this.value.replace(/[^0-9]/gi, '');
180                        if (this.value == '') {
181                                if ($(this).is('#refresh_rate')) {
182***************
183*** 636,641 ****
184--- 648,654 ----
185 
186        savePrefsClicked: function(event)
187        {
188+               
189                // handle the clutch prefs locally
190                var tr = this;
191                var rate = parseInt( $('#prefs_form #refresh_rate')[0].value );
192***************
193*** 669,678 ****
194--- 682,709 ----
195                o[RPC._TurtleTimeEnd]        = parseInt( $('#prefs_form #turtle_end_time').val() );
196                o[RPC._TurtleTimeDay]        = parseInt( $('#prefs_form #turtle_days').val() );
197 
198+
199+               o[RPC._PeerLimitGlobal]      = parseInt( $('#prefs_form #conn_global').val() );
200+               o[RPC._PeerLimitPerTorrent]  = parseInt( $('#prefs_form #conn_torrent').val() );
201+               o[RPC._PexEnabled]           = $('#prefs_form #conn_pex')[0].checked;
202+               o[RPC._DhtEnabled]           = $('#prefs_form #conn_dht')[0].checked;
203+               o[RPC._LpdEnabled]           = $('#prefs_form #conn_lpd')[0].checked;
204+               o[RPC._BlocklistEnabled]     = $('#prefs_form #block_enable')[0].checked;
205+               o[RPC._BlocklistURL]         = $('#prefs_form #block_url').val();
206+               o[RPC._UtpEnabled]                       = $('#prefs_form #network_utp')[0].checked;
207+               o[RPC._PeerPortRandom]           = $('#prefs_form #port_rand')[0].checked;
208+               o[RPC._PortForwardingEnabled]= $('#prefs_form #port_forward')[0].checked;
209+
210+       
211+
212                tr.remote.savePrefs( o );
213 
214                tr.hidePrefsDialog( );
215        },
216+       blocklistUpdateClicked: function(event){
217+               var tr = this;
218+               tr.remote.updateBlocklist();   
219+       },
220 
221        closeStatsClicked: function(event) {
222                this.hideStatsDialog( );
223***************
224*** 948,953 ****
225--- 979,985 ----
226         *--------------------------------------------*/
227 
228        showPrefsDialog: function( ) {
229+               this.checkPort(true);
230                $('body').addClass('prefs_showing');
231                $('#prefs_container').show();
232                this.hideiPhoneAddressbar();
233***************
234*** 1008,1013 ****
235--- 1040,1058 ----
236                $('select#turtle_days').val(                prefs[RPC._TurtleTimeDay] );
237                $('#transmission_version').text(            prefs[RPC._DaemonVersion] );
238 
239+               $('#conn_global').val(                                          prefs[RPC._PeerLimitGlobal] );
240+               $('#conn_torrent').val(                                         prefs[RPC._PeerLimitPerTorrent] );
241+               $('#conn_pex')[0].checked                                 = prefs[RPC._PexEnabled];
242+               $('#conn_dht')[0].checked                                 = prefs[RPC._DhtEnabled];
243+               $('#conn_lpd')[0].checked                                 = prefs[RPC._LpdEnabled];
244+               $('#block_enable')[0].checked                     = prefs[RPC._BlocklistEnabled];
245+               $('#block_url').val(                                        prefs[RPC._BlocklistURL]);
246+               $('#block_size').text(                                      prefs[RPC._BlocklistSize] + ' IP rules in the list' );
247+               $('#network_utp')[0].checked                      = prefs[RPC._UtpEnabled];
248+               $('#port_rand')[0].checked                                = prefs[RPC._PeerPortRandom];
249+               $('#port_forward')[0].checked                     = prefs[RPC._PortForwardingEnabled];
250+
251+
252                if (!iPhone)
253                {
254                        setInnerHTML( $('#limited_download_rate')[0], [ 'Limit (', Transmission.fmt.speed(dn_limit_k), ')' ].join('') );
255***************
256*** 1025,1030 ****
257--- 1070,1082 ----
258                this.updateTurtleButton();
259        },
260 
261+       updatePortStatus: function( status ){
262+               if(status['port-is-open'])
263+                       $('#port_test').text('Port is open');
264+               else
265+                       $('#port_test').text('Port is closed');
266+       },
267+
268        showStatsDialog: function( ) {
269                this.loadDaemonStats();
270                $('body').addClass('stats_showing');
271diff -crB transmission_old/Transmission.app/Contents/Resources/web/javascript/transmission.remote.js transmission_new/Transmission.app/Contents/Resources/web/javascript/transmission.remote.js
272*** transmission_old/Transmission.app/Contents/Resources/web/javascript/transmission.remote.js  2011-03-05 17:31:40.000000000 +0100
273--- transmission_new/Transmission.app/Contents/Resources/web/javascript/transmission.remote.js  2011-03-08 14:02:27.000000000 +0100
274***************
275*** 1,5 ****
276  /*
277!  * Copyright © Dave Perrett and Malcolm Jarvis
278   * This code is licensed under the GPL version 2.
279   * For details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
280   *
281--- 1,5 ----
282  /*
283!  * Copyright © Dave Perrett, Malcolm Jarvis and Bruno Bierbaumer
284   * This code is licensed under the GPL version 2.
285   * For details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
286   *
287***************
288*** 28,33 ****
289--- 28,44 ----
290  RPC._TurtleTimeBegin        = 'alt-speed-time-begin';
291  RPC._TurtleTimeEnd          = 'alt-speed-time-end';
292  RPC._TurtleTimeDay          = 'alt-speed-time-day';
293+ RPC._PeerLimitGlobal          = 'peer-limit-global';
294+ RPC._PeerLimitPerTorrent      = 'peer-limit-per-torrent';
295+ RPC._PexEnabled                               = 'pex-enabled';
296+ RPC._DhtEnabled                               = 'dht-enabled';
297+ RPC._LpdEnabled                               = 'lpd-enabled';
298+ RPC._BlocklistEnabled         = 'blocklist-enabled';
299+ RPC._BlocklistURL                     = 'blocklist-url';
300+ RPC._BlocklistSize                    = 'blocklist-size';
301+ RPC._UtpEnabled                               = 'utp-enabled';
302+ RPC._PeerPortRandom                   = 'peer-port-random-on-start';
303+ RPC._PortForwardingEnabled    = 'port-forwarding-enabled';
304  RPC._StartAddedTorrent      = 'start-added-torrents';
305 
306  function TransmissionRemote( controller )
307***************
308*** 108,114 ****
309                var o = { method: 'session-get' };
310                this.sendRequest( o, callback, async );
311        },
312!
313        loadDaemonStats: function( callback, async ) {
314                var tr = this._controller;
315                var o = { method: 'session-stats' };
316--- 119,131 ----
317                var o = { method: 'session-get' };
318                this.sendRequest( o, callback, async );
319        },
320!       
321!       checkPort: function( callback, async ) {
322!               var tr = this._controller;
323!               var o = { method: 'port-test' };
324!               this.sendRequest( o, callback, async );
325!       },
326!       
327        loadDaemonStats: function( callback, async ) {
328                var tr = this._controller;
329                var o = { method: 'session-stats' };
330***************
331*** 250,255 ****
332--- 267,281 ----
333                        remote._controller.loadDaemonPrefs();
334                } );
335        },
336+       updateBlocklist: function() {
337+               var remote = this;
338+               var o = {
339+                       method: 'blocklist-update',
340+               };
341+               this.sendRequest( o, function() {
342+                       remote._controller.loadDaemonPrefs();
343+               } );
344+       },
345        filesSelectAll: function( torrent_ids, files, callback ) {
346                this.sendTorrentSetRequests( 'torrent-set', torrent_ids, { 'files-wanted': files }, callback );
347        },
348diff -crB transmission_old/Transmission.app/Contents/Resources/web/stylesheets/common.css transmission_new/Transmission.app/Contents/Resources/web/stylesheets/common.css
349*** transmission_old/Transmission.app/Contents/Resources/web/stylesheets/common.css     2011-03-05 17:31:40.000000000 +0100
350--- transmission_new/Transmission.app/Contents/Resources/web/stylesheets/common.css     2011-03-07 11:32:18.000000000 +0100
351***************
352*** 1220,1225 ****
353--- 1220,1229 ----
354        float: left;
355  }
356 
357+ div#prefs_container div.block_url input {
358+       width: 256px !important;
359+ }
360+
361  div#prefs_container div.download_location input {
362        width: 256px !important;
363  }