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 = ""):
100 scheme, host, port, path, username, password = _parse(uri, defaultPort = 21)
102 newServer = ConfigSubsection()
103 config.plugins.ftpbrowser.server.append(newServer)
104 newServer.name = ConfigText(fixed_size = False)
105 newServer.name.value = name or host
106 newServer.address = ConfigText(fixed_size = False)
107 newServer.address.value = host
108 newServer.username = ConfigText(fixed_size = False)
109 newServer.username.value = username
110 newServer.password = ConfigPassword()
111 newServer.password.value = password
112 newServer.port = ConfigInteger(0, (0, 65535))
113 newServer.port.value = port
114 newServer.passive = ConfigYesNo(False)
117 config.plugins.ftpbrowser.servercount.value += 1
118 config.plugins.ftpbrowser.servercount.save()
122 class FTPServerEditor(ConfigListScreen, Screen):
124 <screen position="center,center" size="560,180" title="FTP Server Editor">
125 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" transparent="1" alphatest="on" />
126 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" transparent="1" alphatest="on" />
127 <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" transparent="1" alphatest="on" />
128 <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" transparent="1" alphatest="on" />
129 <widget name="key_red" position="0,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
130 <widget name="key_green" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
131 <widget name="key_yellow" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
132 <widget name="key_blue" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
133 <widget name="config" position="10,50" size="550,130" scrollbarMode="showOnDemand" />
136 def __init__(self, session, server):
137 Screen.__init__(self, session)
141 self["key_red"] = Label(_("Exit"))
142 self["key_green"] = Label(_("OK"))
143 self["key_yellow"] = Label("")
144 self["key_blue"] = Label(_("Enter URI"))
146 ConfigListScreen.__init__(self, [
147 getConfigListEntry(_("Name:"), server.cfg.name),
148 getConfigListEntry(_("Address:"), server.cfg.address),
149 getConfigListEntry(_("Username:"), server.cfg.username),
150 getConfigListEntry(_("Password:"), server.cfg.password),
151 getConfigListEntry(_("Port:"), server.cfg.port)
154 self["actions"] = ActionMap(["SetupActions", "ColorActions"],
156 "save": self.keySave,
157 "cancel": self.keyCancel,
161 self.onLayoutFinish.append(self.layoutFinished)
163 def layoutFinished(self):
164 self.setTitle(_("FTP Server Editor"))
166 def gotURI(self, res):
168 cfg = self.server.cfg
170 # _parse gets confused without a scheme
171 if not res.startswith("ftp://"):
173 scheme, host, port, path, username, password = _parse(res, defaultPort = 21)
175 cfg.address.value = host
176 cfg.username.value = username
177 cfg.password.value = password
178 cfg.port.value = port
181 self.session.openWithCallback(
184 title = _("Enter URI of FTP Server:"),
185 text = self.server.getURI(),
192 class FTPServerManager(Screen):
194 <screen position="center,center" size="560,420" title="FTP Server Manager" >
195 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" transparent="1" alphatest="on" />
196 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" transparent="1" alphatest="on" />
197 <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" transparent="1" alphatest="on" />
198 <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" transparent="1" alphatest="on" />
199 <widget name="key_red" position="0,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
200 <widget name="key_green" position="140,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
201 <widget name="key_yellow" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
202 <widget name="key_blue" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#1f771f" transparent="1" />
203 <widget name="list" position="0,50" size="560,360" scrollbarMode="showOnDemand" />
206 def __init__(self, session):
207 Screen.__init__(self, session)
208 self.session = session
211 self["key_red"] = Label(_("Delete"))
212 self["key_green"] = Label(_("Add"))
213 self["key_yellow"] = Label(_("Edit"))
214 self["key_blue"] = Label(_("Save"))
215 self["list"] = MenuList([])
217 self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
220 "ok": self.okClicked,
227 self.onLayoutFinish.extend((
228 self.updateServerList,
232 def layoutFinished(self):
233 self.setTitle(_("FTP Server Manager"))
235 def updateServerList(self):
236 list = [server.name.value for server in config.plugins.ftpbrowser.server]
237 self["list"].setList(list)
239 def exit(self, server=None):
245 idx = self["list"].getSelectedIndex()
246 ftpserverconfig = config.plugins.ftpbrowser
247 Len = ftpserverconfig.servercount.value
249 if Len and idx < Len:
250 server = FTPServer(ftpserverconfig.server[idx])
254 self.session.openWithCallback(
257 _("Really delete this entry?\nIt cannot be recovered!")
260 def deleteConfirm(self, ret):
264 idx = self["list"].getSelectedIndex()
265 ftpserverconfig = config.plugins.ftpbrowser
266 Len = ftpserverconfig.servercount.value
268 if Len and idx < Len:
269 del ftpserverconfig.server[idx]
270 ftpserverconfig.servercount.value -= 1
271 self.updateServerList()
275 newServer = ConfigSubsection()
276 config.plugins.ftpbrowser.server.append(newServer)
277 newServer.name = ConfigText("Name", fixed_size = False)
278 newServer.address = ConfigText("192.168.2.12", fixed_size = False)
279 newServer.username = ConfigText("root", fixed_size = False)
280 newServer.password = ConfigPassword("dreambox")
281 newServer.port = ConfigInteger(21, (1, 65535))
282 newServer.passive = ConfigYesNo(False)
283 config.plugins.ftpbrowser.servercount.value += 1
284 config.plugins.ftpbrowser.servercount.save()
286 self.updateServerList()
290 idx = self["list"].getSelectedIndex()
291 ftpserverconfig = config.plugins.ftpbrowser
292 Len = ftpserverconfig.servercount.value
294 if Len and idx < Len:
295 self.session.openWithCallback(
298 FTPServer(ftpserverconfig.server[idx])
301 def editCallback(self, ret = False):
303 self.updateServerList()
306 def save(self, showMessageBox=True):
307 config.plugins.ftpbrowser.save()
311 _("Configuration saved."),
312 type = MessageBox.TYPE_INFO