deluge/deluge/ui/webui/config_tabs_deluge.py
2008-11-28 17:54:17 +00:00

216 lines
8.2 KiB
Python

# -*- coding: utf-8 -*-
#
# deluge_webserver.py
#
# Copyright (C) Martijn Voncken 2008 <mvoncken@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
#
from deluge.ui.client import sclient
from deluge.log import LOG as log
import utils
import lib.newforms_plus as forms
import config_forms
from deluge import component
config_page = component.get("ConfigPageManager")
class NetworkPorts(config_forms.CfgForm ):
title = _("Ports")
_port_from = forms.IntegerField(label= _("From"),min_value = 0, max_value=65535)
_port_to = forms.IntegerField(label = _("To"),min_value = 0, max_value=65535)
random_port = forms.CheckBox(label = _("Random"))
def initial_data(self):
data = config_forms.CfgForm.initial_data(self)
data['_port_from'] , data['_port_to'] = data['listen_ports']
return data
def save(self,data):
data['listen_ports'] = [data['_port_from'] , data['_port_to'] ]
del(data['_port_from'])
del(data['_port_to'])
config_forms.CfgForm.save(self, data)
def validate(self, data):
if (data['_port_to'] < data['_port_from']):
raise forms.ValidationError('"Port from" must be greater than "Port to"')
def post_html(self):
return """
<ul>
<li>Active port:%(active_port)s </li>
<li><a href="http://deluge-torrent.org/test-port.php?port=%(active_port)s">Test active port</li>
</ul>
""" % {'active_port':sclient.get_listen_port()}
config_page.register('network','ports', NetworkPorts)
class NetworkExtra(config_forms.CfgForm ):
title = _("Extra's")
dht = forms.CheckBox(_("Mainline DHT"))
upnp = forms.CheckBox(_("UpNP"))
natpmp = forms.CheckBox(_("NAT-PMP"))
utpex = forms.CheckBox(_("Peer-Exchange"))
lsd = forms.CheckBox(_("LSD"))
config_page.register('network','extra', NetworkExtra)
class NetworkEnc(config_forms.CfgForm ):
title = _("Encryption")
_enc_choices = list(enumerate([_("Forced"),_("Enabled"),_("Disabled")]))
_level_choices = list(enumerate([_("Handshake"), _("Full") , _("Either")]))
enc_in_policy = forms.IntChoiceField(_("Inbound"), _enc_choices)
enc_out_policy = forms.IntChoiceField(_("Outbound"), _enc_choices)
enc_level = forms.IntChoiceField(_("Level"), _level_choices)
enc_prefer_rc4 = forms.CheckBox("Prefer to encrypt entire stream")
config_page.register('network','encryption', NetworkEnc)
class Proxy(config_forms.CfgForm):
title = _("Proxy")
_type_choices = list(enumerate(
[_("None"), _("Socksv4"), _("Socksv5"), _("Socksv5 W/ Auth"),_("HTTP"), _("HTTP W/ Auth")]))
proxy_type = forms.IntChoiceField(_("Type"), _type_choices)
proxy_server =forms.CharField(label= _("Host"),required=False)
proxy_port = forms.IntegerField(label= _("Port"),min_value = 0, max_value=65535 , required=False)
proxy_username = forms.CharField(label= _("Username"), required=False)
proxy_password = forms.Password(label= _("Password"), required=False)
config_page.register('network','proxy', Proxy)
class BandwithGlobal(config_forms.CfgForm):
title = _("Global")
info = _("-1 = Unlimited")
max_connections_global = forms.DelugeInt(_("Maximum Connections"))
max_download_speed = forms.DelugeFloat(_("Maximum Download Speed (Kib/s)"))
max_upload_speed = forms.DelugeFloat(_("Maximum Upload Speed (Kib/s)"))
max_upload_slots_global = forms.DelugeInt(_("Maximum Upload Slots"))
max_half_open_connections = forms.DelugeInt(_("Maximum Half-Open Connections"))
max_connections_per_second = forms.DelugeInt(_("Maximum Connection Attempts per Second"))
ignore_limits_on_local_network = forms.CheckBox(_("Ignore limits on local network"))
rate_limit_ip_overhead = forms.CheckBox(_("Rate Limit IP Overhead"))
config_page.register('bandwidth','global', BandwithGlobal)
class BandwithTorrent(config_forms.CfgForm):
title = _("Per Torrent")
info = _("-1 = Unlimited")
max_connections_per_torrent = forms.DelugeInt(_("Maximum Connections"))
max_download_speed_per_torrent = forms.DelugeFloat(_("Maximum Download Speed (Kib/s)"))
max_upload_speed_per_torrent = forms.DelugeFloat(_("Maximum Upload Speed (Kib/s)"))
max_upload_slots_per_torrent = forms.DelugeInt(_("Maximum Upload Slots"))
config_page.register('bandwidth','torrent', BandwithTorrent)
class Download(config_forms.CfgForm):
title = _("Download")
download_location = forms.ServerFolder(_("Store all downoads in"))
torrentfiles_location = forms.ServerFolder(_("Save .torrent files to"))
autoadd_location = forms.ServerFolder(_("Auto Add folder"), required=False)
autoadd_enable = forms.CheckBox(_("Auto Add enabled"))
compact_allocation = forms.CheckBox(_('Use Compact Allocation'))
prioritize_first_last_pieces = forms.CheckBox(_('Prioritize first and last pieces'))
#default_private = forms.CheckBox(_('Set private flag by default'))
config_page.register('deluge','download', Download)
class Daemon(config_forms.CfgForm):
title = _("Daemon")
info = _("Restart daemon and webui after changing these settings")
daemon_port = forms.IntegerField(_("Port"))
allow_remote = forms.CheckBox(_("Allow Remote Connections"))
config_page.register('deluge','daemon', Daemon)
class Queue(config_forms.CfgForm):
title = _("Queue")
info = _("-1 = unlimited")
queue_new_to_top = forms.CheckBox(_("Queue new torrents to top"))
#total_downloading = forms.DelugeInt(_("Total active downloading"))
max_active_limit = forms.DelugeInt(_("Total active torrents"))
max_active_downloading = forms.DelugeInt(_("Total active downloading"))
max_active_seeding = forms.DelugeInt(_("Total active seeding"))
share_ratio_limit = forms.FloatField(min_value=-1)
seed_time_ratio_limit = forms.FloatField(min_value=-1)
seed_time_limit = forms.FloatField(min_value=-1)
stop_seed_at_ratio = forms.CheckBox(_("Stop seeding when ratio reaches"))
#stop_ratio = forms.FloatField(min_value=-1)
remove_seed_at_ratio = forms.CheckBox(_("Remove torrent when ratio reached"))
stop_seed_ratio = forms.FloatField(min_value=-1)
config_page.register('deluge','queue', Queue)
"""
Will become a plugin, saved for later use.
class Notification(config_forms.CfgForm):
title = _("Notification")
_security_choices = [(t,t) for t in [None,"SSL","TLS"]]
ntf_email = forms.EmailField(label=_("Email"), required=False)
ntf_server =forms.CharField(label= _("Server"), required=False)
ntf_username = forms.CharField(label= _("Username"), required=False)
ntf_password = forms.CharField(label= _("Password"), required=False)
ntf_security = forms.ChoiceField( label=_("Security"), choices = _security_choices )
config_page.register('deluge','notification', Notification)
"""
class Plugins(forms.Form):
title = _("Enabled Plugins")
enabled_plugins = forms.LazyMultipleChoice(
choices_getter = lambda: [(p,p) for p in sclient.get_available_plugins()]
)
def initial_data(self):
return {'enabled_plugins':sclient.get_enabled_plugins()}
def save(self, data):
new_plugins = data.enabled_plugins
old_plugins = sclient.get_enabled_plugins()
enable = [p for p in new_plugins if p not in old_plugins]
disable = [p for p in old_plugins if p not in new_plugins]
plugin_manager = component.get("WebPluginManager")
for p in enable:
sclient.enable_plugin(p)
plugin_manager.enable_plugin(p)
for p in disable:
sclient.disable_plugin(p)
plugin_manager.disable_plugin(p)
config_page.register('deluge','plugins', Plugins)