      1 /*
      2 Script: deluge-menus.js
      3     Contains all the menus contained within the UI for easy access and editing.
      4
      5 Copyright:
      6 	(C) Damien Churchill 2009 <damoxc@gmail.com>
      7 	This program is free software; you can redistribute it and/or modify
      8 	it under the terms of the GNU General Public License as published by
      9 	the Free Software Foundation; either version 3, or (at your option)
     10 	any later version.
     11
     12 	This program is distributed in the hope that it will be useful,
     13 	but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 	GNU General Public License for more details.
     16
     17 	You should have received a copy of the GNU General Public License
     18 	along with this program.  If not, write to:
     19 		The Free Software Foundation, Inc.,
     20 		51 Franklin Street, Fifth Floor
     21 		Boston, MA  02110-1301, USA.
     22 #
     23 #    In addition, as a special exception, the copyright holders give
     24 #    permission to link the code of portions of this program with the OpenSSL
     25 #    library.
     26 #    You must obey the GNU General Public License in all respects for all of
     27 #    the code used other than OpenSSL. If you modify file(s) with this
     28 #    exception, you may extend this exception to your version of the file(s),
     29 #    but you are not obligated to do so. If you do not wish to do so, delete
     30 #    this exception statement from your version. If you delete this exception
     31 #    statement from all source files in the program, then also delete it here.
     32 #
     33 */
     34
     35 Deluge.Menus = {
     36 	onTorrentAction: function(item, e) {
     37 		var selection = Deluge.Torrents.getSelections();
     38 		var ids = [];
     39 		Ext.each(selection, function(record) {
     40 			ids.push(record.id);
     41 		});
     42
     43 		switch (item.id) {
     44 			case 'pause':
     45 			case 'resume':
     46 				Deluge.Client.core[item.id + '_torrent'](ids, {
     47 					success: function() {
     48 						Deluge.UI.update();
     49 					}
     50 				});
     51 				break;
     52 			case 'top':
     53 			case 'up':
     54 			case 'down':
     55 			case 'bottom':
     56 				Deluge.Client.core['queue_' + item.id](ids, {
     57 					success: function() {
     58 						Deluge.UI.update();
     59 					}
     60 				});
     61 				break;
     62 			case 'edit_trackers':
     63 				Deluge.EditTrackers.show();
     64 				break;
     65 			case 'update':
     66 				Deluge.Client.core.force_reannounce(ids, {
     67 					success: function() {
     68 						Deluge.UI.update();
     69 					}
     70 				});
     71 				break;
     72 			case 'remove':
     73 				Deluge.Events.fire('torrentRemoved', ids);
     74 				Deluge.Client.core.remove_torrent(ids, null, {
     75 					success: function() {
     76 						Deluge.UI.update();
     77 					}
     78 				});
     79 				break;
     80 			case 'recheck':
     81 				Deluge.Client.core.force_recheck(ids, {
     82 					success: function() {
     83 						Deluge.UI.update();
     84 					}
     85 				});
     86 				break;
     87 		}
     88 	}
     89 }
     90
     91 Deluge.Menus.Torrent = new Ext.menu.Menu({
     92 	id: 'torrentMenu',
     93 	items: [{
     94 		id: 'pause',
     95 		text: _('Pause'),
     96 		icon: '/icons/pause.png',
     97 		handler: Deluge.Menus.onTorrentAction,
     98 		scope: Deluge.Menus
     99 	}, {
    100 		id: 'resume',
    101 		text: _('Resume'),
    102 		icon: '/icons/start.png',
    103 		handler: Deluge.Menus.onTorrentAction,
    104 		scope: Deluge.Menus
    105 	}, '-', {
    106 		id: 'options',
    107 		text: _('Options'),
    108 		icon: '/icons/preferences.png',
    109 		menu: new Ext.menu.Menu({
    110 			items: [{
    111 				text: _('D/L Speed Limit'),
    112 				iconCls: 'x-deluge-downloading',
    113 				menu: new Ext.menu.Menu({
    114 					items: [{
    115 						text: _('5 KiB/s')
    116 					}, {
    117 						text: _('10 KiB/s')
    118 					}, {
    119 						text: _('30 KiB/s')
    120 					}, {
    121 						text: _('80 KiB/s')
    122 					}, {
    123 						text: _('300 KiB/s')
    124 					},{
    125 						text: _('Unlimited')
    126 					}]
    127 				})
    128 			}, {
    129 				text: _('U/L Speed Limit'),
    130 				iconCls: 'x-deluge-seeding',
    131 				menu: new Ext.menu.Menu({
    132 					items: [{
    133 						text: _('5 KiB/s')
    134 					}, {
    135 						text: _('10 KiB/s')
    136 					}, {
    137 						text: _('30 KiB/s')
    138 					}, {
    139 						text: _('80 KiB/s')
    140 					}, {
    141 						text: _('300 KiB/s')
    142 					},{
    143 						text: _('Unlimited')
    144 					}]
    145 				})
    146 			}, {
    147 				text: _('Connection Limit'),
    148 				iconCls: 'x-deluge-connections',
    149 				menu: new Ext.menu.Menu({
    150 					items: [{
    151 						text: _('50')
    152 					}, {
    153 						text: _('100')
    154 					}, {
    155 						text: _('200')
    156 					}, {
    157 						text: _('300')
    158 					}, {
    159 						text: _('500')
    160 					},{
    161 						text: _('Unlimited')
    162 					}]
    163 				})
    164 			}, {
    165 				text: _('Upload Slot Limit'),
    166 				icon: '/icons/upload_slots.png',
    167 				menu: new Ext.menu.Menu({
    168 					items: [{
    169 						text: _('0')
    170 					}, {
    171 						text: _('1')
    172 					}, {
    173 						text: _('2')
    174 					}, {
    175 						text: _('3')
    176 					}, {
    177 						text: _('5')
    178 					},{
    179 						text: _('Unlimited')
    180 					}]
    181 				})
    182 			}, {
    183 				id: 'auto_managed',
    184 				text: _('Auto Managed'),
    185 				checked: false
    186 			}]
    187 		})
    188 	}, '-', {
    189 		text: _('Queue'),
    190 		icon: '/icons/queue.png',
    191 		menu: new Ext.menu.Menu({
    192 			items: [{
    193 				id: 'top',
    194 				text: _('Top'),
    195 				icon: '/icons/top.png',
    196 				handler: Deluge.Menus.onTorrentAction,
    197 				scope: Deluge.Menus
    198 			},{
    199 				id: 'up',
    200 				text: _('Up'),
    201 				icon: '/icons/up.png',
    202 				handler: Deluge.Menus.onTorrentAction,
    203 				scope: Deluge.Menus
    204 			},{
    205 				id: 'down',
    206 				text: _('Down'),
    207 				icon: '/icons/down.png',
    208 				handler: Deluge.Menus.onTorrentAction,
    209 				scope: Deluge.Menus
    210 			},{
    211 				id: 'bottom',
    212 				text: _('Bottom'),
    213 				icon: '/icons/bottom.png',
    214 				handler: Deluge.Menus.onTorrentAction,
    215 				scope: Deluge.Menus
    216 			}]
    217 		})
    218 	}, '-', {
    219 		id: 'update',
    220 		text: _('Update Tracker'),
    221 		icon: '/icons/update.png',
    222 		handler: Deluge.Menus.onTorrentAction,
    223 		scope: Deluge.Menus
    224 	}, {
    225 		id: 'edit_trackers',
    226 		text: _('Edit Trackers'),
    227 		icon: '/icons/edit_trackers.png',
    228 		handler: Deluge.Menus.onTorrentAction,
    229 		scope: Deluge.Menus
    230 	}, '-', {
    231 		id: 'remove',
    232 		text: _('Remove Torrent'),
    233 		icon: '/icons/remove.png',
    234 		handler: Deluge.Menus.onTorrentAction,
    235 		scope: Deluge.Menus
    236 	}, '-', {
    237 		id: 'recheck',
    238 		text: _('Force Recheck'),
    239 		icon: '/icons/recheck.png',
    240 		handler: Deluge.Menus.onTorrentAction,
    241 		scope: Deluge.Menus
    242 	}, {
    243 		id: 'move',
    244 		text: _('Move Storage'),
    245 		icon: '/icons/move.png',
    246 		handler: Deluge.Menus.onTorrentAction,
    247 		scope: Deluge.Menus
    248 	}]
    249 });
    250
    251 Deluge.Menus.Connections = new Ext.menu.Menu({
    252 	id: 'connectionsMenu',
    253 	items: [{
    254 		id: '50',
    255 		text: '50',
    256 		group: 'max_connections_global',
    257 		checked: false,
    258 		checkHandler: onLimitChanged
    259 	},{
    260 		id: '100',
    261 		text: '100',
    262 		group: 'max_connections_global',
    263 		checked: false,
    264 		checkHandler: onLimitChanged
    265 	},{
    266 		id: '200',
    267 		text: '200',
    268 		group: 'max_connections_global',
    269 		checked: false,
    270 		checkHandler: onLimitChanged
    271 	},{
    272 		id: '300',
    273 		text: '300',
    274 		group: 'max_connections_global',
    275 		checked: false,
    276 		checkHandler: onLimitChanged
    277 	},{
    278 		id: '500',
    279 		text: '500',
    280 		group: 'max_connections_global',
    281 		checked: false,
    282 		checkHandler: onLimitChanged
    283 	},{
    284 		id: '-1',
    285 		text: _('Unlimited'),
    286 		group: 'max_connections_global',
    287 		checked: false,
    288 		checkHandler: onLimitChanged
    289 	},'-',{
    290 		id: 'other',
    291 		text: _('Other'),
    292 		group: 'max_connections_global',
    293 		checked: false,
    294 		checkHandler: onLimitChanged
    295 	}]
    296 });
    297
    298 Deluge.Menus.Download = new Ext.menu.Menu({
    299 	id: 'downspeedMenu',
    300 	items: [{
    301 		id: '5',
    302 		text: '5 KiB/s',
    303 		group: 'max_download_speed',
    304 		checked: false,
    305 		checkHandler: onLimitChanged
    306 	},{
    307 		id: '10',
    308 		text: '10 KiB/s',
    309 		group: 'max_download_speed',
    310 		checked: false,
    311 		checkHandler: onLimitChanged
    312 	},{
    313 		id: '30',
    314 		text: '30 KiB/s',
    315 		group: 'max_download_speed',
    316 		checked: false,
    317 		checkHandler: onLimitChanged
    318 	},{
    319 		id: '80',
    320 		text: '80 KiB/s',
    321 		group: 'max_download_speed',
    322 		checked: false,
    323 		checkHandler: onLimitChanged
    324 	},{
    325 		id: '300',
    326 		text: '300 KiB/s',
    327 		group: 'max_download_speed',
    328 		checked: false,
    329 		checkHandler: onLimitChanged
    330 	},{
    331 		id: '-1',
    332 		text: _('Unlimited'),
    333 		group: 'max_download_speed',
    334 		checked: false,
    335 		checkHandler: onLimitChanged
    336 	},'-',{
    337 		id: 'other',
    338 		text: _('Other'),
    339 		group: 'max_download_speed',
    340 		checked: false,
    341 		checkHandler: onLimitChanged
    342 	}]
    343 });
    344
    345 Deluge.Menus.Upload = new Ext.menu.Menu({
    346 	id: 'upspeedMenu',
    347 	items: [{
    348 		id: '5',
    349 		text: '5 KiB/s',
    350 		group: 'max_upload_speed',
    351 		checked: false,
    352 		checkHandler: onLimitChanged
    353 	},{
    354 		id: '10',
    355 		text: '10 KiB/s',
    356 		group: 'max_upload_speed',
    357 		checked: false,
    358 		checkHandler: onLimitChanged
    359 	},{
    360 		id: '30',
    361 		text: '30 KiB/s',
    362 		group: 'max_upload_speed',
    363 		checked: false,
    364 		checkHandler: onLimitChanged
    365 	},{
    366 		id: '80',
    367 		text: '80 KiB/s',
    368 		group: 'max_upload_speed',
    369 		checked: false,
    370 		checkHandler: onLimitChanged
    371 	},{
    372 		id: '300',
    373 		text: '300 KiB/s',
    374 		group: 'max_upload_speed',
    375 		checked: false,
    376 		checkHandler: onLimitChanged
    377 	},{
    378 		id: '-1',
    379 		text: _('Unlimited'),
    380 		group: 'max_upload_speed',
    381 		checked: false,
    382 		checkHandler: onLimitChanged
    383 	},'-',{
    384 		id: 'other',
    385 		text: _('Other'),
    386 		group: 'max_upload_speed',
    387 		checked: false,
    388 		checkHandler: onLimitChanged
    389 	}]
    390 });
    391
    392 Deluge.Menus.FilePriorities = new Ext.menu.Menu({
    393 	id: 'filePrioritiesMenu',
    394 	items: [{
    395 		id: 'expandAll',
    396 		text: _('Expand All'),
    397 		icon: '/icons/expand_all.png'
    398 	}, '-', {
    399 		id: 'no_download',
    400 		text: _('Do Not Download'),
    401 		icon: '/icons/no_download.png',
    402 		filePriority: 0
    403 	}, {
    404 		id: 'normal',
    405 		text: _('Normal Priority'),
    406 		icon: '/icons/normal.png',
    407 		filePriority: 1
    408 	}, {
    409 		id: 'high',
    410 		text: _('High Priority'),
    411 		icon: '/icons/high.png',
    412 		filePriority: 2
    413 	}, {
    414 		id: 'highest',
    415 		text: _('Highest Priority'),
    416 		icon: '/icons/highest.png',
    417 		filePriority: 5
    418 	}]
    419 });
    420
    421 function onLimitChanged(item, checked) {
    422 	if (item.id == "other") {
    423 	} else {
    424 		config = {}
    425 		config[item.group] = item.id
    426 		Deluge.Client.core.set_config(config, {
    427 			success: function() {
    428 				Deluge.UI.update();
    429 			}
    430 		});
    431 	}
    432 }