1 # for localized messages
5 from Components.ConfigList import ConfigListScreen
6 from Screens.MessageBox import MessageBox
7 from Screens.Screen import Screen
8 from NTIVirtualKeyBoard import NTIVirtualKeyBoard
11 from Components.MenuList import MenuList
12 from Components.ActionMap import ActionMap
13 from Components.Label import Label
16 from Components.config import config, ConfigInteger, ConfigSubsection, \
17 ConfigText, ConfigPassword, ConfigYesNo, getConfigListEntry
19 # For new and improved _parse
20 from urlparse import urlparse, urlunparse
22 def _parse(url, defaultPort = None):
24 parsed = urlparse(url)
26 path = urlunparse(('','')+parsed[2:])
28 if defaultPort is None:
36 host, port = parsed[1], defaultPort
39 username, host = host.split('@')
41 username, password = username.split(':')
49 host, port = host.split(':')
55 return scheme, host, port, path, username, password
58 def __init__(self, cfg):
65 return self.cfg.name.value
68 return self.cfg.address.value
70 def getUsername(self):
71 return self.cfg.username.value
73 def getPassword(self):
74 return self.cfg.password.value
77 return self.cfg.port.value
80 return self.cfg.passive.value
87 if self.getUsername() != "":
88 uri = "ftp://%s:%s@%s:%d%s" % (self.getUsername(), self.getPassword(), self.getAddress(), self.getPort(), self.getPath())
90 uri = "ftp://%s:%d%s" % (self.getAddress(), self.getPort(), self.getPath())
99 def ftpserverFromURI(uri, name = "", save = True):
100 scheme, host, port, path, username, password = _parse(uri, defaultPort = 21)
102 newServer = ConfigSubsection()
104 config.plugins.ftpbrowser.server.append(newServer)
105 newServer.name = ConfigText(fixed_size = False)
106 newServer.name.value = name or host
107 newServer.address = ConfigText(fixed_size = False)
108 newServer.address.value = host
109 newServer.username = ConfigText(fixed_size = False)
110 newServer.username.value = username
111 newServer.password = ConfigPassword()
112 newServer.password.value = password
113 newServer.port = ConfigInteger(0, (0, 65535))
114 newServer.port.value = port
115 newServer.passive = ConfigYesNo(False)
119 config.plugins.ftpbrowser.servercount.value += 1
120 config.plugins.ftpbrowser.servercount.save()
122 return FTPServer(newServer)
124 class FTPServerEditor(ConfigListScreen, Screen):
126 <screen position="center,center" size="560,180" title="FTP Server Editor">
127 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" transparent="1" alphatest="on" />
128 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" transparent="1" alphatest="on" />
129 <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" transparent="1" alphatest="on" />
130 <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" transparent="1" alphatest="on" />
131 <widget name="key_red" position="0,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
132 <widget name="key_green" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
133 <widget name="key_yellow" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
134 <widget name="key_blue" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
135 <widget name="config" position="10,50" size="550,130" scrollbarMode="showOnDemand" />
138 def __init__(self, session, server):
139 Screen.__init__(self, session)
143 self["key_red"] = Label(_("Exit"))
144 self["key_green"] = Label(_("OK"))
145 self["key_yellow"] = Label("")
146 self["key_blue"] = Label(_("Enter URI"))
148 ConfigListScreen.__init__(self, [
149 getConfigListEntry(_("Name:"), server.cfg.name),
150 getConfigListEntry(_("Address:"), server.cfg.address),
151 getConfigListEntry(_("Username:"), server.cfg.username),
152 getConfigListEntry(_("Password:"), server.cfg.password),
153 getConfigListEntry(_("Port:"), server.cfg.port)
156 self["actions"] = ActionMap(["SetupActions", "ColorActions"],
158 "save": self.keySave,
159 "cancel": self.keyCancel,
163 self.onLayoutFinish.append(self.layoutFinished)
165 def layoutFinished(self):
166 self.setTitle(_("FTP Server Editor"))
168 def gotURI(self, res):
170 cfg = self.server.cfg
172 # _parse gets confused without a scheme
173 if not res.startswith("ftp://"):
175 scheme, host, port, path, username, password = _parse(res, defaultPort = 21)
177 cfg.address.value = host
178 cfg.username.value = username
179 cfg.password.value = password
180 cfg.port.value = port
183 self.session.openWithCallback(
186 title = _("Enter URI of FTP Server:"),
187 text = self.server.getURI(),
194 class FTPServerManager(Screen):
196 <screen position="center,center" size="560,420" title="FTP Server Manager" >
197 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" transparent="1" alphatest="on" />
198 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" transparent="1" alphatest="on" />
199 <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" transparent="1" alphatest="on" />
200 <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" transparent="1" alphatest="on" />
201 <widget name="key_red" position="0,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
202 <widget name="key_green" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
203 <widget name="key_yellow" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
204 <widget name="key_blue" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
205 <widget name="list" position="0,50" size="560,360" scrollbarMode="showOnDemand" />
208 def __init__(self, session):
209 Screen.__init__(self, session)
210 self.session = session
213 self["key_red"] = Label(_("Delete"))
214 self["key_green"] = Label(_("Add"))
215 self["key_yellow"] = Label(_("Edit"))
216 self["key_blue"] = Label(_("Save"))
217 self["list"] = MenuList([])
219 self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
222 "ok": self.okClicked,
229 self.onLayoutFinish.extend((
230 self.updateServerList,
234 def layoutFinished(self):
235 self.setTitle(_("FTP Server Manager"))
237 def updateServerList(self):
238 list = [server.name.value for server in config.plugins.ftpbrowser.server]
239 self["list"].setList(list)
241 def exit(self, server=None):
247 idx = self["list"].getSelectedIndex()
248 ftpserverconfig = config.plugins.ftpbrowser
249 Len = ftpserverconfig.servercount.value
251 if Len and idx < Len:
252 server = FTPServer(ftpserverconfig.server[idx])
256 self.session.openWithCallback(
259 _("Really delete this entry?\nIt cannot be recovered!")
262 def deleteConfirm(self, ret):
266 idx = self["list"].getSelectedIndex()
267 ftpserverconfig = config.plugins.ftpbrowser
268 Len = ftpserverconfig.servercount.value
270 if Len and idx < Len:
271 del ftpserverconfig.server[idx]
272 ftpserverconfig.servercount.value -= 1
273 self.updateServerList()
277 newServer = ConfigSubsection()
278 config.plugins.ftpbrowser.server.append(newServer)
279 newServer.name = ConfigText("Name", fixed_size = False)
280 newServer.address = ConfigText("192.168.2.12", fixed_size = False)
281 newServer.username = ConfigText("root", fixed_size = False)
282 newServer.password = ConfigPassword("dreambox")
283 newServer.port = ConfigInteger(21, (1, 65535))
284 newServer.passive = ConfigYesNo(False)
285 config.plugins.ftpbrowser.servercount.value += 1
286 config.plugins.ftpbrowser.servercount.save()
288 self.updateServerList()
292 idx = self["list"].getSelectedIndex()
293 ftpserverconfig = config.plugins.ftpbrowser
294 Len = ftpserverconfig.servercount.value
296 if Len and idx < Len:
297 self.session.openWithCallback(
300 FTPServer(ftpserverconfig.server[idx])
303 def editCallback(self, ret = False):
305 self.updateServerList()
308 def save(self, showMessageBox=True):
309 config.plugins.ftpbrowser.save()
313 _("Configuration saved."),
314 type = MessageBox.TYPE_INFO