mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-06 08:28:39 +00:00
update webui, show error on permission failure, differentiate queued vs paused
This commit is contained in:
parent
ced47db339
commit
cda1b3aa98
27 changed files with 977 additions and 481 deletions
|
@ -7,7 +7,7 @@ Deluge 0.5.7 (xx November 2007)
|
||||||
* Add torrent in paused state option
|
* Add torrent in paused state option
|
||||||
* Add advanced progress bar
|
* Add advanced progress bar
|
||||||
* Fix bug in merging trackers
|
* Fix bug in merging trackers
|
||||||
* Various updates to WebUI by vonck7
|
* Various updates to WebUI, including https support and advanced template by vonck7
|
||||||
* Add maximum connection attempts per second preference
|
* Add maximum connection attempts per second preference
|
||||||
* Fix bug where loaded plugins were forgotten if Deluge crashed
|
* Fix bug where loaded plugins were forgotten if Deluge crashed
|
||||||
* Fix ratio bugs (hopefully for the last time)
|
* Fix ratio bugs (hopefully for the last time)
|
||||||
|
@ -22,6 +22,9 @@ Deluge 0.5.7 (xx November 2007)
|
||||||
* Add preference for the location of torrent files
|
* Add preference for the location of torrent files
|
||||||
* Add autoload folder
|
* Add autoload folder
|
||||||
* Copy translator credits from Launchpad to our about->credits
|
* Copy translator credits from Launchpad to our about->credits
|
||||||
|
* Differentiate between queued and paused torrents. Able to pause queued
|
||||||
|
torrents - patch by yobbobandana
|
||||||
|
* Show error when writing/permission problems occur
|
||||||
|
|
||||||
Deluge 0.5.6.2 (31 October 2007)
|
Deluge 0.5.6.2 (31 October 2007)
|
||||||
* Set default piece size to 256-KiB in TorrentCreator plugin and add 2048KiB
|
* Set default piece size to 256-KiB in TorrentCreator plugin and add 2048KiB
|
||||||
|
|
|
@ -37,7 +37,9 @@ Firefox greasemonkey script: http://userscripts.org/scripts/show/12639
|
||||||
|
|
||||||
Remotely add a file: "curl -F torrent=@./test1.torrent -F pwd=deluge http://localhost:8112/remote/torrent/add"
|
Remotely add a file: "curl -F torrent=@./test1.torrent -F pwd=deluge http://localhost:8112/remote/torrent/add"
|
||||||
|
|
||||||
There is support for multiple templates, but just one is included.
|
Advanced template is only tested on firefox and garanteed not to work in IE6
|
||||||
|
|
||||||
|
ssl keys are located in WebUi/ssl/
|
||||||
|
|
||||||
Other contributors:
|
Other contributors:
|
||||||
*somedude : template enhancements.
|
*somedude : template enhancements.
|
||||||
|
@ -45,13 +47,20 @@ Other contributors:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import deluge.common
|
import deluge.common
|
||||||
import deluge.pref
|
try:
|
||||||
from deluge.dialogs import show_popup_warning
|
import deluge.pref
|
||||||
|
from deluge.dialogs import show_popup_warning
|
||||||
|
import webserver_common
|
||||||
|
except ImportError:
|
||||||
|
print 'WebUi:not imported as a plugin'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from dbus_interface import get_dbus_manager
|
from dbus_interface import get_dbus_manager
|
||||||
except:
|
except:
|
||||||
pass #for unit-test.
|
pass #for unit-test.
|
||||||
import webserver_common
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import gtk
|
import gtk
|
||||||
|
@ -117,6 +126,9 @@ class plugin_WebUi(object):
|
||||||
else:
|
else:
|
||||||
self.config.set("run_in_thread", False)
|
self.config.set("run_in_thread", False)
|
||||||
|
|
||||||
|
if self.config.get("use_https") == None:
|
||||||
|
self.config.set("use_https", False)
|
||||||
|
|
||||||
self.dbus_manager = get_dbus_manager(deluge_core, deluge_interface,
|
self.dbus_manager = get_dbus_manager(deluge_core, deluge_interface,
|
||||||
self.config, self.config_file)
|
self.config, self.config_file)
|
||||||
|
|
||||||
|
@ -167,8 +179,6 @@ class plugin_WebUi(object):
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
self.kill_server()
|
self.kill_server()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ConfigDialog(gtk.Dialog):
|
class ConfigDialog(gtk.Dialog):
|
||||||
"""
|
"""
|
||||||
sorry, can't get used to gui builders.
|
sorry, can't get used to gui builders.
|
||||||
|
@ -195,6 +205,9 @@ class ConfigDialog(gtk.Dialog):
|
||||||
gtk.combo_box_new_text())
|
gtk.combo_box_new_text())
|
||||||
self.cache_templates = self.add_widget(_('Cache Templates'),
|
self.cache_templates = self.add_widget(_('Cache Templates'),
|
||||||
gtk.CheckButton())
|
gtk.CheckButton())
|
||||||
|
self.use_https = self.add_widget(_('https://'),
|
||||||
|
gtk.CheckButton())
|
||||||
|
|
||||||
#self.share_downloads = self.add_widget(_('Share Download Directory'),
|
#self.share_downloads = self.add_widget(_('Share Download Directory'),
|
||||||
# gtk.CheckButton())
|
# gtk.CheckButton())
|
||||||
|
|
||||||
|
@ -222,6 +235,7 @@ class ConfigDialog(gtk.Dialog):
|
||||||
# bool(self.config.get("share_downloads")))
|
# bool(self.config.get("share_downloads")))
|
||||||
|
|
||||||
self.cache_templates.set_active(self.config.get("cache_templates"))
|
self.cache_templates.set_active(self.config.get("cache_templates"))
|
||||||
|
self.use_https.set_active(self.config.get("use_https"))
|
||||||
|
|
||||||
self.vbox.pack_start(self.vb, True, True, 0)
|
self.vbox.pack_start(self.vb, True, True, 0)
|
||||||
self.vb.show_all()
|
self.vb.show_all()
|
||||||
|
@ -257,6 +271,7 @@ class ConfigDialog(gtk.Dialog):
|
||||||
self.config.set("template", self.template.get_active_text())
|
self.config.set("template", self.template.get_active_text())
|
||||||
self.config.set("button_style", self.button_style.get_active())
|
self.config.set("button_style", self.button_style.get_active())
|
||||||
self.config.set("cache_templates", self.cache_templates.get_active())
|
self.config.set("cache_templates", self.cache_templates.get_active())
|
||||||
|
self.config.set("use_https", self.use_https.get_active())
|
||||||
#self.config.set("share_downloads", self.share_downloads.get_active())
|
#self.config.set("share_downloads", self.share_downloads.get_active())
|
||||||
self.config.save(self.plugin.config_file)
|
self.config.save(self.plugin.config_file)
|
||||||
self.plugin.start_server() #restarts server
|
self.plugin.start_server() #restarts server
|
||||||
|
|
|
@ -95,7 +95,8 @@ class DbusManager(dbus.service.Object):
|
||||||
"total_size": state["total_size"],
|
"total_size": state["total_size"],
|
||||||
"num_pieces": state["num_pieces"],
|
"num_pieces": state["num_pieces"],
|
||||||
"state": state['state'],
|
"state": state['state'],
|
||||||
"paused": self.core.is_user_paused(torrent_id),
|
"user_paused": self.core.is_user_paused(torrent_id),
|
||||||
|
"paused":state['is_paused'],
|
||||||
"progress": int(state["progress"] * 100),
|
"progress": int(state["progress"] * 100),
|
||||||
"next_announce": state["next_announce"],
|
"next_announce": state["next_announce"],
|
||||||
"total_payload_download":state["total_payload_download"],
|
"total_payload_download":state["total_payload_download"],
|
||||||
|
@ -153,16 +154,22 @@ class DbusManager(dbus.service.Object):
|
||||||
self.core.update_tracker(torrent_id)
|
self.core.update_tracker(torrent_id)
|
||||||
|
|
||||||
@dbus.service.method(dbus_interface=dbus_interface,
|
@dbus.service.method(dbus_interface=dbus_interface,
|
||||||
in_signature="sbb", out_signature="")
|
in_signature="asbb", out_signature="")
|
||||||
def remove_torrent(self, torrent_id, data_also, torrent_also):
|
def remove_torrent(self, torrent_ids, data_also, torrent_also):
|
||||||
"""remove a torrent,and optionally data and torrent
|
"""remove a torrent,and optionally data and torrent
|
||||||
additions compared to 0.6 interface: (data_also, torrent_also)
|
additions compared to 0.6 interface: (data_also, torrent_also)
|
||||||
"""
|
"""
|
||||||
torrent_id = int(torrent_id)
|
for torrent_id in torrent_ids:
|
||||||
self.core.remove_torrent(torrent_id, bool(data_also)
|
torrent_id = int(torrent_id)
|
||||||
,bool( torrent_also))
|
self.core.remove_torrent(torrent_id, bool(data_also)
|
||||||
#this should not be needed:
|
,bool( torrent_also))
|
||||||
self.interface.torrent_model_remove(torrent_id)
|
|
||||||
|
#this should not be needed:
|
||||||
|
gtk.gdk.threads_enter()
|
||||||
|
try:
|
||||||
|
self.interface.torrent_model_remove(torrent_id)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
@dbus.service.method(dbus_interface=dbus_interface,
|
@dbus.service.method(dbus_interface=dbus_interface,
|
||||||
in_signature="s", out_signature="b")
|
in_signature="s", out_signature="b")
|
||||||
|
@ -174,7 +181,6 @@ class DbusManager(dbus.service.Object):
|
||||||
@dbus.service.method(dbus_interface=dbus_interface,
|
@dbus.service.method(dbus_interface=dbus_interface,
|
||||||
in_signature="s", out_signature="b")
|
in_signature="s", out_signature="b")
|
||||||
def queue_up(self, torrent_id):
|
def queue_up(self, torrent_id):
|
||||||
print 'UP!'
|
|
||||||
self.core.queue_up(int(torrent_id))
|
self.core.queue_up(int(torrent_id))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -46,9 +46,11 @@ urls = (
|
||||||
"/login", "login",
|
"/login", "login",
|
||||||
"/index", "index",
|
"/index", "index",
|
||||||
"/torrent/info/(.*)", "torrent_info",
|
"/torrent/info/(.*)", "torrent_info",
|
||||||
"/torrent/pause", "torrent_pause",
|
"/torrent/info_inner/(.*)", "torrent_info_inner",
|
||||||
|
"/torrent/stop/(.*)", "torrent_stop",
|
||||||
|
"/torrent/start/(.*)", "torrent_start",
|
||||||
"/torrent/reannounce/(.*)", "torrent_reannounce",
|
"/torrent/reannounce/(.*)", "torrent_reannounce",
|
||||||
"/torrent/add", "torrent_add",
|
"/torrent/add(.*)", "torrent_add",
|
||||||
"/torrent/delete/(.*)", "torrent_delete",
|
"/torrent/delete/(.*)", "torrent_delete",
|
||||||
"/torrent/queue/up/(.*)", "torrent_queue_up",
|
"/torrent/queue/up/(.*)", "torrent_queue_up",
|
||||||
"/torrent/queue/down/(.*)", "torrent_queue_down",
|
"/torrent/queue/down/(.*)", "torrent_queue_down",
|
||||||
|
@ -96,38 +98,72 @@ class index:
|
||||||
@deluge_page
|
@deluge_page
|
||||||
@auto_refreshed
|
@auto_refreshed
|
||||||
def GET(self, name):
|
def GET(self, name):
|
||||||
vars = web.input(sort=None, order=None)
|
vars = web.input(sort=None, order=None ,filter=None , category=None)
|
||||||
|
|
||||||
status_rows = [get_torrent_status(torrent_id)
|
torrent_list = [get_torrent_status(torrent_id)
|
||||||
for torrent_id in ws.proxy.get_session_state()]
|
for torrent_id in ws.proxy.get_session_state()]
|
||||||
|
all_torrents = torrent_list[:]
|
||||||
|
|
||||||
|
#filter-state
|
||||||
|
if vars.filter:
|
||||||
|
torrent_list = filter_torrent_state(torrent_list, vars.filter)
|
||||||
|
setcookie("filter", vars.filter)
|
||||||
|
else:
|
||||||
|
setcookie("filter", "")
|
||||||
|
|
||||||
|
#filter-cat
|
||||||
|
if vars.category:
|
||||||
|
torrent_list = [t for t in torrent_list if t.category == vars.category]
|
||||||
|
setcookie("category", vars.category)
|
||||||
|
else:
|
||||||
|
setcookie("category", "")
|
||||||
|
|
||||||
#sorting:
|
#sorting:
|
||||||
if vars.sort:
|
if vars.sort:
|
||||||
status_rows.sort(key=attrgetter(vars.sort))
|
torrent_list.sort(key=attrgetter(vars.sort))
|
||||||
if vars.order == 'up':
|
if vars.order == 'up':
|
||||||
status_rows = reversed(status_rows)
|
torrent_list = reversed(torrent_list)
|
||||||
|
|
||||||
setcookie("order", vars.order)
|
setcookie("order", vars.order)
|
||||||
setcookie("sort", vars.sort)
|
setcookie("sort", vars.sort)
|
||||||
|
|
||||||
return ws.render.index(status_rows)
|
return ws.render.index(torrent_list, all_torrents)
|
||||||
|
|
||||||
class torrent_info:
|
class torrent_info:
|
||||||
@deluge_page
|
@deluge_page
|
||||||
@auto_refreshed
|
@auto_refreshed
|
||||||
def GET(self, torrent_id):
|
def GET(self, name):
|
||||||
|
torrent_id = name.split(',')[0]
|
||||||
return ws.render.torrent_info(get_torrent_status(torrent_id))
|
return ws.render.torrent_info(get_torrent_status(torrent_id))
|
||||||
|
|
||||||
class torrent_pause:
|
class torrent_info_inner:
|
||||||
|
@deluge_page
|
||||||
|
def GET(self, torrent_ids):
|
||||||
|
torrent_ids = torrent_ids.split(',')
|
||||||
|
info = get_torrent_status(torrent_ids[0])
|
||||||
|
if len(torrent_ids) > 1:
|
||||||
|
#todo : hmm, lots of manual stuff here :(
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
return ws.render.torrent_info_inner(info)
|
||||||
|
|
||||||
|
class torrent_start:
|
||||||
@check_session
|
@check_session
|
||||||
def POST(self, name):
|
def POST(self, name):
|
||||||
vars = web.input(stop = None, start = None, redir = None)
|
torrent_ids = name.split(',')
|
||||||
if vars.stop:
|
ws.proxy.resume_torrent(torrent_ids)
|
||||||
ws.proxy.pause_torrent([vars.stop])
|
|
||||||
elif vars.start:
|
|
||||||
ws.proxy.resume_torrent([vars.start])
|
|
||||||
do_redirect()
|
do_redirect()
|
||||||
|
|
||||||
|
class torrent_stop:
|
||||||
|
@check_session
|
||||||
|
def POST(self, name):
|
||||||
|
torrent_ids = name.split(',')
|
||||||
|
ws.proxy.pause_torrent(torrent_ids)
|
||||||
|
do_redirect()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class torrent_reannounce:
|
class torrent_reannounce:
|
||||||
@check_session
|
@check_session
|
||||||
def POST(self, torrent_id):
|
def POST(self, torrent_id):
|
||||||
|
@ -175,27 +211,42 @@ class remote_torrent_add:
|
||||||
|
|
||||||
class torrent_delete:
|
class torrent_delete:
|
||||||
@deluge_page
|
@deluge_page
|
||||||
def GET(self, torrent_id):
|
def GET(self, name):
|
||||||
return ws.render.torrent_delete(get_torrent_status(torrent_id))
|
torrent_ids = name.split(',')
|
||||||
|
torrent_list = [get_torrent_status(id) for id in torrent_ids]
|
||||||
|
return ws.render.torrent_delete(name, torrent_list)
|
||||||
|
|
||||||
@check_session
|
@check_session
|
||||||
def POST(self, torrent_id):
|
def POST(self, name):
|
||||||
|
torrent_ids = name.split(',')
|
||||||
vars = web.input(data_also = None, torrent_also = None)
|
vars = web.input(data_also = None, torrent_also = None)
|
||||||
data_also = bool(vars.data_also)
|
data_also = bool(vars.data_also)
|
||||||
torrent_also = bool(vars.torrent_also)
|
torrent_also = bool(vars.torrent_also)
|
||||||
ws.proxy.remove_torrent(torrent_id, data_also, torrent_also)
|
ws.proxy.remove_torrent(torrent_ids, data_also, torrent_also)
|
||||||
do_redirect()
|
do_redirect()
|
||||||
|
|
||||||
class torrent_queue_up:
|
class torrent_queue_up:
|
||||||
@check_session
|
@check_session
|
||||||
def POST(self, torrent_id):
|
def POST(self, name):
|
||||||
ws.proxy.queue_up(torrent_id)
|
#a bit too verbose..
|
||||||
|
torrent_ids = name.split(',')
|
||||||
|
torrents = [get_torrent_status(id) for id in torrent_ids]
|
||||||
|
torrents.sort(lambda x, y : x.queue_pos - y.queue_pos)
|
||||||
|
torrent_ids = [t.id for t in torrents]
|
||||||
|
for torrent_id in torrent_ids:
|
||||||
|
ws.proxy.queue_up(torrent_id)
|
||||||
do_redirect()
|
do_redirect()
|
||||||
|
|
||||||
class torrent_queue_down:
|
class torrent_queue_down:
|
||||||
@check_session
|
@check_session
|
||||||
def POST(self, torrent_id):
|
def POST(self, name):
|
||||||
ws.proxy.queue_down(torrent_id)
|
#a bit too verbose..
|
||||||
|
torrent_ids = name.split(',')
|
||||||
|
torrents = [get_torrent_status(id) for id in torrent_ids]
|
||||||
|
torrents.sort(lambda x, y : x.queue_pos - y.queue_pos)
|
||||||
|
torrent_ids = [t.id for t in torrents]
|
||||||
|
for torrent_id in reversed(torrent_ids):
|
||||||
|
ws.proxy.queue_down(torrent_id)
|
||||||
do_redirect()
|
do_redirect()
|
||||||
|
|
||||||
class pause_all:
|
class pause_all:
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
127
|
155
|
||||||
|
|
27
plugins/WebUi/ssl/deluge.key
Normal file
27
plugins/WebUi/ssl/deluge.key
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEogIBAAKCAQEA1sPXr1O6l2J9NAEvEYQ/JFDSVcJHh9YxP7kPdjsu7k9Ih845
|
||||||
|
BHMX52A3Ypbe5MHe2bCj/8dRYCixRdF1KUTAKXdzc7mw9prgf3sS3RvmfcRsln6u
|
||||||
|
x7XRg7YprZJ46hFmcHiUPRgtTFLuFO2YWBnqxu/caTtAxx3PdoK6LDVnuVjHYofC
|
||||||
|
8uD4A9k6yL/jj3Yrkf8WYQqJ6pJcMAz/2c8ZXlBuiUCb9j5xKTzYoJaiUkKN2YrA
|
||||||
|
hoxRxfI7Zc7MH2yWw8/fTZJbGXo8nrfek7coSE7yQS1M6ciwkYk5VO2mBVJBJgAT
|
||||||
|
QUR/jGfLzEqNKXghQ564v9wmuFmUMd99a0tkVwIDAQABAoIBACID6sluLYOEqefu
|
||||||
|
uBHCLG4IDwheOQ4esrYxDW3gedJs5EP+ObGmuQaAisUmuC7rNeysuYzteMoOJ+Wz
|
||||||
|
AyeCKB1pOfP+WTT12tDWIWq73InW7ov3jJ89AO4nj/pZ1KTeFKeDsZbrmWEZUXQn
|
||||||
|
HZX2pOTVYMeaBuyCoDVZBzuxSbhlON4wS6ClMhem+eBOxg351CDTZa2cbq7Ffcos
|
||||||
|
VP7LY2ORQYNDTQSLguV/dJrFSotB8Eoz2xIpg5XR7msp6lzPzyAd+Aoz/T1lYxCY
|
||||||
|
IFZCJYKnIpgoYQvmtUlhQrdD8P0J4Kth7I8NgkWvXCKazQjhpUm+wojLKD0G7Kcz
|
||||||
|
9znIV+ECgYEA+qfp1C8jWbaAn1yAeORUA9aB6aGIURfOpZjnCvtMWM0Nu0nAJYDv
|
||||||
|
X7L5GRa1ulfKhfUG1Jv/ynMKXYuBUDhyccYLpP7BHpd29Arr7YAgb52KaD1PoKNa
|
||||||
|
Z45c61dj4sFoCmJEbDoL21UGb0LX3mc4XzPzwWs8AKfLW4aZh1NwCisCgYEA21gJ
|
||||||
|
Hy3egBgMT9+nVjqsgtIXgJOnzQRhvRwT7IFf392ZyFi8iM+pDUsx1yj0zSG4XNPw
|
||||||
|
NY8VtZuTBUlG73RKcrrz31jhCMfLCnoRkQeweZv0QWzbLU3V8DleUYdjFc/t0me5
|
||||||
|
4NBR9lBlwYHgyU3GQ814vum+m0IAH0Ng1UxAVIUCgYAFOHwZTEYLN07kgtO2MOND
|
||||||
|
FTOtfwzMy5clQdMGGofTjanMjdOvtEjIEH05tYxhbjSsp5bV1M32FIFRw3cVCafw
|
||||||
|
kLRrYlb5YSQ8HwIc9z81s+1PEH/ZE63tXDy5Nh/BeE/Hb5aHPopCrjmtFZJTcojt
|
||||||
|
CrL4A1jDlrsYk+wcsnMx8wKBgEhJJQhvd2pDgps4G8+hGoUqc7Bd+OjpzsQh4rcI
|
||||||
|
k+4U+7847zkvJolJBK3hw3tu53FAL2OXOhJVqQgO9B+p9XcGAaTTh6X7IgDb5bok
|
||||||
|
DJanPMHq+/hcNGssnNbFhXQEyF2U7X8XaEuCh2ZURR5SUUq7BlX0dmp4P84NyHXC
|
||||||
|
4Vh5AoGAZYWkXxQUGzVm+H3fPpmETWGRNFDTimzi+6N+/uHkqkiDa3LGSnabmKh+
|
||||||
|
voKm//DUjEVGlAZ3CGOjO/5SlZc/zjkgh1vg7KOU4x7DqVOuZjom5Tx3ZI4xVVVt
|
||||||
|
tVtvK0qjzUTVcwAQALN/PNak+gs9534e954rmA9kmc3xBe4ho9M=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
22
plugins/WebUi/ssl/deluge.pem
Normal file
22
plugins/WebUi/ssl/deluge.pem
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDlzCCAn+gAwIBAgIJAPnW/GEzRy8xMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNV
|
||||||
|
BAYTAkFVMRUwEwYDVQQIEwxUaGUgSW50ZXJuZXQxFTATBgNVBAoTDERlbHVnZSBX
|
||||||
|
ZWJ1aTAeFw0wNzExMjQxMDAzNDRaFw0wODExMjMxMDAzNDRaMDsxCzAJBgNVBAYT
|
||||||
|
AkFVMRUwEwYDVQQIEwxUaGUgSW50ZXJuZXQxFTATBgNVBAoTDERlbHVnZSBXZWJ1
|
||||||
|
aTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANbD169TupdifTQBLxGE
|
||||||
|
PyRQ0lXCR4fWMT+5D3Y7Lu5PSIfOOQRzF+dgN2KW3uTB3tmwo//HUWAosUXRdSlE
|
||||||
|
wCl3c3O5sPaa4H97Et0b5n3EbJZ+rse10YO2Ka2SeOoRZnB4lD0YLUxS7hTtmFgZ
|
||||||
|
6sbv3Gk7QMcdz3aCuiw1Z7lYx2KHwvLg+APZOsi/4492K5H/FmEKieqSXDAM/9nP
|
||||||
|
GV5QbolAm/Y+cSk82KCWolJCjdmKwIaMUcXyO2XOzB9slsPP302SWxl6PJ633pO3
|
||||||
|
KEhO8kEtTOnIsJGJOVTtpgVSQSYAE0FEf4xny8xKjSl4IUOeuL/cJrhZlDHffWtL
|
||||||
|
ZFcCAwEAAaOBnTCBmjAdBgNVHQ4EFgQU1BbX1/4WtAKRKmWI1gqryIoj7BQwawYD
|
||||||
|
VR0jBGQwYoAU1BbX1/4WtAKRKmWI1gqryIoj7BShP6Q9MDsxCzAJBgNVBAYTAkFV
|
||||||
|
MRUwEwYDVQQIEwxUaGUgSW50ZXJuZXQxFTATBgNVBAoTDERlbHVnZSBXZWJ1aYIJ
|
||||||
|
APnW/GEzRy8xMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAEoiSz5x
|
||||||
|
hRCplxUG34g3F5yJe0QboqzJ/XmECfO80a980C/WVeivM2Kb1uafsKNp+WK7wD8g
|
||||||
|
mei+todYXG+fD8WmG41LG87Xi2Xe4SlAcemEpGcC5F1bpCdvqnVAWFnqoF88FOHx
|
||||||
|
NDlrq5H5lhMH9wVrX9qJvxL+StaDJ0sFk4kMGWEN+bdSYfFdBQzF903nPtm+PlvO
|
||||||
|
1Uo6gCuRTMYM5J1DC/GpNpo/Fzrkgm8mMf1MYy3rljiNgMt2rnxhtwi6jugwyMui
|
||||||
|
id6Of6gYAtvhi7kmaUpdI5PHO35dqRK7pHXH+YXaulosCPw/+bSRptFTykeEMrBj
|
||||||
|
CzotqJ+74MwXZyM=
|
||||||
|
-----END CERTIFICATE-----
|
BIN
plugins/WebUi/static/images/tango/details.png
Normal file
BIN
plugins/WebUi/static/images/tango/details.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 498 B |
|
@ -4,7 +4,10 @@
|
||||||
div.progress_bar_outer { /*used in table-view*/
|
div.progress_bar_outer { /*used in table-view*/
|
||||||
width:150px;
|
width:150px;
|
||||||
}
|
}
|
||||||
td.progress_bar {
white-space: nowrap;
}
td.info_label {
font-weight: bold;
}
td {
font-size: 10pt;
color: #d1dae5;
white-space: nowrap;
}
tr {
font-size: 10pt;
color: #d1dae5;
}
|
td.progress_bar {
white-space: nowrap;
}
td.info_label {
font-weight: bold;
}
td {
font-size: 10pt;
color: #d1dae5;
white-space: nowrap;
}
tr {
|
||||||
|
font-size: 10pt;
|
||||||
|
color: #d1dae5;
|
||||||
|
}
|
||||||
|
|
||||||
div.panel {
|
div.panel {
|
||||||
padding:10px;
|
padding:10px;
|
||||||
|
@ -26,11 +29,16 @@ form.deluge_button {
|
||||||
}
|
}
|
||||||
button.deluge_button {
|
button.deluge_button {
|
||||||
background-color: #37506f;
|
background-color: #37506f;
|
||||||
border:1px solid #23344b;
|
border:1px solid #68a;
|
||||||
|
|
||||||
background: #99acc3;
|
background: #99acc3;
|
||||||
color: #000;
|
color: #000;
|
||||||
|
vertical-align:middle;
|
||||||
|
-moz-border-radius:7px;
|
||||||
|
}
|
||||||
|
button.deluge_button:hover {
|
||||||
|
background-color:#68a;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.error {
|
div.error {
|
||||||
background-color:#FFFFFF;
|
background-color:#FFFFFF;
|
||||||
color:#AA0000;
|
color:#AA0000;
|
||||||
|
@ -42,4 +50,42 @@ div.error {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
|
/*tr.torrent_table:hover {
|
||||||
|
background-color:#68a;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
tr.torrent_table_selected {
|
||||||
|
background-color:#900;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
img.button {
|
||||||
|
margin-bottom:0px;
|
||||||
|
padding:0px;
|
||||||
|
position:relative;
|
||||||
|
top:2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.inner {
|
||||||
|
background:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
form.pause_resume {
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
border:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background: #1f3044;
|
||||||
|
font-size: 14px;
|
||||||
|
border: 0px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#torrent_table {
|
||||||
|
border: #2a425c 1px solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
|
||||||
|
|
|
@ -1,14 +1,49 @@
|
||||||
$def with (torrent_list)
|
$def with (torrent_list, all_torrents)
|
||||||
$:render.header(_('Torrent list'))
|
$:render.header(_('Torrent list'))
|
||||||
|
|
||||||
|
<div class="panel" id="toolbar">
|
||||||
|
|
||||||
<a href='/torrent/add' >[Add]</a>
|
<a class='toolbar_btn' href="#"
|
||||||
<a href='#' onclick=' toolbar_post("/torrent/queue/up/")'>[Up]</a>
|
onclick='toolbar_get("/torrent/add/")'
|
||||||
<a href='#' onclick=' toolbar_post("/torrent/queue/down/")'>[Down]</a>
|
title='$_("Add")'><img class='toolbar_btn'
|
||||||
<a href='#' onclick=' toolbar_get("/torrent/delete/")'>[Delete]</a>
|
src='/static/images/tango/list-add.png'></a>
|
||||||
<a href='#' onclick=' toolbar_get("/torrent/info/")'>[Info]</a>
|
|
||||||
<a href='#' onclick=' toolbar_post("/torrent/stop/")'>[Pause]</a>
|
<a class='toolbar_btn' href="#"
|
||||||
<a href='#' onclick=' toolbar_post("/torrent/start/")'>[Start]</a>
|
onclick='toolbar_get("/torrent/delete/")'><img class='toolbar_btn'
|
||||||
|
src='/static/images/tango/list-remove.png'
|
||||||
|
title='$_("Remove")'></a>
|
||||||
|
|
||||||
|
<a class='toolbar_btn' href="#"
|
||||||
|
onclick='toolbar_post("/torrent/stop/")'
|
||||||
|
title='$_("Pause")'><img class='toolbar_btn'
|
||||||
|
src='/static/images/tango/pause.png'
|
||||||
|
></a>
|
||||||
|
|
||||||
|
<a class='toolbar_btn' href="#"
|
||||||
|
onclick='toolbar_post("/torrent/start/")'
|
||||||
|
title='$_("Start")'><img class='toolbar_btn'
|
||||||
|
src='/static/images/tango/start.png'></a>
|
||||||
|
|
||||||
|
<a class='toolbar_btn' href="#"
|
||||||
|
onclick='toolbar_post("/torrent/queue/up/")'
|
||||||
|
title='$_("Up")'><img class='toolbar_btn'
|
||||||
|
src='/static/images/tango/queue-up.png'></a>
|
||||||
|
|
||||||
|
|
||||||
|
<a class='toolbar_btn' href="#"
|
||||||
|
onclick='toolbar_post("/torrent/queue/down/")'
|
||||||
|
title='$_("Down")'><img class='toolbar_btn'
|
||||||
|
src='/static/images/tango/queue-down.png'></a>
|
||||||
|
|
||||||
|
|
||||||
|
<a class='toolbar_btn' href="#"
|
||||||
|
onclick='toolbar_get("/torrent/info/")'
|
||||||
|
title='$_("Details")'><img class='toolbar_btn'
|
||||||
|
src='/static/images/tango/details.png'></a>
|
||||||
|
|
||||||
|
$:category_tabs(all_torrents)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -21,10 +56,10 @@ $#end
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
||||||
<form action="/torrent/pause" method="POST">
|
|
||||||
|
|
||||||
<div id="tableContainer" class="tableContainer">
|
<div id="tableContainer" class="tableContainer">
|
||||||
<table class="torrent_list" border=1>
|
<table class="torrent_list" border=1 id="torrent_list">
|
||||||
<thead class="fixedHeader">
|
<thead class="fixedHeader">
|
||||||
<tr>
|
<tr>
|
||||||
$:(sort_head('calc_state_str', 'S'))
|
$:(sort_head('calc_state_str', 'S'))
|
||||||
|
@ -45,11 +80,14 @@ $#end
|
||||||
$#4-space indentation is mandatory for for-loops in templetor!
|
$#4-space indentation is mandatory for for-loops in templetor!
|
||||||
$for torrent in torrent_list:
|
$for torrent in torrent_list:
|
||||||
<tr class="torrent_table" onclick="on_click_row(event, '$torrent.id')" id="torrent_$torrent.id">
|
<tr class="torrent_table" onclick="on_click_row(event, '$torrent.id')" id="torrent_$torrent.id">
|
||||||
<td><input type="image"
|
<td>
|
||||||
src="/static/images/$(torrent.calc_state_str)16.png"
|
<form action="/torrent/$torrent.action/$torrent.id" method="POST"
|
||||||
name="$torrent.action" value="$torrent.id"
|
class="pause_resume">
|
||||||
onclick="state.row_js_continue = false;">
|
<input type="image"
|
||||||
</td>
|
src="/static/images/$(torrent.calc_state_str)16.png"
|
||||||
|
name="pauseresume" value="submit" />
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
<td>$torrent.queue_pos</td>
|
<td>$torrent.queue_pos</td>
|
||||||
<td style="width:100px; overflow:hidden;white-space: nowrap">
|
<td style="width:100px; overflow:hidden;white-space: nowrap">
|
||||||
$(crop(torrent.name, 40))</td>
|
$(crop(torrent.name, 40))</td>
|
||||||
|
@ -63,8 +101,18 @@ $for torrent in torrent_list:
|
||||||
</td>
|
</td>
|
||||||
<td>$torrent.num_seeds ($torrent.total_seeds)</td>
|
<td>$torrent.num_seeds ($torrent.total_seeds)</td>
|
||||||
<td>$torrent.num_peers ($torrent.total_peers)</td>
|
<td>$torrent.num_peers ($torrent.total_peers)</td>
|
||||||
<td>$fspeed(torrent.download_rate)</td>
|
<td>
|
||||||
<td>$fspeed(torrent.upload_rate)</td>
|
$if (torrent.download_rate):
|
||||||
|
$fspeed(torrent.download_rate)
|
||||||
|
$else:
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
$if (torrent.upload_rate):
|
||||||
|
$fspeed(torrent.upload_rate)
|
||||||
|
$else:
|
||||||
|
|
||||||
|
</td>
|
||||||
<td>$torrent.eta</td>
|
<td>$torrent.eta</td>
|
||||||
<td>$("%.3f" % torrent.distributed_copies)</td>
|
<td>$("%.3f" % torrent.distributed_copies)</td>
|
||||||
<td>$("%.3f" % torrent.ratio)</td\>
|
<td>$("%.3f" % torrent.ratio)</td\>
|
||||||
|
@ -73,7 +121,6 @@ $for torrent in torrent_list:
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</form>
|
|
||||||
|
|
||||||
$:part_stats()
|
$:part_stats()
|
||||||
|
|
||||||
|
@ -84,6 +131,8 @@ $:part_stats()
|
||||||
</iframe>
|
</iframe>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script language='javascript'>
|
<script language='javascript'>
|
||||||
|
|
30
plugins/WebUi/templates/advanced/part_categories.html
Normal file
30
plugins/WebUi/templates/advanced/part_categories.html
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
$def with (filter_tabs, category_tabs)
|
||||||
|
<form method="GET" id="category_form" style="display:inline;position:relative;top:-5px;padding-left:50px;>
|
||||||
|
<input type="hidden" name="sort" value="$get('sort')">
|
||||||
|
<input type="hidden" name="order" value="$get('order')">
|
||||||
|
<select name='filter' id='filter'
|
||||||
|
onchange="document.getElementById('category_form').submit()">
|
||||||
|
$for tab in filter_tabs:
|
||||||
|
<option value="$tab.filter"
|
||||||
|
$if tab.filter == get('filter'):
|
||||||
|
selected
|
||||||
|
>
|
||||||
|
$tab.title
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
<select name='category' id='category'
|
||||||
|
onchange="document.getElementById('category_form').submit()">
|
||||||
|
$for tab in category_tabs:
|
||||||
|
<option value="$tab.category"
|
||||||
|
$if tab.category == get('category'):
|
||||||
|
selected
|
||||||
|
>
|
||||||
|
$tab.title
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ td {font-family: Bitstream Vera;}
/* STRUCTURE */
#page {
min-width: 800px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding:0;
}
#simple_logo {
background:url(../../static/images/simple_logo.jpg) no-repeat;
}
#main {
|
padding:0;
}
#simple_logo {
background:url(../../static/images/simple_logo.jpg) no-repeat;
}
#main {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding:0;
padding-top: 20px;
color: #fff;
}
#main form table {
border: #2a425c 1px solid;
}
#main form table tr {
border: 0px;
}
#main form table tr th {
background: #1f3044;
font-size: 16px;
border: 0px;
|
padding:0;
padding-top: 6px;
color: #fff;
}
#main form table {
border: #2a425c 1px solid;
}
#main form table tr {
border: 0px;
}
#main form table tr th {
background: #1f3044;
font-size: 16px;
border: 0px;
|
||||||
white-space: nowrap;
}
#main form table tr td{
border: 0px;
color: #fff;
font-size: 12px;
white-space: nowrap;
}
#main form table tr th a {
color: #8fa6c3;
font-size: 16px;
white-space: nowrap;
}
#main form table tr th a, a:active, a:visited { color: #8fa6c3; text-decoration: none; }
#main form table tr th a:hover {color: #fff; text-decoration: underline;}
#main form table tr td a {
color: #fff;
font-size: 12px;
white-space: nowrap;
}
#main form table tr td a, a:active, a:visited { color: #fff; text-decoration: none;}
#main form table tr td a:hover {color: #fff; text-decoration: underline;}
#main a {
color: #fff;
font-size: 12px;
}
#main a, a:active, a:visited { color: #fff; text-decoration: none;}
#main a:hover {color: #fff; text-decoration: underline;}
.info {
text-align: right;
padding: 0 50px 0 0;
color: #8fa6c3;
font-size: 16px;
letter-spacing: 4px;
font-weight: bold;
}
.title {
color: #dce4ee;
font-size: 32px;
padding: 10px 50px 0 0;
text-align: right;
}
.title a, a:active, a:visited { color: #dce4ee; text-decoration: none;}
.title a:hover {color: #fff; text-decoration: underline;}
#button {
border:1px solid #23344b;
background: #99acc3;
color: #000;
|
white-space: nowrap;
}
#main form table tr td{
border: 0px;
color: #fff;
font-size: 12px;
white-space: nowrap;
}
#main form table tr th a {
color: #8fa6c3;
font-size: 16px;
white-space: nowrap;
}
#main form table tr th a, a:active, a:visited { color: #8fa6c3; text-decoration: none; }
#main form table tr th a:hover {color: #fff; text-decoration: underline;}
#main form table tr td a {
color: #fff;
font-size: 12px;
white-space: nowrap;
}
#main form table tr td a, a:active, a:visited { color: #fff; text-decoration: none;}
#main form table tr td a:hover {color: #fff; text-decoration: underline;}
#main a {
color: #fff;
font-size: 12px;
}
#main a, a:active, a:visited { color: #fff; text-decoration: none;}
#main a:hover {color: #fff; text-decoration: underline;}
.info {
text-align: right;
padding: 0 50px 0 0;
color: #8fa6c3;
font-size: 16px;
letter-spacing: 4px;
font-weight: bold;
}
.title {
color: #dce4ee;
font-size: 32px;
padding: 10px 50px 0 0;
text-align: right;
}
.title a, a:active, a:visited { color: #dce4ee; text-decoration: none;}
.title a:hover {color: #fff; text-decoration: underline;}
#button {
border:1px solid #23344b;
background: #99acc3;
color: #000;
|
||||||
font-family: Bitstream Vera;
font-size:10px;
margin-top:5px;
}
INPUT{
border:1px solid #23344b;
background: #99acc3;
color: #000;
}
TEXTAREA{
border:1px solid #23344b;
background: #99acc3;
width:480px;
}
.footertext a { color: #c0c0c0; text-decoration:none;}
.footertext a:visited { color: #c0c0c0; text-decoration:none;}
.footertext a:active { color: #c0c0c0; text-decoration:none;}
.footertext a:hover {color: #fff; text-decoration: underline;}
.footertext {
text-align: center;
padding: 60px 0 0 0;
font-size: 8pt;
left: -100px;
font-family: Bitstream Vera;
color: #fff;
position: relative;
}
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
div.progress_bar{
background-color:#4573a5;
/*color:blue;*/
-moz-border-radius:5px; /*ff only setting*/
}
|
font-family: Bitstream Vera;
font-size:10px;
margin-top:5px;
}
INPUT{
border:1px solid #23344b;
background: #99acc3;
color: #000;
}
TEXTAREA{
border:1px solid #23344b;
background: #99acc3;
width:480px;
}
.footertext a { color: #c0c0c0; text-decoration:none;}
.footertext a:visited { color: #c0c0c0; text-decoration:none;}
.footertext a:active { color: #c0c0c0; text-decoration:none;}
.footertext a:hover {color: #fff; text-decoration: underline;}
.footertext {
text-align: center;
padding: 60px 0 0 0;
font-size: 8pt;
left: -100px;
font-family: Bitstream Vera;
color: #fff;
position: relative;
}
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
div.progress_bar{
background-color:#4573a5;
/*color:blue;*/
-moz-border-radius:5px; /*ff only setting*/
}
|
||||||
|
|
||||||
|
@ -92,6 +92,12 @@ body.inner {
|
||||||
padding:0;
|
padding:0;
|
||||||
text-align:left;
|
text-align:left;
|
||||||
height:20px;
|
height:20px;
|
||||||
|
background-color:#ddd;
|
||||||
|
color:#000;
|
||||||
|
border-style:solid;
|
||||||
|
border:0;
|
||||||
|
border-top:1px;
|
||||||
|
border-color:#000;
|
||||||
}
|
}
|
||||||
|
|
||||||
#about {
|
#about {
|
||||||
|
@ -110,15 +116,18 @@ body.inner {
|
||||||
|
|
||||||
#refresh_panel {
|
#refresh_panel {
|
||||||
-moz-border-radius:0px;
|
-moz-border-radius:0px;
|
||||||
width:100%;
|
width:350px;
|
||||||
position:fixed;
|
position:fixed;
|
||||||
bottom:20px;
|
bottom:0px;
|
||||||
left:0px;
|
right:0px;
|
||||||
background-color:#304663;
|
background-color:#304663;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding:0;
|
padding:0;
|
||||||
text-align:right;
|
text-align:right;
|
||||||
height:20px;
|
height:20px;
|
||||||
|
background-color:#ddd;
|
||||||
|
color:#000;
|
||||||
|
z-index:999;
|
||||||
}
|
}
|
||||||
|
|
||||||
#refresh_panel button {
|
#refresh_panel button {
|
||||||
|
@ -128,9 +137,68 @@ body.inner {
|
||||||
position:relative;
|
position:relative;
|
||||||
top:0px;
|
top:0px;
|
||||||
height:20px;
|
height:20px;
|
||||||
|
background-color:#ddd;
|
||||||
|
color:#000;
|
||||||
}
|
}
|
||||||
#refresh_panel button:hover {
|
#refresh_panel button:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
|
#category_panel {
|
||||||
|
margin-bottom:0;
|
||||||
|
padding-bottom:0;
|
||||||
|
-moz-border-radius-bottomleft:0px;
|
||||||
|
-moz-border-radius-bottomright:0px;
|
||||||
|
padding-right:32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar {
|
||||||
|
text-align:left;
|
||||||
|
margin-top:0;
|
||||||
|
padding-top:0;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
-moz-border-radius-topleft:0px;
|
||||||
|
-moz-border-radius-topright:0px;
|
||||||
|
padding-top:5px;
|
||||||
|
padding-bottom:5px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
padding-left:32px;
|
||||||
|
height:16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toolbar select{
|
||||||
|
/*border:1px solid #68a;*/
|
||||||
|
border:0;
|
||||||
|
background-color: #37506f;
|
||||||
|
color: #FFF;
|
||||||
|
}
|
||||||
|
#toolbar select:hover{
|
||||||
|
background-color:#68a;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.toolbar_btn {
|
||||||
|
width:20px;
|
||||||
|
height:20px;
|
||||||
|
padding-left:3px;
|
||||||
|
padding-top:7px;
|
||||||
|
padding-right:3px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
a.toolbar_btn:hover {
|
||||||
|
background-color:#68a;
|
||||||
|
-moz-border-radius:5px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
form { /*all forms!*/
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
border:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#torrent_list {
|
||||||
|
-moz-border-radius:7px;
|
||||||
|
}
|
||||||
|
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,10 +29,17 @@ function on_click_row(e,id) {
|
||||||
function on_click_row_js(e, id) {
|
function on_click_row_js(e, id) {
|
||||||
/*real onClick event*/
|
/*real onClick event*/
|
||||||
if (!e.ctrlKey) {
|
if (!e.ctrlKey) {
|
||||||
deselect_rows();
|
deselect_all_rows();
|
||||||
|
select_row(id);
|
||||||
|
open_inner_details(id);
|
||||||
|
}
|
||||||
|
else if (state.selected_rows.indexOf(id) != -1) {
|
||||||
|
deselect_row(id);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
select_row(id);
|
||||||
|
open_inner_details(id);
|
||||||
}
|
}
|
||||||
select_row(id);
|
|
||||||
open_inner_details(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function select_row(id){
|
function select_row(id){
|
||||||
|
@ -43,19 +50,30 @@ function select_row(id){
|
||||||
setCookie('selected_rows',state.selected_rows);
|
setCookie('selected_rows',state.selected_rows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function deselect_rows(){
|
|
||||||
for (i in state.selected_rows) {
|
|
||||||
deselect_row(state.selected_rows[i]);
|
|
||||||
}
|
|
||||||
state.selected_rows = new Array();
|
|
||||||
}
|
|
||||||
function deselect_row(id){
|
function deselect_row(id){
|
||||||
var row = get_row(id);
|
var row = get_row(id);
|
||||||
if (row) {
|
if (row) {
|
||||||
row.className = 'torrent_table'
|
row.className = 'torrent_table'
|
||||||
/*TODO : remove from state.selected_rows*/
|
/*remove from state.selected_rows*/
|
||||||
|
var idx = state.selected_rows.indexOf(id);
|
||||||
|
state.selected_rows.splice(idx,1);
|
||||||
|
setCookie('selected_rows',state.selected_rows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function deselect_all_rows(){
|
||||||
|
/*unbind state.selected_rows from for..in:
|
||||||
|
there must be a better way to do this*/
|
||||||
|
var a = new Array()
|
||||||
|
for (i in state.selected_rows) {
|
||||||
|
a[a.length] = state.selected_rows[i];
|
||||||
|
}
|
||||||
|
for (i in a){
|
||||||
|
deselect_row(a[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function reselect_rows(){
|
function reselect_rows(){
|
||||||
var selected_rows = getCookie('selected_rows').split(',');
|
var selected_rows = getCookie('selected_rows').split(',');
|
||||||
for (i in getCookie('selected_rows')) {
|
for (i in getCookie('selected_rows')) {
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
$def with (torrent_list)
|
$def with (torrent_list, all_torrents)
|
||||||
$:render.header(_('Torrent list'))
|
$:render.header(_('Torrent list'))
|
||||||
|
|
||||||
<form action="/torrent/pause" method="POST">
|
<table class="torrent_list" border=0 id='torrent_table'>
|
||||||
<table class="torrent_list" border=1>
|
|
||||||
<tr>
|
<tr>
|
||||||
$:(sort_head('calc_state_str', 'S'))
|
$:(sort_head('calc_state_str', 'S'))
|
||||||
$:(sort_head('queue_pos', '#'))
|
$:(sort_head('queue_pos', '#'))
|
||||||
|
@ -19,14 +18,16 @@ $:render.header(_('Torrent list'))
|
||||||
</tr>
|
</tr>
|
||||||
$#4-space indentation is mandatory for for-loops in templetor!
|
$#4-space indentation is mandatory for for-loops in templetor!
|
||||||
$for torrent in torrent_list:
|
$for torrent in torrent_list:
|
||||||
<tr>
|
<tr class="torrent_table" id="torrent_$torrent.id">
|
||||||
<td><input type="image"
|
<td>
|
||||||
src="/static/images/$(torrent.calc_state_str)16.png"
|
<form action="/torrent/$torrent.action/$torrent.id" method="POST" class="pause_resume">
|
||||||
name="$torrent.action" value="$torrent.id">
|
<input type="image"
|
||||||
</td>
|
src="/static/images/$(torrent.calc_state_str)16.png"
|
||||||
|
name="pauseresume" value="submit" /></form></td>
|
||||||
<td>$torrent.queue_pos</td>
|
<td>$torrent.queue_pos</td>
|
||||||
<td style="width:100px; overflow:hidden;white-space: nowrap">
|
<td style="width:100px; overflow:hidden;white-space: nowrap">
|
||||||
<a href="/torrent/info/$torrent.id">$(crop(torrent.name, 40))</a></td>
|
<a href="/torrent/info/$torrent.id" >
|
||||||
|
$(crop(torrent.name, 40))</a></td>
|
||||||
<td>$fsize(torrent.total_size)</td>
|
<td>$fsize(torrent.total_size)</td>
|
||||||
<td class="progress_bar">
|
<td class="progress_bar">
|
||||||
<div class="progress_bar_outer">
|
<div class="progress_bar_outer">
|
||||||
|
@ -45,12 +46,12 @@ $for torrent in torrent_list:
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
$:render.part_button('GET', '/torrent/add', _('Add torrent'), 'tango/list-add.png')
|
$:render.part_button('GET', '/torrent/add', _('Add torrent'), 'tango/list-add.png')
|
||||||
$:render.part_button('POST', '/pause_all', _('Pause all'), 'tango/media-playback-pause.png')
|
$:render.part_button('POST', '/pause_all', _('Pause all'), 'tango/pause.png')
|
||||||
$:render.part_button('POST', '/resume_all', _('Resume all'), 'tango/media-playback-start.png')
|
$:render.part_button('POST', '/resume_all', _('Resume all'), 'tango/start.png')
|
||||||
<!--$:render.part_button('POST', '/logout', _('Logout'), 'tango/system-log-out.png')-->
|
<!--$:render.part_button('POST', '/logout', _('Logout'), 'tango/system-log-out.png')-->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ $else:
|
||||||
$#end
|
$#end
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel" id='refresh_panel'>
|
<div class="panel" id='stats_panel'>
|
||||||
<!--<a href='/config'>-->
|
<!--<a href='/config'>-->
|
||||||
|
|
||||||
$_('Connections') : $stats.num_connections ($stats.max_num_connections)
|
$_('Connections') : $stats.num_connections ($stats.max_num_connections)
|
||||||
|
@ -26,8 +26,9 @@ $#end
|
||||||
|
|
||||||
<!--</a>-->
|
<!--</a>-->
|
||||||
|
|
||||||
|
<span id=#about>
|
||||||
(<a href='/about'>$_('About')</a>)
|
(<a href='/about'>$_('About')</a>)
|
||||||
|
</span>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
$def with (column_id, column_name, order, active_up, active_down)
|
$def with (column_id, column_name, order, active_up, active_down)
|
||||||
<th>
|
<th class="torrent_table">
|
||||||
<a href="/index?sort=$column_id&order=$order">
|
<a href="/index?sort=$column_id&order=$order&filter=$get('filter')&category=$get('category')">
|
||||||
$column_name\
|
$column_name\
|
||||||
$if active_up:
|
$if active_up:
|
||||||
<img src="/static/images/tango/up.png" />
|
<img src="/static/images/tango/up.png" />
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
$def with (torrent)
|
||||||
|
<table width="100%"><tr>
|
||||||
|
<td colspan=3 style="background-color:#999;-moz-border-radius:5px;">
|
||||||
|
|
||||||
|
<div class="progress_bar" style="width:$torrent.progress%;
|
||||||
|
text-align:center;font-weight:bold;">
|
||||||
|
|
||||||
|
$torrent.progress %</div>
|
||||||
|
</td>
|
||||||
|
</tr><td width=30%%>
|
||||||
|
<table>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Downloaded'):</td>
|
||||||
|
<td class="info_value">$torrent.calc_total_downloaded</td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Uploaded'):</td>
|
||||||
|
<td class="info_value">$torrent.calc_total_uploaded</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Seeders'):</td>
|
||||||
|
<td class="info_value">$torrent.num_seeds ($torrent.total_seeds )</td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Share Ratio'):</td>
|
||||||
|
<td class="info_value">$("%.3f" % torrent.ratio)</td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Pieces'):</td>
|
||||||
|
<td class="info_value">$torrent.num_pieces x $fsize(torrent.piece_length) </td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label"> </td>
|
||||||
|
<td class="info_value"> </td>
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</td><td width=30%%>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr><td class="info_label">$_('Speed'):</td><td class="info_value">
|
||||||
|
$fspeed(torrent.download_rate)</td></td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Speed'):</td>
|
||||||
|
<td class="info_value">$fspeed(torrent.upload_rate)</td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Peers'):</td>
|
||||||
|
<td class="info_value">$torrent.num_peers ($torrent.total_peers )</td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('ETA'):</td>
|
||||||
|
<td class="info_value">$torrent.eta </td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Availability'):</td>
|
||||||
|
<td class="info_value">$("%.3f" % torrent.distributed_copies)</td></td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label"> </td>
|
||||||
|
<td class="info_value"> </td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</td><td width=30%%>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Total Size'):</td>
|
||||||
|
<td class="info_value">$fspeed(torrent.total_size)</td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('# Of Files'):</td>
|
||||||
|
<td class="info_value">$torrent.num_files</td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Tracker'):</td>
|
||||||
|
<td class="info_value">$(crop(torrent.tracker, 30))</td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Tracker Status'):</td>
|
||||||
|
<td class="info_value">$torrent.tracker_status </td></tr>
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Next Announce'):</td>
|
||||||
|
<td class="info_value">$torrent.next_announce </td></tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr><td class="info_label">$_('Queue Position'):</td>
|
||||||
|
<td class="info_value">$torrent.queue_pos </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</table>
|
|
@ -1,10 +1,15 @@
|
||||||
$def with (torrent)
|
$def with (torrent_ids, torrent_list)
|
||||||
$:render.header(_("Remove %s ") % torrent.name)
|
$:render.header(_("Remove torrent"))
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<form method="POST" action='/torrent/delete/$torrent.id'>
|
<form method="POST" action='/torrent/delete/$torrent_ids'>
|
||||||
<div id="del_torrent">
|
<div id="del_torrent">
|
||||||
|
|
||||||
$(_("Remove %s?") % torrent.name)
|
<h2>$_("Remove torrent")</h2>
|
||||||
|
<ul>
|
||||||
|
$for torrent in torrent_list:
|
||||||
|
<li>$torrent.name</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<div class="form_row2">
|
<div class="form_row2">
|
||||||
<span class="form_label2">
|
<span class="form_label2">
|
||||||
<input type="checkbox" name="torrent_also" class="form_input" checked
|
<input type="checkbox" name="torrent_also" class="form_input" checked
|
||||||
|
|
|
@ -1,88 +1,23 @@
|
||||||
$def with (torrent)
|
$def with (torrent)
|
||||||
|
|
||||||
$:(render.header(torrent.message + '/' + torrent.name))
|
$:(render.header(torrent.message + '/' + torrent.name))
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<h3>$_('Details')</h3>
|
<h3>$_('Details')</h3>
|
||||||
<table width="100%"><tr>
|
|
||||||
<td colspan=3 style="background-color:#999;-moz-border-radius:5px;">
|
|
||||||
|
|
||||||
<div class="progress_bar" style="width:$torrent.progress%;
|
$:render.tab_meta(torrent)
|
||||||
text-align:center;font-weight:bold;">
|
|
||||||
|
|
||||||
$torrent.progress %</div>
|
$if (torrent.action == 'start'):
|
||||||
</td>
|
$:render.part_button('POST', '/torrent/start/' + str(torrent.id), _('Resume'), 'tango/start.png')
|
||||||
</tr><td width=30%%>
|
$else:
|
||||||
<table>
|
$:render.part_button('POST', '/torrent/stop/' + str(torrent.id), _('Pause'), 'tango/pause.png')
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Downloaded'):</td>
|
|
||||||
<td class="info_value">$torrent.calc_total_downloaded</td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Uploaded'):</td>
|
$:render.part_button('GET', '/torrent/delete/' + str(torrent.id), _('Remove'), 'tango/list-remove.png')
|
||||||
<td class="info_value">$torrent.calc_total_uploaded</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Seeders'):</td>
|
|
||||||
<td class="info_value">$torrent.num_seeds ($torrent.total_seeds )</td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Share Ratio'):</td>
|
|
||||||
<td class="info_value">$("%.3f" % torrent.ratio)</td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Pieces'):</td>
|
|
||||||
<td class="info_value">$torrent.num_pieces x $fsize(torrent.piece_length) </td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
</td><td width=30%%>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr><td class="info_label">$_('Speed'):</td><td class="info_value">
|
|
||||||
$fspeed(torrent.download_rate)</td></td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Speed'):</td>
|
|
||||||
<td class="info_value">$fspeed(torrent.upload_rate)</td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Peers'):</td>
|
|
||||||
<td class="info_value">$torrent.num_peers ($torrent.total_peers )</td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('ETA'):</td>
|
|
||||||
<td class="info_value">$torrent.eta </td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Availability'):</td>
|
|
||||||
<td class="info_value">$("%.3f" % torrent.distributed_copies)</td></td></tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</td><td width=30%%>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Total Size'):</td>
|
|
||||||
<td class="info_value">$fspeed(torrent.total_size)</td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('# Of Files'):</td>
|
|
||||||
<td class="info_value">$torrent.num_files</td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Tracker'):</td>
|
|
||||||
<td class="info_value">$(crop(torrent.tracker, 30))</td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Tracker Status'):</td>
|
|
||||||
<td class="info_value">$torrent.tracker_status </td></tr>
|
|
||||||
|
|
||||||
<tr><td class="info_label">$_('Next Announce'):</td>
|
|
||||||
<td class="info_value">$torrent.next_announce </td></tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
<form action="/torrent/pause?redir=/torrent/info/$torrent.id" method="POST"
|
|
||||||
class="deluge_button">
|
|
||||||
|
|
||||||
<input type="image" src="/static/images/$(torrent.calc_state_str)16.png"
|
|
||||||
name="$torrent.action" value="$torrent.id">
|
|
||||||
</form>
|
|
||||||
|
|
||||||
$:render.part_button('GET', '/torrent/delete/' + str(torrent.id), _('Remove'), 'tango/user-trash.png')
|
|
||||||
$:render.part_button('POST', '/torrent/reannounce/' + str(torrent.id), _('Reannounce'), 'tango/view-refresh.png')
|
$:render.part_button('POST', '/torrent/reannounce/' + str(torrent.id), _('Reannounce'), 'tango/view-refresh.png')
|
||||||
|
|
||||||
|
$:render.part_button('POST', '/torrent/queue/up/' + str(torrent.id), _('Queue Up'), 'tango/queue-up.png')
|
||||||
|
$:render.part_button('POST', '/torrent/queue/down/' + str(torrent.id), _('Queue Down'), 'tango/queue-down.png')
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<!--
|
<!--
|
||||||
[<a onclick="javascript:toggle_dump()">$_('Debug:Data Dump')</a>]
|
[<a onclick="javascript:toggle_dump()">$_('Debug:Data Dump')</a>]
|
||||||
|
@ -109,13 +44,6 @@ function toggle_dump(){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class='panel'>
|
|
||||||
$_('Queue pos:') $torrent.queue_pos
|
|
||||||
|
|
||||||
$:render.part_button('POST', '/torrent/queue/up/' + str(torrent.id), _('Queue Up'), 'tango/up.png')
|
|
||||||
|
|
||||||
$:render.part_button('POST', '/torrent/queue/down/' + str(torrent.id), _('Queue Down'), 'tango/down.png')
|
|
||||||
</div>
|
|
||||||
|
|
||||||
$:part_stats()
|
$:part_stats()
|
||||||
|
|
||||||
|
|
|
@ -3,28 +3,35 @@ Just copy and rename an existing template.
|
||||||
-The settings panel will see all directory's in this folder ,and let you choose your new template.
|
-The settings panel will see all directory's in this folder ,and let you choose your new template.
|
||||||
-Clicking Ok in the settings panel will restart the webserver and reload your template.
|
-Clicking Ok in the settings panel will restart the webserver and reload your template.
|
||||||
|
|
||||||
|
Limited "Subclassing":
|
||||||
|
All templates are "subclassed" from the /deluge/ template.
|
||||||
|
If a html file is not found in the template dir, the file from /deluge/ will be used.
|
||||||
|
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
Please configure your editor to use 4-space indents instead of tabs.
|
Please configure your editor to use 4-space indents instead of tabs.
|
||||||
Or use scite and my config: http://mvoncken.sohosted.com/deluge/SciTEUser.properties.txt
|
Or use scite and my config: http://mvoncken.sohosted.com/deluge/SciTEUser.properties.txt
|
||||||
|
|
||||||
template language: http://webpy.org/templetor
|
template language: http://webpy.org/templetor
|
||||||
|
|
||||||
Exposed methods and variables (c&p from deluge_webserver):
|
Exposed methods and variables (c&p from webserver_framework.py):
|
||||||
|
template.Template.globals.update({
|
||||||
'sort_head': template_sort_head,
|
'sort_head': template_sort_head,
|
||||||
|
'part_stats':template_part_stats,
|
||||||
'crop': template_crop,
|
'crop': template_crop,
|
||||||
'_': _ , #gettext/translations
|
'_': _ , #gettext/translations
|
||||||
'str': str, #because % in templetor is broken.
|
'str': str, #because % in templetor is broken.
|
||||||
'sorted': sorted,
|
'sorted': sorted,
|
||||||
'get_config': proxy.get_webui_config,
|
'get_config': get_config,
|
||||||
'self_url': web.changequery,
|
'self_url': self_url,
|
||||||
'fspeed': common.fspeed,
|
'fspeed': common.fspeed,
|
||||||
'fsize': common.fsize,
|
'fsize': common.fsize,
|
||||||
'render': render, #for easy resuse of templates
|
'render': ws.render, #for easy resuse of templates
|
||||||
'button_style': (proxy.get_webui_config('button_style')),
|
'rev': 'rev.%s' % (REVNO, ),
|
||||||
'rev': ('rev.' +
|
'version': VERSION,
|
||||||
open(os.path.join(os.path.dirname(__file__),'revno')).read()),
|
'getcookie':getcookie,
|
||||||
'version': (
|
'get': lambda (var): getattr(web.input(**{var:None}), var) # unreadable :-(
|
||||||
open(os.path.join(os.path.dirname(__file__),'version')).read())
|
})
|
||||||
|
|
||||||
I will update this file if there is interest in making templates.
|
I will update this file if there is interest in making templates.
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,11 @@ import cookielib, urllib2 , urllib
|
||||||
import WebUi.webserver_common as ws
|
import WebUi.webserver_common as ws
|
||||||
import operator
|
import operator
|
||||||
|
|
||||||
|
|
||||||
ws.init_05()
|
ws.init_05()
|
||||||
|
print 'test-env=',ws.ENV
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#CONFIG:
|
#CONFIG:
|
||||||
BASE_URL = 'http://localhost:8112'
|
BASE_URL = 'http://localhost:8112'
|
||||||
|
@ -37,6 +41,7 @@ class TestWebUiBase(unittest.TestCase):
|
||||||
|
|
||||||
def open_url(self, page, post=None):
|
def open_url(self, page, post=None):
|
||||||
url = BASE_URL + page
|
url = BASE_URL + page
|
||||||
|
|
||||||
if post == 1:
|
if post == 1:
|
||||||
post = {'Force_a_post' : 'spam'}
|
post = {'Force_a_post' : 'spam'}
|
||||||
if post:
|
if post:
|
||||||
|
@ -92,6 +97,10 @@ class TestWebUiBase(unittest.TestCase):
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
first_torrent_id = property(lambda self: ws.proxy.get_session_state()[0])
|
||||||
|
first_torrent = property(lambda self: get_status(self.first_torrent_id))
|
||||||
|
|
||||||
|
|
||||||
class TestNoAuth(TestWebUiBase):
|
class TestNoAuth(TestWebUiBase):
|
||||||
def test303(self):
|
def test303(self):
|
||||||
self.assert_303('/','/login')
|
self.assert_303('/','/login')
|
||||||
|
@ -202,7 +211,7 @@ class TestIntegration(TestWebUiBase):
|
||||||
#delete all, nice use case for refactoring delete..
|
#delete all, nice use case for refactoring delete..
|
||||||
torrent_ids = ws.proxy.get_session_state()
|
torrent_ids = ws.proxy.get_session_state()
|
||||||
for torrent in torrent_ids:
|
for torrent in torrent_ids:
|
||||||
ws.proxy.remove_torrent(torrent, False, False)
|
ws.proxy.remove_torrent([torrent], False, False)
|
||||||
|
|
||||||
torrent_ids = ws.proxy.get_session_state()
|
torrent_ids = ws.proxy.get_session_state()
|
||||||
self.assertEqual(torrent_ids, [])
|
self.assertEqual(torrent_ids, [])
|
||||||
|
@ -217,33 +226,37 @@ class TestIntegration(TestWebUiBase):
|
||||||
|
|
||||||
else:
|
else:
|
||||||
#test correctness of existing-list
|
#test correctness of existing-list
|
||||||
|
#The setup makes 0.6 fail everything, added an else..
|
||||||
for url in self.urls:
|
for url in self.urls:
|
||||||
self.assert_500('/torrent/add',{'url':url,'torrent':None})
|
if ws.ENV.startswith('0.5'):
|
||||||
|
self.assert_500('/torrent/add',{'url':url,'torrent':None})
|
||||||
|
else:
|
||||||
|
self.assert_303('/torrent/add','/index',{'url':url,'torrent':None})
|
||||||
|
|
||||||
def testPauseResume(self):
|
def testPauseResume(self):
|
||||||
#pause all
|
#pause all
|
||||||
self.assert_303('/pause_all','/index', post=1)
|
self.assert_303('/pause_all','/index', post=1)
|
||||||
#pause worked?
|
#pause worked?
|
||||||
pause_status = [get_status(id)["paused"] for id in ws.proxy.get_session_state()]
|
pause_status = [get_status(id)["user_paused"] for id in ws.proxy.get_session_state()]
|
||||||
for paused in pause_status:
|
for paused in pause_status:
|
||||||
self.assertEqual(paused, True)
|
self.assertEqual(paused, True)
|
||||||
|
|
||||||
#resume all
|
#resume all
|
||||||
self.assert_303('/resume_all','/index', post=1)
|
self.assert_303('/resume_all','/index', post=1)
|
||||||
#resume worked?
|
#resume worked?
|
||||||
pause_status = [get_status(id)["paused"] for id in ws.proxy.get_session_state()]
|
pause_status = [get_status(id)["user_paused"] for id in ws.proxy.get_session_state()]
|
||||||
for paused in pause_status:
|
for paused in pause_status:
|
||||||
self.assertEqual(paused,False)
|
self.assertEqual(paused,False)
|
||||||
#pause again.
|
#pause again.
|
||||||
self.assert_303('/pause_all','/index', post=1)
|
self.assert_303('/pause_all','/index', post=1)
|
||||||
|
|
||||||
torrent_id = ws.proxy.get_session_state()[0]
|
torrent_id = self.first_torrent_id
|
||||||
#single resume.
|
#single resume.
|
||||||
self.assert_303('/torrent/pause','/index', post={'start':torrent_id})
|
self.assert_303('/torrent/start/%s' % torrent_id ,'/index', post=1)
|
||||||
self.assertEqual(get_status(torrent_id)["paused"] ,False)
|
self.assertEqual(get_status(torrent_id)["user_paused"] ,False)
|
||||||
#single pause
|
#single pause
|
||||||
self.assert_303('/torrent/pause','/index', post={'stop':torrent_id})
|
self.assert_303('/torrent/stop/%s' % torrent_id,'/index', post=1)
|
||||||
self.assertEqual(get_status(torrent_id)["paused"] , True)
|
self.assertEqual(get_status(torrent_id)["user_paused"] , True)
|
||||||
|
|
||||||
def testQueue(self):
|
def testQueue(self):
|
||||||
#find last:
|
#find last:
|
||||||
|
@ -297,8 +310,6 @@ class TestIntegration(TestWebUiBase):
|
||||||
#add torrrent-file
|
#add torrrent-file
|
||||||
#./test01.torrent
|
#./test01.torrent
|
||||||
|
|
||||||
def testReannounce(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def test_do_redirect(self):
|
def test_do_redirect(self):
|
||||||
self.assert_303('/home','/index')
|
self.assert_303('/home','/index')
|
||||||
|
@ -314,17 +325,16 @@ class TestIntegration(TestWebUiBase):
|
||||||
assert self.cookies['order'] == 'up'
|
assert self.cookies['order'] == 'up'
|
||||||
#redir after pause-POST? in /index.
|
#redir after pause-POST? in /index.
|
||||||
self.assert_exists('/index?sort=name&order=down')
|
self.assert_exists('/index?sort=name&order=down')
|
||||||
torrent_id = ws.proxy.get_session_state()[0]
|
torrent_id = self.first_torrent_id
|
||||||
self.assert_303('/torrent/pause','/index?sort=name&order=down',
|
self.assert_303('/torrent/stop/%s' % torrent_id,
|
||||||
post={'stop':torrent_id})
|
'/index?sort=name&order=down', post=1)
|
||||||
#redir in details 1
|
#redir in details 1
|
||||||
self.assert_303('/torrent/pause?redir=/torrent/info/' + torrent_id
|
self.assert_303('/torrent/stop/%s?redir=/torrent/info/%s' %(torrent_id,torrent_id)
|
||||||
,'/torrent/info/' + torrent_id, post = {'stop':torrent_id})
|
,'/torrent/info/' + torrent_id, post = 1)
|
||||||
#redir in details 2
|
#redir in details 2
|
||||||
self.assert_303('/torrent/pause'
|
self.assert_303('/torrent/stop/%s' % torrent_id
|
||||||
,'/torrent/info/' + torrent_id ,
|
,'/torrent/info/' + torrent_id ,
|
||||||
post={'stop':torrent_id,
|
post={'redir': '/torrent/info/' + torrent_id})
|
||||||
'redir': '/torrent/info/' + torrent_id})
|
|
||||||
|
|
||||||
def testRemote(self):
|
def testRemote(self):
|
||||||
pass
|
pass
|
||||||
|
@ -332,6 +342,26 @@ class TestIntegration(TestWebUiBase):
|
||||||
def test_redir_after_login(self):
|
def test_redir_after_login(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def testReannounce(self):
|
||||||
|
torrent_id = self.first_torrent_id
|
||||||
|
self.assert_303(
|
||||||
|
'/torrent/reannounce/%(id)s?redir=/torrent/info/%(id)s'
|
||||||
|
% {'id':torrent_id}
|
||||||
|
,'/torrent/info/' + torrent_id, post = 1)
|
||||||
|
|
||||||
|
def testRecheck(self):
|
||||||
|
#add test before writing code..
|
||||||
|
#RELEASE-->disable
|
||||||
|
"""
|
||||||
|
torrent_id = self.first_torrent_id
|
||||||
|
self.assert_303(
|
||||||
|
'/torrent/recheck/%(id)s?redir=/torrent/info/%(id)s'
|
||||||
|
% {'id':torrent_id}
|
||||||
|
,'/torrent/info/' + torrent_id, post = 1)
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
if False:
|
if False:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
revision-id: mvoncken@gmail.com-20070930083408-sv8mo0mi1rbjnfvk
|
revision-id: mvoncken@gmail.com-20070930083408-sv8mo0mi1rbjnfvk
|
||||||
date: 2007-11-06 15:10:08 +0200
|
date: 2007-11-06 15:10:08 +0200
|
||||||
build-date: 2007-11-06 15:34:50 +0200
|
build-date: 2007-11-06 15:34:50 +0200
|
||||||
revno: 127
|
revno: 155
|
||||||
branch-nick: WebUi
|
branch-nick: WebUi
|
||||||
|
|
|
@ -42,7 +42,9 @@ import pickle
|
||||||
import sys
|
import sys
|
||||||
from webpy022 import template
|
from webpy022 import template
|
||||||
random.seed()
|
random.seed()
|
||||||
path = os.path.dirname(__file__)
|
webui_path = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
ENV = 'UNKNOWN'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
_('translate something')
|
_('translate something')
|
||||||
|
@ -66,11 +68,11 @@ class subclassed_render(object):
|
||||||
"""
|
"""
|
||||||
def __init__(self, template_dirname, cache=False):
|
def __init__(self, template_dirname, cache=False):
|
||||||
self.base_template = template.render(
|
self.base_template = template.render(
|
||||||
os.path.join(path, 'templates/deluge/'),
|
os.path.join(webui_path, 'templates/deluge/'),
|
||||||
cache=cache)
|
cache=cache)
|
||||||
|
|
||||||
self.sub_template = template.render(
|
self.sub_template = template.render(
|
||||||
os.path.join(path, 'templates/%s/' % template_dirname),
|
os.path.join(webui_path, 'templates/%s/' % template_dirname),
|
||||||
cache=cache)
|
cache=cache)
|
||||||
|
|
||||||
def __getattr__(self, attr):
|
def __getattr__(self, attr):
|
||||||
|
@ -90,6 +92,7 @@ def init_06():
|
||||||
|
|
||||||
init_process()
|
init_process()
|
||||||
globals()['proxy'] = proxy
|
globals()['proxy'] = proxy
|
||||||
|
globals()['ENV'] = '0.6'
|
||||||
|
|
||||||
def init_05():
|
def init_05():
|
||||||
import dbus
|
import dbus
|
||||||
|
@ -98,6 +101,7 @@ def init_05():
|
||||||
proxy = bus.get_object("org.deluge_torrent.dbusplugin"
|
proxy = bus.get_object("org.deluge_torrent.dbusplugin"
|
||||||
, "/org/deluge_torrent/DelugeDbusPlugin")
|
, "/org/deluge_torrent/DelugeDbusPlugin")
|
||||||
globals()['proxy'] = proxy
|
globals()['proxy'] = proxy
|
||||||
|
globals()['ENV'] = '0.5_process'
|
||||||
|
|
||||||
def init_gtk_05():
|
def init_gtk_05():
|
||||||
#appy possibly changed config-vars, only called in when runing inside gtk.
|
#appy possibly changed config-vars, only called in when runing inside gtk.
|
||||||
|
@ -106,12 +110,16 @@ def init_gtk_05():
|
||||||
globals()['config'] = deluge.pref.Preferences(config_file, False)
|
globals()['config'] = deluge.pref.Preferences(config_file, False)
|
||||||
globals()['render'] = subclassed_render(config.get('template'),
|
globals()['render'] = subclassed_render(config.get('template'),
|
||||||
config.get('cache_templates'))
|
config.get('cache_templates'))
|
||||||
|
globals()['ENV'] = '0.5_gtk'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#hacks to determine environment, TODO: clean up.
|
#hacks to determine environment, TODO: clean up.
|
||||||
if 'env=0.5' in sys.argv:
|
if 'env=0.5' in sys.argv:
|
||||||
init_05()
|
init_05()
|
||||||
elif not hasattr(deluge, 'common'):
|
elif 'env=0.6' in sys.argv:
|
||||||
|
init_06()
|
||||||
|
elif hasattr(deluge, 'ui'):
|
||||||
init_06()
|
init_06()
|
||||||
elif not hasattr(deluge,'pref'):
|
elif not hasattr(deluge,'pref'):
|
||||||
init_05()
|
init_05()
|
||||||
|
@ -128,7 +136,7 @@ TORRENT_KEYS = ['distributed_copies', 'download_payload_rate',
|
||||||
'total_payload_download', 'total_payload_upload', 'total_peers',
|
'total_payload_download', 'total_payload_upload', 'total_peers',
|
||||||
'total_seeds', 'total_size', 'total_upload', 'total_wanted',
|
'total_seeds', 'total_size', 'total_upload', 'total_wanted',
|
||||||
'tracker_status', 'upload_payload_rate', 'upload_rate',
|
'tracker_status', 'upload_payload_rate', 'upload_rate',
|
||||||
'uploaded_memory','tracker','state','queue_pos']
|
'uploaded_memory','tracker','state','queue_pos','user_paused']
|
||||||
|
|
||||||
STATE_MESSAGES = (_("Queued"),
|
STATE_MESSAGES = (_("Queued"),
|
||||||
_("Checking"),
|
_("Checking"),
|
||||||
|
|
|
@ -56,6 +56,7 @@ from operator import attrgetter
|
||||||
import datetime
|
import datetime
|
||||||
import pickle
|
import pickle
|
||||||
from md5 import md5
|
from md5 import md5
|
||||||
|
from urlparse import urlparse
|
||||||
|
|
||||||
from deluge import common
|
from deluge import common
|
||||||
from webserver_common import REVNO, VERSION
|
from webserver_common import REVNO, VERSION
|
||||||
|
@ -97,13 +98,20 @@ def do_redirect():
|
||||||
"""for redirects after a POST"""
|
"""for redirects after a POST"""
|
||||||
vars = web.input(redir = None)
|
vars = web.input(redir = None)
|
||||||
ck = cookies()
|
ck = cookies()
|
||||||
|
url_vars = {}
|
||||||
|
|
||||||
if vars.redir:
|
if vars.redir:
|
||||||
seeother(vars.redir)
|
seeother(vars.redir)
|
||||||
elif ("order" in ck and "sort" in ck):
|
return
|
||||||
seeother(url("/index", sort=ck['sort'], order=ck['order']))
|
#todo:cleanup
|
||||||
else:
|
if ("order" in ck and "sort" in ck):
|
||||||
seeother(url("/index"))
|
url_vars.update({'sort':ck['sort'] ,'order':ck['order'] })
|
||||||
|
if ("filter" in ck) and ck['filter']:
|
||||||
|
url_vars['filter'] = ck['filter']
|
||||||
|
if ("category" in ck) and ck['category']:
|
||||||
|
url_vars['category'] = ck['category']
|
||||||
|
|
||||||
|
seeother(url("/index", **url_vars))
|
||||||
|
|
||||||
def error_page(error):
|
def error_page(error):
|
||||||
web.header("Content-Type", "text/html; charset=utf-8")
|
web.header("Content-Type", "text/html; charset=utf-8")
|
||||||
|
@ -211,6 +219,12 @@ def get_torrent_status(torrent_id):
|
||||||
|
|
||||||
status["id"] = torrent_id
|
status["id"] = torrent_id
|
||||||
|
|
||||||
|
url = urlparse(status.tracker)
|
||||||
|
if hasattr(url,'hostname'):
|
||||||
|
status.category = url.hostname
|
||||||
|
else:
|
||||||
|
status.category = 'No-tracker'
|
||||||
|
|
||||||
#for naming the status-images
|
#for naming the status-images
|
||||||
status.calc_state_str = "downloading"
|
status.calc_state_str = "downloading"
|
||||||
if status.paused:
|
if status.paused:
|
||||||
|
@ -219,13 +233,15 @@ def get_torrent_status(torrent_id):
|
||||||
status.calc_state_str = "seeding"
|
status.calc_state_str = "seeding"
|
||||||
|
|
||||||
#action for torrent_pause
|
#action for torrent_pause
|
||||||
if status.calc_state_str == "inactive":
|
if status.user_paused:
|
||||||
status.action = "start"
|
status.action = "start"
|
||||||
else:
|
else:
|
||||||
status.action = "stop"
|
status.action = "stop"
|
||||||
|
|
||||||
if status.paused:
|
if status.user_paused:
|
||||||
status.message = _("Paused %s%%") % status.progress
|
status.message = _("Paused %s%%") % status.progress
|
||||||
|
elif status.paused:
|
||||||
|
status.message = _("Queued %s%%") % status.progress
|
||||||
else:
|
else:
|
||||||
status.message = "%s %i%%" % (ws.STATE_MESSAGES[status.state]
|
status.message = "%s %i%%" % (ws.STATE_MESSAGES[status.state]
|
||||||
, status.progress)
|
, status.progress)
|
||||||
|
@ -248,9 +264,59 @@ def get_torrent_status(torrent_id):
|
||||||
raise Exception('Non Unicode for key:%s' % (k, ))
|
raise Exception('Non Unicode for key:%s' % (k, ))
|
||||||
return status
|
return status
|
||||||
|
|
||||||
|
def get_categories(torrent_list):
|
||||||
|
trackers = [torrent['category'] for torrent in torrent_list]
|
||||||
|
categories = {}
|
||||||
|
for tracker in trackers:
|
||||||
|
categories[tracker] = categories.get(tracker,0) + 1
|
||||||
|
return categories
|
||||||
|
|
||||||
|
def filter_torrent_state(torrent_list,filter_name):
|
||||||
|
filters = {
|
||||||
|
'downloading': lambda t: (not t.paused and not t.is_seed)
|
||||||
|
,'queued':lambda t: (t.paused and not t.user_paused)
|
||||||
|
,'paused':lambda t: (t.user_paused)
|
||||||
|
,'seeding':lambda t:(t.is_seed and not t.paused )
|
||||||
|
}
|
||||||
|
filter_func = filters[filter_name]
|
||||||
|
return [t for t in torrent_list if filter_func(t)]
|
||||||
|
|
||||||
#/utils
|
#/utils
|
||||||
|
|
||||||
#template-defs:
|
#template-defs:
|
||||||
|
def category_tabs(torrent_list):
|
||||||
|
categories = get_categories(torrent_list)
|
||||||
|
|
||||||
|
filter_tabs = [Storage(title='All (%s)' % len(torrent_list),
|
||||||
|
filter=None, category=None)]
|
||||||
|
|
||||||
|
#static filters
|
||||||
|
for title, filter_name in [
|
||||||
|
(_('Downloading'),'downloading') ,
|
||||||
|
(_('Queued'),'queued') ,
|
||||||
|
(_('Paused'),'paused') ,
|
||||||
|
(_('Seeding'),'seeding')
|
||||||
|
]:
|
||||||
|
title += ' (%s)' % (
|
||||||
|
len(filter_torrent_state(torrent_list, filter_name)), )
|
||||||
|
filter_tabs.append(Storage(title=title, filter=filter_name))
|
||||||
|
|
||||||
|
categories = [x for x in get_categories(torrent_list).iteritems()]
|
||||||
|
categories.sort()
|
||||||
|
|
||||||
|
#trackers:
|
||||||
|
category_tabs = []
|
||||||
|
category_tabs.append(
|
||||||
|
Storage(title=_('Trackers'),category=None))
|
||||||
|
for title,count in categories:
|
||||||
|
category = title
|
||||||
|
title += ' (%s)' % (count, )
|
||||||
|
category_tabs.append(Storage(title=title, category=category))
|
||||||
|
|
||||||
|
|
||||||
|
return ws.render.part_categories(filter_tabs, category_tabs)
|
||||||
|
|
||||||
|
|
||||||
def template_crop(text, end):
|
def template_crop(text, end):
|
||||||
if len(text) > end:
|
if len(text) > end:
|
||||||
return text[0:end - 3] + '...'
|
return text[0:end - 3] + '...'
|
||||||
|
@ -281,6 +347,7 @@ def get_config(var):
|
||||||
template.Template.globals.update({
|
template.Template.globals.update({
|
||||||
'sort_head': template_sort_head,
|
'sort_head': template_sort_head,
|
||||||
'part_stats':template_part_stats,
|
'part_stats':template_part_stats,
|
||||||
|
'category_tabs':category_tabs,
|
||||||
'crop': template_crop,
|
'crop': template_crop,
|
||||||
'_': _ , #gettext/translations
|
'_': _ , #gettext/translations
|
||||||
'str': str, #because % in templetor is broken.
|
'str': str, #because % in templetor is broken.
|
||||||
|
@ -301,10 +368,16 @@ def create_webserver(urls, methods):
|
||||||
from webpy022.request import webpyfunc
|
from webpy022.request import webpyfunc
|
||||||
from webpy022 import webapi
|
from webpy022 import webapi
|
||||||
from gtk_cherrypy_wsgiserver import CherryPyWSGIServer
|
from gtk_cherrypy_wsgiserver import CherryPyWSGIServer
|
||||||
|
import os
|
||||||
|
|
||||||
func = webapi.wsgifunc(webpyfunc(urls, methods, False))
|
func = webapi.wsgifunc(webpyfunc(urls, methods, False))
|
||||||
server_address=("0.0.0.0", int(ws.config.get('port')))
|
server_address=("0.0.0.0", int(ws.config.get('port')))
|
||||||
|
|
||||||
server = CherryPyWSGIServer(server_address, func, server_name="localhost")
|
server = CherryPyWSGIServer(server_address, func, server_name="localhost")
|
||||||
|
if ws.config.get('use_https'):
|
||||||
|
server.ssl_certificate = os.path.join(ws.webui_path,'ssl/deluge.pem')
|
||||||
|
server.ssl_private_key = os.path.join(ws.webui_path,'ssl/deluge.key')
|
||||||
|
|
||||||
print "http://%s:%d/" % server_address
|
print "http://%s:%d/" % server_address
|
||||||
return server
|
return server
|
||||||
|
|
||||||
|
@ -313,4 +386,5 @@ __all__ = ['deluge_page_noauth', 'deluge_page', 'remote',
|
||||||
'auto_refreshed', 'check_session',
|
'auto_refreshed', 'check_session',
|
||||||
'do_redirect', 'error_page','start_session','getcookie'
|
'do_redirect', 'error_page','start_session','getcookie'
|
||||||
,'setcookie','create_webserver','end_session',
|
,'setcookie','create_webserver','end_session',
|
||||||
'get_torrent_status', 'check_pwd','static_handler']
|
'get_torrent_status', 'check_pwd','static_handler','get_categories'
|
||||||
|
,'template','filter_torrent_state']
|
||||||
|
|
516
po/deluge.pot
516
po/deluge.pot
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2007-11-22 11:29-0600\n"
|
"POT-Creation-Date: 2007-11-23 21:57-0600\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -16,262 +16,262 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=CHARSET\n"
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: glade/delugegtk.glade:147
|
#: glade/delugegtk.glade:29 plugins/WebUi/scripts/template_strings.py:3
|
||||||
msgid "<b>Availability:</b>"
|
msgid "Add Torrent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:183
|
#: glade/delugegtk.glade:30
|
||||||
msgid "<b>Pieces:</b>"
|
msgid "Add"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:200
|
#: glade/delugegtk.glade:43 glade/dgtkpopups.glade:6
|
||||||
msgid "<b>ETA:</b>"
|
msgid "Remove Torrent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:221
|
#: glade/delugegtk.glade:44 plugins/WebUi/scripts/template_strings.py:40
|
||||||
msgid "<b>Peers:</b>"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:242 glade/delugegtk.glade:263
|
#: glade/delugegtk.glade:56
|
||||||
msgid "<b>Speed:</b>"
|
msgid "Clear Seeding Torrents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:281
|
#: glade/delugegtk.glade:57
|
||||||
msgid "<b>Share Ratio:</b>"
|
msgid "Clear"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:299
|
#: glade/delugegtk.glade:79
|
||||||
msgid "<b>Seeders:</b>"
|
msgid "Start or Resume Torrent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:317
|
#: glade/delugegtk.glade:80
|
||||||
msgid "<b>Uploaded:</b>"
|
msgid "Resume"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:335
|
#: glade/delugegtk.glade:93
|
||||||
msgid "<b>Downloaded:</b>"
|
msgid "Pause Torrent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:447
|
#: glade/delugegtk.glade:94
|
||||||
msgid "<b>Statistics</b>"
|
msgid "Pause"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:503
|
#: glade/delugegtk.glade:106
|
||||||
msgid "<b>Path:</b>"
|
msgid "Queue Torrent Up"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:537
|
#: glade/delugegtk.glade:107
|
||||||
msgid "<b>Total Size:</b>"
|
msgid "Up"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:599
|
#: glade/delugegtk.glade:120
|
||||||
msgid "<b>Tracker Status:</b>"
|
msgid "Queue Torrent Down"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:632
|
#: glade/delugegtk.glade:121
|
||||||
msgid "<b>Next Announce:</b>"
|
msgid "Down"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:671
|
#: glade/delugegtk.glade:142
|
||||||
msgid "<b># of files:</b>"
|
msgid "Change Deluge preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:699
|
#: glade/delugegtk.glade:143
|
||||||
msgid "<b>Tracker:</b>"
|
msgid "Preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:723
|
#: glade/delugegtk.glade:156 glade/dgtkpopups.glade:209
|
||||||
msgid "<b>Name:</b>"
|
#: glade/preferences_dialog.glade:2965
|
||||||
|
msgid "Plugins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:740
|
#: glade/delugegtk.glade:177
|
||||||
msgid "<b>Torrent Info</b>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/delugegtk.glade:766 plugins/WebUi/scripts/template_strings.py:14
|
|
||||||
msgid "Details"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/delugegtk.glade:805
|
|
||||||
msgid "_File"
|
msgid "_File"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:812 glade/tray_menu.glade:61
|
#: glade/delugegtk.glade:184 glade/tray_menu.glade:61
|
||||||
msgid "_Add Torrent"
|
msgid "_Add Torrent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:827
|
#: glade/delugegtk.glade:199
|
||||||
msgid "Add _URL"
|
msgid "Add _URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:835
|
#: glade/delugegtk.glade:207
|
||||||
msgid "_Clear Completed"
|
msgid "_Clear Completed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:868
|
#: glade/delugegtk.glade:240
|
||||||
msgid "_Edit"
|
msgid "_Edit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:877
|
#: glade/delugegtk.glade:249
|
||||||
msgid "gtk-select-all"
|
msgid "gtk-select-all"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:893
|
#: glade/delugegtk.glade:265
|
||||||
msgid "Plu_gins"
|
msgid "Plu_gins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:921
|
#: glade/delugegtk.glade:293
|
||||||
msgid "_Torrent"
|
msgid "_Torrent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:928
|
#: glade/delugegtk.glade:300
|
||||||
msgid "_View"
|
msgid "_View"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:936
|
#: glade/delugegtk.glade:308
|
||||||
msgid "_Toolbar"
|
msgid "_Toolbar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:945
|
#: glade/delugegtk.glade:317
|
||||||
msgid "_Details"
|
msgid "_Details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:954
|
#: glade/delugegtk.glade:326
|
||||||
msgid "_Columns"
|
msgid "_Columns"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:962 src/interface.py:623 src/files.py:80
|
#: glade/delugegtk.glade:334 src/interface.py:623 src/files.py:80
|
||||||
#: plugins/WebUi/scripts/template_strings.py:48
|
#: plugins/WebUi/scripts/template_strings.py:48
|
||||||
msgid "Size"
|
msgid "Size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:971 src/interface.py:627
|
#: glade/delugegtk.glade:343 src/interface.py:627
|
||||||
#: plugins/FlexRSS/FlexRSS.glade:138
|
#: plugins/FlexRSS/FlexRSS.glade:138
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:980 src/interface.py:629
|
#: glade/delugegtk.glade:352 src/interface.py:629
|
||||||
#: plugins/WebUi/scripts/template_strings.py:44
|
#: plugins/WebUi/scripts/template_strings.py:44
|
||||||
msgid "Seeders"
|
msgid "Seeders"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:989 src/interface.py:632
|
#: glade/delugegtk.glade:361 src/interface.py:632
|
||||||
#: plugins/TorrentPeers/__init__.py:84
|
#: plugins/TorrentPeers/__init__.py:84
|
||||||
#: plugins/WebUi/scripts/template_strings.py:31
|
#: plugins/WebUi/scripts/template_strings.py:31
|
||||||
msgid "Peers"
|
msgid "Peers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:998 src/interface.py:635 src/interface.py:1192
|
#: glade/delugegtk.glade:370 src/interface.py:635 src/interface.py:1192
|
||||||
#: src/interface.py:1223 plugins/TorrentPeers/tab_peers.py:89
|
#: src/interface.py:1223 plugins/TorrentPeers/tab_peers.py:89
|
||||||
#: plugins/WebUi/scripts/template_strings.py:16
|
#: plugins/WebUi/scripts/template_strings.py:16
|
||||||
msgid "Down Speed"
|
msgid "Down Speed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1007 src/interface.py:638 src/interface.py:1193
|
#: glade/delugegtk.glade:379 src/interface.py:638 src/interface.py:1193
|
||||||
#: src/interface.py:1224 plugins/TorrentPeers/tab_peers.py:91
|
#: src/interface.py:1224 plugins/TorrentPeers/tab_peers.py:91
|
||||||
#: plugins/WebUi/scripts/template_strings.py:55
|
#: plugins/WebUi/scripts/template_strings.py:55
|
||||||
msgid "Up Speed"
|
msgid "Up Speed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1016
|
#: glade/delugegtk.glade:388
|
||||||
msgid "Time Remaining"
|
msgid "Time Remaining"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1025 plugins/WebUi/scripts/template_strings.py:8
|
#: glade/delugegtk.glade:397 plugins/WebUi/scripts/template_strings.py:8
|
||||||
msgid "Availability"
|
msgid "Availability"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1034 plugins/WebUi/scripts/template_strings.py:47
|
#: glade/delugegtk.glade:406 plugins/WebUi/scripts/template_strings.py:47
|
||||||
msgid "Share Ratio"
|
msgid "Share Ratio"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1051
|
#: glade/delugegtk.glade:423
|
||||||
msgid "_Help"
|
msgid "_Help"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1059
|
#: glade/delugegtk.glade:431
|
||||||
msgid "Help translate this application"
|
msgid "Help translate this application"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1060
|
#: glade/delugegtk.glade:432
|
||||||
msgid "_Translate This Application..."
|
msgid "_Translate This Application..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1083
|
#: glade/delugegtk.glade:455
|
||||||
msgid "Runs the first-time configuration wizard"
|
msgid "Runs the first-time configuration wizard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1084
|
#: glade/delugegtk.glade:456
|
||||||
msgid "_Run Configuration Wizard"
|
msgid "_Run Configuration Wizard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1157 plugins/WebUi/scripts/template_strings.py:3
|
#: glade/delugegtk.glade:593
|
||||||
msgid "Add Torrent"
|
msgid "<b>Name:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1158
|
#: glade/delugegtk.glade:617
|
||||||
msgid "Add"
|
msgid "<b>Tracker:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1171 glade/dgtkpopups.glade:6
|
#: glade/delugegtk.glade:645
|
||||||
msgid "Remove Torrent"
|
msgid "<b># of files:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1172 plugins/WebUi/scripts/template_strings.py:40
|
#: glade/delugegtk.glade:681
|
||||||
msgid "Remove"
|
msgid "<b>Next Announce:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1184
|
#: glade/delugegtk.glade:715
|
||||||
msgid "Clear Seeding Torrents"
|
msgid "<b>Tracker Status:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1185
|
#: glade/delugegtk.glade:776
|
||||||
msgid "Clear"
|
msgid "<b>Total Size:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1207
|
#: glade/delugegtk.glade:811
|
||||||
msgid "Start or Resume Torrent"
|
msgid "<b>Path:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1208
|
#: glade/delugegtk.glade:843
|
||||||
msgid "Resume"
|
msgid "<b>Torrent Info</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1221
|
#: glade/delugegtk.glade:1005
|
||||||
msgid "Pause Torrent"
|
msgid "<b>Downloaded:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1222
|
#: glade/delugegtk.glade:1019
|
||||||
msgid "Pause"
|
msgid "<b>Uploaded:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1234
|
#: glade/delugegtk.glade:1037
|
||||||
msgid "Queue Torrent Up"
|
msgid "<b>Seeders:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1235
|
#: glade/delugegtk.glade:1055
|
||||||
msgid "Up"
|
msgid "<b>Share Ratio:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1248
|
#: glade/delugegtk.glade:1074 glade/delugegtk.glade:1093
|
||||||
msgid "Queue Torrent Down"
|
msgid "<b>Speed:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1249
|
#: glade/delugegtk.glade:1114
|
||||||
msgid "Down"
|
msgid "<b>Peers:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1270
|
#: glade/delugegtk.glade:1135
|
||||||
msgid "Change Deluge preferences"
|
msgid "<b>ETA:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1271
|
#: glade/delugegtk.glade:1152
|
||||||
msgid "Preferences"
|
msgid "<b>Pieces:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/delugegtk.glade:1284 glade/dgtkpopups.glade:209
|
#: glade/delugegtk.glade:1190
|
||||||
#: glade/preferences_dialog.glade:2936
|
msgid "<b>Availability:</b>"
|
||||||
msgid "Plugins"
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/delugegtk.glade:1231
|
||||||
|
msgid "<b>Statistics</b>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/delugegtk.glade:1256 plugins/WebUi/scripts/template_strings.py:14
|
||||||
|
msgid "Details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/dgtkpopups.glade:41
|
#: glade/dgtkpopups.glade:41
|
||||||
|
@ -312,19 +312,19 @@ msgstr ""
|
||||||
msgid "Unselect All"
|
msgid "Unselect All"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/file_tab_menu.glade:68 src/core.py:101
|
#: glade/file_tab_menu.glade:68 src/core.py:102
|
||||||
msgid "Don't download"
|
msgid "Don't download"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/file_tab_menu.glade:83 src/core.py:102
|
#: glade/file_tab_menu.glade:83 src/core.py:103
|
||||||
msgid "Normal"
|
msgid "Normal"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/file_tab_menu.glade:98 src/core.py:103
|
#: glade/file_tab_menu.glade:98 src/core.py:104
|
||||||
msgid "High"
|
msgid "High"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/file_tab_menu.glade:113 src/core.py:104
|
#: glade/file_tab_menu.glade:113 src/core.py:105
|
||||||
msgid "Highest"
|
msgid "Highest"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -346,17 +346,17 @@ msgstr ""
|
||||||
msgid "Ask where to save each download"
|
msgid "Ask where to save each download"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:76 glade/preferences_dialog.glade:125
|
#: glade/preferences_dialog.glade:75 glade/preferences_dialog.glade:76
|
||||||
#: glade/preferences_dialog.glade:196 glade/wizard.glade:187
|
msgid "Store all downloads in:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:90 glade/preferences_dialog.glade:118
|
||||||
|
#: glade/preferences_dialog.glade:186 glade/wizard.glade:187
|
||||||
#: plugins/MoveTorrent/movetorrent.glade:35
|
#: plugins/MoveTorrent/movetorrent.glade:35
|
||||||
msgid "Select A Folder"
|
msgid "Select A Folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:88 glade/preferences_dialog.glade:89
|
#: glade/preferences_dialog.glade:131
|
||||||
msgid "Store all downloads in:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:112
|
|
||||||
msgid "Store all torrent files in:"
|
msgid "Store all torrent files in:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -364,7 +364,7 @@ msgstr ""
|
||||||
msgid "<b>Download Location</b>"
|
msgid "<b>Download Location</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:182
|
#: glade/preferences_dialog.glade:200
|
||||||
msgid "Autoload all torrent files in:"
|
msgid "Autoload all torrent files in:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -565,101 +565,117 @@ msgstr ""
|
||||||
msgid "<b>Seeding</b>"
|
msgid "<b>Seeding</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1138 src/core.py:92
|
#: glade/preferences_dialog.glade:1138 src/core.py:93
|
||||||
#: plugins/WebUi/webserver_common.py:139
|
#: plugins/WebUi/webserver_common.py:139
|
||||||
msgid "Seeding"
|
msgid "Seeding"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1184 glade/wizard.glade:257
|
#: glade/preferences_dialog.glade:1184 glade/preferences_dialog.glade:1205
|
||||||
#: glade/wizard.glade:318
|
|
||||||
msgid "The maximum upload slots for all torrents. Set -1 for unlimited."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1201 glade/preferences_dialog.glade:1287
|
|
||||||
#: glade/preferences_dialog.glade:1307 glade/wizard.glade:277
|
|
||||||
#: glade/wizard.glade:341
|
|
||||||
msgid "The maximum upload speed for all torrents. Set -1 for unlimited."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1220 glade/preferences_dialog.glade:1237
|
|
||||||
msgid "The maximum download speed for all torrents. Set -1 for unlimited."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1239
|
|
||||||
msgid "Maximum Download Speed (KiB/s):"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1250 glade/preferences_dialog.glade:1269
|
|
||||||
#: glade/wizard.glade:297 glade/wizard.glade:364
|
|
||||||
msgid "The maximum number of connections allowed. Set -1 for unlimited."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1271 glade/preferences_dialog.glade:1456
|
|
||||||
#: glade/wizard.glade:298
|
|
||||||
msgid "Maximum Connections:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1289 glade/wizard.glade:278
|
|
||||||
msgid "Maximum Upload Speed (KiB/s):"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1309 glade/preferences_dialog.glade:1437
|
|
||||||
#: glade/wizard.glade:258
|
|
||||||
msgid "Maximum Upload Slots:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1327 glade/preferences_dialog.glade:1343
|
|
||||||
#: glade/wizard.glade:434 glade/wizard.glade:455
|
#: glade/wizard.glade:434 glade/wizard.glade:455
|
||||||
msgid ""
|
msgid ""
|
||||||
"The maximum half-open connections. A high value may crash some cheap "
|
"The maximum half-open connections. A high value may crash some cheap "
|
||||||
"routers. Set -1 for unlimited."
|
"routers. Set -1 for unlimited."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1329 glade/wizard.glade:435
|
#: glade/preferences_dialog.glade:1207 glade/wizard.glade:435
|
||||||
msgid "Maximum Half-Open Connections:"
|
msgid "Maximum Half-Open Connections:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1363
|
#: glade/preferences_dialog.glade:1225 glade/preferences_dialog.glade:1245
|
||||||
|
#: glade/preferences_dialog.glade:1325 glade/wizard.glade:277
|
||||||
|
#: glade/wizard.glade:341
|
||||||
|
msgid "The maximum upload speed for all torrents. Set -1 for unlimited."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1227 glade/preferences_dialog.glade:1450
|
||||||
|
#: glade/wizard.glade:258
|
||||||
|
msgid "Maximum Upload Slots:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1247 glade/wizard.glade:278
|
||||||
|
msgid "Maximum Upload Speed (KiB/s):"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1265 glade/preferences_dialog.glade:1279
|
||||||
|
#: glade/wizard.glade:297 glade/wizard.glade:364
|
||||||
|
msgid "The maximum number of connections allowed. Set -1 for unlimited."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1267 glade/preferences_dialog.glade:1435
|
||||||
|
#: glade/wizard.glade:298
|
||||||
|
msgid "Maximum Connections:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1293 glade/preferences_dialog.glade:1307
|
||||||
|
msgid "The maximum download speed for all torrents. Set -1 for unlimited."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1295
|
||||||
|
msgid "Maximum Download Speed (KiB/s):"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1343 glade/wizard.glade:257
|
||||||
|
#: glade/wizard.glade:318
|
||||||
|
msgid "The maximum upload slots for all torrents. Set -1 for unlimited."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1359 glade/preferences_dialog.glade:1372
|
||||||
|
msgid ""
|
||||||
|
"The maximum number of connection attempts per second. A high value may "
|
||||||
|
"crash some cheap routers. Set -1 for unlimited."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1361
|
||||||
|
msgid "Maximum Connection Attempts per Second:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1392
|
||||||
msgid "<b>Global Bandwidth Usage</b>"
|
msgid "<b>Global Bandwidth Usage</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1400 glade/preferences_dialog.glade:1435
|
#: glade/preferences_dialog.glade:1433 glade/preferences_dialog.glade:1463
|
||||||
msgid "The maximum upload slots per torrent. Set -1 for unlimited."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1417 glade/preferences_dialog.glade:1454
|
|
||||||
msgid "The maximum number of connections per torrent. Set -1 for unlimited."
|
msgid "The maximum number of connections per torrent. Set -1 for unlimited."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1469
|
#: glade/preferences_dialog.glade:1448 glade/preferences_dialog.glade:1477
|
||||||
|
msgid "The maximum upload slots per torrent. Set -1 for unlimited."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1498
|
||||||
msgid "<b>Per Torrent Bandwidth Usage</b>"
|
msgid "<b>Per Torrent Bandwidth Usage</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1495
|
#: glade/preferences_dialog.glade:1524
|
||||||
msgid "Bandwidth"
|
msgid "Bandwidth"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1541 glade/preferences_dialog.glade:1736
|
#: glade/preferences_dialog.glade:1570 glade/preferences_dialog.glade:1765
|
||||||
#: glade/preferences_dialog.glade:1931 glade/preferences_dialog.glade:2126
|
#: glade/preferences_dialog.glade:1960 glade/preferences_dialog.glade:2155
|
||||||
msgid "Affects regular bittorrent peers"
|
msgid "Affects regular bittorrent peers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1542
|
#: glade/preferences_dialog.glade:1571
|
||||||
msgid "Peer Proxy"
|
msgid "Peer Proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1587 glade/preferences_dialog.glade:1782
|
#: glade/preferences_dialog.glade:1613 glade/preferences_dialog.glade:1808
|
||||||
#: glade/preferences_dialog.glade:1977 glade/preferences_dialog.glade:2172
|
#: glade/preferences_dialog.glade:2003 glade/preferences_dialog.glade:2198
|
||||||
msgid "Port"
|
msgid "Proxy type"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1600 glade/preferences_dialog.glade:1795
|
#: glade/preferences_dialog.glade:1620 glade/preferences_dialog.glade:1815
|
||||||
#: glade/preferences_dialog.glade:1990 glade/preferences_dialog.glade:2185
|
#: glade/preferences_dialog.glade:2010 glade/preferences_dialog.glade:2205
|
||||||
msgid "Server"
|
msgid "Username"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1641 glade/preferences_dialog.glade:1836
|
#: glade/preferences_dialog.glade:1631 glade/preferences_dialog.glade:1826
|
||||||
#: glade/preferences_dialog.glade:2031 glade/preferences_dialog.glade:2226
|
#: glade/preferences_dialog.glade:2021 glade/preferences_dialog.glade:2216
|
||||||
|
#: plugins/WebUi/scripts/template_strings.py:28
|
||||||
|
msgid "Password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:1643 glade/preferences_dialog.glade:1838
|
||||||
|
#: glade/preferences_dialog.glade:2033 glade/preferences_dialog.glade:2228
|
||||||
msgid ""
|
msgid ""
|
||||||
"None\n"
|
"None\n"
|
||||||
"Socksv4\n"
|
"Socksv4\n"
|
||||||
|
@ -669,87 +685,73 @@ msgid ""
|
||||||
"HTTP W/ Auth"
|
"HTTP W/ Auth"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1657 glade/preferences_dialog.glade:1852
|
#: glade/preferences_dialog.glade:1688 glade/preferences_dialog.glade:1883
|
||||||
#: glade/preferences_dialog.glade:2047 glade/preferences_dialog.glade:2242
|
#: glade/preferences_dialog.glade:2078 glade/preferences_dialog.glade:2273
|
||||||
#: plugins/WebUi/scripts/template_strings.py:28
|
msgid "Server"
|
||||||
msgid "Password"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1668 glade/preferences_dialog.glade:1863
|
#: glade/preferences_dialog.glade:1699 glade/preferences_dialog.glade:1894
|
||||||
#: glade/preferences_dialog.glade:2058 glade/preferences_dialog.glade:2253
|
#: glade/preferences_dialog.glade:2089 glade/preferences_dialog.glade:2284
|
||||||
msgid "Username"
|
msgid "Port"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1679 glade/preferences_dialog.glade:1874
|
#: glade/preferences_dialog.glade:1733
|
||||||
#: glade/preferences_dialog.glade:2069 glade/preferences_dialog.glade:2264
|
|
||||||
msgid "Proxy type"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1704
|
|
||||||
msgid "<b>Peer Proxy</b>"
|
msgid "<b>Peer Proxy</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1737
|
#: glade/preferences_dialog.glade:1766
|
||||||
msgid "Tracker Proxy"
|
msgid "Tracker Proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1899
|
#: glade/preferences_dialog.glade:1928
|
||||||
msgid "<b>Tracker Proxy</b>"
|
msgid "<b>Tracker Proxy</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:1932
|
#: glade/preferences_dialog.glade:1961
|
||||||
msgid "DHT Proxy"
|
msgid "DHT Proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2094
|
#: glade/preferences_dialog.glade:2123
|
||||||
msgid "<b>DHT Proxy</b>"
|
msgid "<b>DHT Proxy</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2127
|
#: glade/preferences_dialog.glade:2156
|
||||||
msgid "Web Seed Proxy"
|
msgid "Web Seed Proxy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2289
|
#: glade/preferences_dialog.glade:2318
|
||||||
msgid "<b>Web Seed Proxy</b>"
|
msgid "<b>Web Seed Proxy</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2316
|
#: glade/preferences_dialog.glade:2345
|
||||||
msgid "Proxies"
|
msgid "Proxies"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2345
|
#: glade/preferences_dialog.glade:2374
|
||||||
msgid "Enable system tray icon"
|
msgid "Enable system tray icon"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2361
|
#: glade/preferences_dialog.glade:2390
|
||||||
msgid "Minimize to tray on close"
|
msgid "Minimize to tray on close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2380
|
#: glade/preferences_dialog.glade:2409
|
||||||
msgid "Start in tray"
|
msgid "Start in tray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2404
|
#: glade/preferences_dialog.glade:2433
|
||||||
msgid "Password protect system tray"
|
msgid "Password protect system tray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2422
|
#: glade/preferences_dialog.glade:2451
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2464
|
#: glade/preferences_dialog.glade:2493
|
||||||
msgid "<b>System Tray</b>"
|
msgid "<b>System Tray</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2507
|
#: glade/preferences_dialog.glade:2557
|
||||||
msgid "Open folder with:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2524
|
|
||||||
msgid "Custom:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2547
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Auto-detect (xdg-open)\n"
|
"Auto-detect (xdg-open)\n"
|
||||||
"Konqueror\n"
|
"Konqueror\n"
|
||||||
|
@ -757,58 +759,66 @@ msgid ""
|
||||||
"Thunar"
|
"Thunar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2594
|
#: glade/preferences_dialog.glade:2578
|
||||||
|
msgid "Custom:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:2601
|
||||||
|
msgid "Open folder with:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: glade/preferences_dialog.glade:2623
|
||||||
msgid "<b>Desktop File Manager</b> - only for non-Windows platforms"
|
msgid "<b>Desktop File Manager</b> - only for non-Windows platforms"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2626
|
#: glade/preferences_dialog.glade:2655
|
||||||
msgid "GUI update interval (seconds)"
|
msgid "GUI update interval (seconds)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2654
|
#: glade/preferences_dialog.glade:2683
|
||||||
msgid "<b>Performance</b>"
|
msgid "<b>Performance</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2685
|
#: glade/preferences_dialog.glade:2714
|
||||||
msgid "Use the advanced progress bar (uses slightly more CPU/RAM)"
|
msgid "Use the advanced progress bar (uses slightly more CPU/RAM)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2696
|
#: glade/preferences_dialog.glade:2725
|
||||||
msgid "<b>Detailed Progress Bar</b>"
|
msgid "<b>Detailed Progress Bar</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2730
|
#: glade/preferences_dialog.glade:2759
|
||||||
msgid ""
|
msgid ""
|
||||||
"Deluge will check our servers and will tell you if a newer version has been "
|
"Deluge will check our servers and will tell you if a newer version has been "
|
||||||
"released"
|
"released"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2731
|
#: glade/preferences_dialog.glade:2760
|
||||||
msgid "Be alerted about new releases"
|
msgid "Be alerted about new releases"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2748
|
#: glade/preferences_dialog.glade:2777
|
||||||
msgid "<b>Updates</b>"
|
msgid "<b>Updates</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2778
|
#: glade/preferences_dialog.glade:2807
|
||||||
msgid ""
|
msgid ""
|
||||||
"Help us improve Deluge by sending us your Python and PyGTK\n"
|
"Help us improve Deluge by sending us your Python and PyGTK\n"
|
||||||
"versions, OS and processor types. Absolutely no other\n"
|
"versions, OS and processor types. Absolutely no other\n"
|
||||||
"information is sent."
|
"information is sent."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2791
|
#: glade/preferences_dialog.glade:2820
|
||||||
msgid "<b>System Information</b>"
|
msgid "<b>System Information</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2814
|
#: glade/preferences_dialog.glade:2843
|
||||||
#: plugins/EventLogging/event_logging_preferences.glade:52
|
#: plugins/EventLogging/event_logging_preferences.glade:52
|
||||||
#: plugins/EventLogging/tab_log.py:218
|
#: plugins/EventLogging/tab_log.py:218
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: glade/preferences_dialog.glade:2908
|
#: glade/preferences_dialog.glade:2937
|
||||||
msgid "gtk-preferences"
|
msgid "gtk-preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1102,107 +1112,107 @@ msgid ""
|
||||||
"torrent file is corrupted."
|
"torrent file is corrupted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interface.py:1374
|
#: src/interface.py:1377
|
||||||
msgid "Unknown duplicate torrent error."
|
msgid "Unknown duplicate torrent error."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interface.py:1379
|
#: src/interface.py:1382
|
||||||
msgid ""
|
msgid ""
|
||||||
"There is not enough free disk space to complete your download."
|
"There is not enough free disk space to complete your download."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interface.py:1381
|
#: src/interface.py:1384
|
||||||
msgid "Space Needed:"
|
msgid "Space Needed:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interface.py:1382
|
#: src/interface.py:1385
|
||||||
msgid "Available Space:"
|
msgid "Available Space:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interface.py:1399
|
#: src/interface.py:1402
|
||||||
msgid "Add torrent from URL"
|
msgid "Add torrent from URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interface.py:1403
|
#: src/interface.py:1406
|
||||||
msgid "Enter the URL of the .torrent to download"
|
msgid "Enter the URL of the .torrent to download"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interface.py:1464
|
#: src/interface.py:1467
|
||||||
msgid "Warning - all downloaded files for this torrent will be deleted!"
|
msgid "Warning - all downloaded files for this torrent will be deleted!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/interface.py:1480
|
#: src/interface.py:1483
|
||||||
msgid "Are you sure that you want to remove all seeding torrents?"
|
msgid "Are you sure that you want to remove all seeding torrents?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:86 plugins/WebUi/webserver_common.py:133
|
#: src/core.py:87 plugins/WebUi/webserver_common.py:133
|
||||||
msgid "Queued"
|
msgid "Queued"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:87 plugins/WebUi/webserver_common.py:134
|
#: src/core.py:88 plugins/WebUi/webserver_common.py:134
|
||||||
msgid "Checking"
|
msgid "Checking"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:88 plugins/WebUi/webserver_common.py:135
|
#: src/core.py:89 plugins/WebUi/webserver_common.py:135
|
||||||
msgid "Connecting"
|
msgid "Connecting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:89 plugins/WebUi/webserver_common.py:136
|
#: src/core.py:90 plugins/WebUi/webserver_common.py:136
|
||||||
msgid "Downloading Metadata"
|
msgid "Downloading Metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:90 plugins/BlocklistImport/ui.py:117
|
#: src/core.py:91 plugins/BlocklistImport/ui.py:117
|
||||||
#: plugins/WebUi/webserver_common.py:137
|
#: plugins/WebUi/webserver_common.py:137
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:91 plugins/WebUi/webserver_common.py:138
|
#: src/core.py:92 plugins/WebUi/webserver_common.py:138
|
||||||
msgid "Finished"
|
msgid "Finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:93 plugins/WebUi/webserver_common.py:140
|
#: src/core.py:94 plugins/WebUi/webserver_common.py:140
|
||||||
msgid "Allocating"
|
msgid "Allocating"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:136
|
#: src/core.py:137
|
||||||
msgid "bytes needed"
|
msgid "bytes needed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:383
|
#: src/core.py:384
|
||||||
msgid "File was not found"
|
msgid "File was not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:426
|
#: src/core.py:427
|
||||||
msgid "Asked for a torrent that doesn't exist"
|
msgid "Asked for a torrent that doesn't exist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:549
|
#: src/core.py:550
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're out of HD space! Oops!\n"
|
"You're out of HD space! Oops!\n"
|
||||||
"We had to pause at least one torrent"
|
"We had to pause at least one torrent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:637
|
#: src/core.py:638
|
||||||
msgid "Announce sent"
|
msgid "Announce sent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:641
|
#: src/core.py:642
|
||||||
msgid "Announce OK"
|
msgid "Announce OK"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:647
|
#: src/core.py:648
|
||||||
msgid "Alert"
|
msgid "Alert"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:648
|
#: src/core.py:649
|
||||||
msgid "HTTP code"
|
msgid "HTTP code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:649
|
#: src/core.py:650
|
||||||
msgid "times in a row"
|
msgid "times in a row"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/core.py:656
|
#: src/core.py:657
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1229,7 +1239,7 @@ msgstr ""
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs.py:459
|
#: src/dialogs.py:461
|
||||||
msgid ""
|
msgid ""
|
||||||
"Deluge is free software, you can redistribute it and/or\n"
|
"Deluge is free software, you can redistribute it and/or\n"
|
||||||
"modify it under the terms of the GNU General Public\n"
|
"modify it under the terms of the GNU General Public\n"
|
||||||
|
@ -1246,15 +1256,15 @@ msgid ""
|
||||||
"1301 USA"
|
"1301 USA"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs.py:500
|
#: src/dialogs.py:502
|
||||||
msgid "Choose a .torrent file"
|
msgid "Choose a .torrent file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs.py:505
|
#: src/dialogs.py:507
|
||||||
msgid "Torrent files"
|
msgid "Torrent files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/dialogs.py:509
|
#: src/dialogs.py:511
|
||||||
msgid "All files"
|
msgid "All files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1930,7 +1940,7 @@ msgstr ""
|
||||||
msgid "Choose a directory to move files to"
|
msgid "Choose a directory to move files to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: plugins/MoveTorrent/__init__.py:129
|
#: plugins/MoveTorrent/__init__.py:124
|
||||||
msgid ""
|
msgid ""
|
||||||
"You cannot move torrent to a different partition. Please check your "
|
"You cannot move torrent to a different partition. Please check your "
|
||||||
"preferences. Also, you cannot move a torrent's files to the same directory "
|
"preferences. Also, you cannot move a torrent's files to the same directory "
|
||||||
|
|
|
@ -635,6 +635,13 @@ free disk space to complete your download.") + "\n" + _("Space Needed:") + " " \
|
||||||
# seed if client crashes
|
# seed if client crashes
|
||||||
self.save_fastresume_data(event['unique_ID'])
|
self.save_fastresume_data(event['unique_ID'])
|
||||||
|
|
||||||
|
elif event['event_type'] is self.constants['EVENT_FILE_ERROR']:
|
||||||
|
import gtk
|
||||||
|
import dialogs
|
||||||
|
gtk.gdk.threads_enter()
|
||||||
|
dialogs.show_popup_warning(None, event['message'])
|
||||||
|
gtk.gdk.threads_leave()
|
||||||
|
|
||||||
elif event['event_type'] is self.constants['EVENT_TRACKER_ANNOUNCE']:
|
elif event['event_type'] is self.constants['EVENT_TRACKER_ANNOUNCE']:
|
||||||
self.set_supp_torrent_state_val(event['unique_ID'],
|
self.set_supp_torrent_state_val(event['unique_ID'],
|
||||||
"tracker_status",
|
"tracker_status",
|
||||||
|
|
|
@ -820,9 +820,9 @@ window, please enter your password"))
|
||||||
unique_ids = self.get_selected_torrent_rows()
|
unique_ids = self.get_selected_torrent_rows()
|
||||||
try:
|
try:
|
||||||
for uid in unique_ids:
|
for uid in unique_ids:
|
||||||
|
self.manager.set_user_pause(uid, True, True)
|
||||||
torrent_state = self.manager.get_torrent_state(uid)
|
torrent_state = self.manager.get_torrent_state(uid)
|
||||||
if torrent_state["is_paused"] == 0:
|
if torrent_state["is_paused"] == 0:
|
||||||
self.manager.set_user_pause(uid, True, True)
|
|
||||||
self.manager.save_fastresume_data(uid)
|
self.manager.save_fastresume_data(uid)
|
||||||
|
|
||||||
self.update()
|
self.update()
|
||||||
|
@ -937,13 +937,16 @@ window, please enter your password"))
|
||||||
int(self.config.get("web_proxy_port")), self.config.get(
|
int(self.config.get("web_proxy_port")), self.config.get(
|
||||||
"web_proxy_type"), "web")
|
"web_proxy_type"), "web")
|
||||||
|
|
||||||
def get_message_from_state(self, torrent_state):
|
def get_message_from_state(self, unique_id, torrent_state):
|
||||||
state = torrent_state['state']
|
state = torrent_state['state']
|
||||||
is_paused = torrent_state['is_paused']
|
is_paused = torrent_state['is_paused']
|
||||||
progress = torrent_state['progress']
|
progress = torrent_state['progress']
|
||||||
progress = '%d%%' % int(progress * 100)
|
progress = '%d%%' % int(progress * 100)
|
||||||
if is_paused:
|
if is_paused:
|
||||||
message = _("Paused %s") % progress
|
if self.manager.is_user_paused(unique_id):
|
||||||
|
message = _("Paused %s") % progress
|
||||||
|
else:
|
||||||
|
message = _("Queued %s") % progress
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
message = core.STATE_MESSAGES[state]
|
message = core.STATE_MESSAGES[state]
|
||||||
|
@ -960,7 +963,7 @@ window, please enter your password"))
|
||||||
name = state['name']
|
name = state['name']
|
||||||
size = state['total_wanted']
|
size = state['total_wanted']
|
||||||
progress = float(state['progress'] * 100)
|
progress = float(state['progress'] * 100)
|
||||||
message = self.get_message_from_state(state)
|
message = self.get_message_from_state(unique_id, state)
|
||||||
availability = state['distributed_copies']
|
availability = state['distributed_copies']
|
||||||
share = self.manager.calc_ratio(unique_id, state)
|
share = self.manager.calc_ratio(unique_id, state)
|
||||||
|
|
||||||
|
@ -1140,11 +1143,13 @@ window, please enter your password"))
|
||||||
state = self.manager.get_torrent_state(unique_id)
|
state = self.manager.get_torrent_state(unique_id)
|
||||||
if previosly_paused and state['is_paused']:
|
if previosly_paused and state['is_paused']:
|
||||||
# For previosly and still paused torrents update only
|
# For previosly and still paused torrents update only
|
||||||
# queue pos and selected files size, all the rest
|
# queue pos, selected files size and status message.
|
||||||
# columns are unchanged for them.
|
# All the other columns are unchanged.
|
||||||
dgtk.update_store(self.torrent_model, itr, (1, 4),
|
message = self.get_message_from_state(unique_id, state)
|
||||||
|
dgtk.update_store(self.torrent_model, itr, (1, 4, 6),
|
||||||
(state['queue_pos'],
|
(state['queue_pos'],
|
||||||
state['total_wanted']))
|
state['total_wanted'],
|
||||||
|
message))
|
||||||
else:
|
else:
|
||||||
tlist = self.get_torrent_state_list(unique_id, state)
|
tlist = self.get_torrent_state_list(unique_id, state)
|
||||||
dgtk.update_store(self.torrent_model, itr,
|
dgtk.update_store(self.torrent_model, itr,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue