2 from Screens.MessageBox import MessageBox
3 from Screens.Screen import Screen
4 from Components.ConfigList import ConfigListScreen
7 from Screens.Setup import SetupSummary
10 from Components.ActionMap import ActionMap
11 from Components.Sources.StaticText import StaticText
14 from Components.config import config, getConfigListEntry, \
15 ConfigNumber, ConfigSelection, ConfigText, ConfigYesNo, NoSave
17 class EmissionBandwidth(Screen, ConfigListScreen):
18 def __init__(self, session, val, isTorrent, rpc_version):
19 Screen.__init__(self, session)
20 self.skinName = [ "EmissionBandwith", "Setup" ]
23 self.setup_title = _("Bandwidth settings")
24 self.onChangedEntry = []
26 ConfigListScreen.__init__(self, [], session = session, on_change = self.changed)
28 self.isTorrent = isTorrent
31 downloadLimitMode = val.downloadLimitMode
32 uploadLimitMode = val.uploadLimitMode
33 modelist = [(0, _("Global Setting")), (2, _("Unlimited")), (1, _("Limit"))]
35 downloadLimitMode = val.downloadLimited
36 uploadLimitMode = val.uploadLimited
37 modelist = [(0, _("Global Setting")), (1, _("Limit"))] # XXX: this is a pure guess...
39 self.downloadLimitMode = NoSave(ConfigSelection(choices = modelist, default = downloadLimitMode))
40 self.downloadLimit = NoSave(ConfigNumber(default = val.downloadLimit))
41 self.uploadLimitMode = NoSave(ConfigSelection(choices = modelist, default = uploadLimitMode))
42 self.uploadLimit = NoSave(ConfigNumber(default = val.uploadLimit))
43 self.maxConnectedPeers = NoSave(ConfigNumber(default = val.maxConnectedPeers))
44 else: #if not isTorrent:
46 peerLimit = val.peer_limit
48 pex_allowed = val.pex_allowed
50 peerLimit = val.peer_limit_global
52 pex_allowed = val.pex_enabled
54 self.downloadLimitMode = NoSave(ConfigSelection(choices = [(0, _("Unlimited")), (1, _("Limit"))], default = val.speed_limit_down_enabled))
55 self.downloadLimit = NoSave(ConfigNumber(default = val.speed_limit_down))
56 self.uploadLimitMode = NoSave(ConfigSelection(choices = [(0, _("Unlimited")), (1, _("Limit"))], default = val.speed_limit_up_enabled))
57 self.uploadLimit = NoSave(ConfigNumber(default = val.speed_limit_up))
58 self.maxConnectedPeers = NoSave(ConfigNumber(default = peerLimit))
59 self.encryption = NoSave(ConfigSelection(choices = [('required', _("required")), ('preferred', _("preferred")), ('tolerated', _("tolerated"))], default = val.encryption))
60 self.download_dir = NoSave(ConfigText(default = val.download_dir, fixed_size = False))
61 self.pex_allowed = NoSave(ConfigYesNo(default = pex_allowed))
62 self.port = NoSave(ConfigNumber(default = port))
63 self.port_forwarding_enabled = NoSave(ConfigYesNo(default = val.port_forwarding_enabled))
65 self.downloadLimitMode.addNotifier(self.updateList, initial_call = False)
66 self.uploadLimitMode.addNotifier(self.updateList, initial_call = False)
71 self["key_green"] = StaticText(_("OK"))
72 self["key_red"] = StaticText(_("Cancel"))
73 self.full_title = _("%s bandwidth settings") % (isTorrent and str(val.name) or "eMission")
76 self["actions"] = ActionMap(["SetupActions"],
78 "cancel": self.keyCancel,
86 self.onLayoutFinish.append(self.setCustomTitle)
88 def updateList(self, *args):
90 getConfigListEntry(_("Download rate"), self.downloadLimitMode)
92 if self.downloadLimitMode.value == 1:
93 list.append(getConfigListEntry(_("Limit"), self.downloadLimit))
94 list.append(getConfigListEntry(_("Upload rate"), self.uploadLimitMode))
95 if self.uploadLimitMode.value == 1:
96 list.append(getConfigListEntry(_("Limit"), self.uploadLimit))
97 list.append(getConfigListEntry(_("Maximum Connections"), self.maxConnectedPeers))
98 if not self.isTorrent:
100 getConfigListEntry(_("Encryption"), self.encryption),
101 getConfigListEntry(_("Download directory"), self.download_dir),
102 getConfigListEntry(_("Allow PEX"), self.pex_allowed),
103 getConfigListEntry(_("Port"), self.port),
104 getConfigListEntry(_("Enable Port-Forwarding"), self.port_forwarding_enabled),
106 self["config"].setList(list)
108 def setCustomTitle(self):
109 self.setTitle(self.full_title)
112 for x in self.onChangedEntry:
115 def getCurrentEntry(self):
116 return self["config"].getCurrent()[0]
118 def getCurrentValue(self):
119 return str(self["config"].getCurrent()[1].getText())
121 def createSummary(self):
125 if self.downloadLimitMode.value == 2 or self.uploadLimitMode.value == 2:
128 _("Setting \"Unlimited\" is not supported via RPC.\nEither abort or choose another limit to continue."),
129 type = MessageBox.TYPE_ERROR
132 # NOTE: transmissionrpc will take care of translating the arguments
134 'speed_limit_down_enabled': self.downloadLimitMode.value,
135 'speed_limit_down': self.downloadLimit.value,
136 'speed_limit_up_enabled': self.uploadLimitMode.value,
137 'speed_limit_up': self.uploadLimit.value,
138 'peer_limit': self.maxConnectedPeers.value,
140 if not self.isTorrent:
142 'encryption': self.encryption.value,
143 'download_dir': self.download_dir.value,
144 'pex_allowed': self.pex_allowed.value,
145 'port': self.port.value,
146 'port_forwarding_enabled': self.port_forwarding_enabled.value,